From efab48c06554476eae7a7bd946dee033d16a9c38 Mon Sep 17 00:00:00 2001 From: Jaikiran Pai Date: Fri, 14 Jun 2024 12:48:43 +0000 Subject: [PATCH 001/102] 8333714: Cleanup the usages of CHECK_EXCEPTION_NULL_FAIL macro in java launcher Reviewed-by: alanb --- src/java.base/share/native/libjli/java.c | 90 ++++++++++++++++-------- 1 file changed, 59 insertions(+), 31 deletions(-) diff --git a/src/java.base/share/native/libjli/java.c b/src/java.base/share/native/libjli/java.c index 1d506c3a6df70..1b4ece834d6e5 100644 --- a/src/java.base/share/native/libjli/java.c +++ b/src/java.base/share/native/libjli/java.c @@ -387,73 +387,92 @@ JLI_Launch(int argc, char ** argv, /* main argc, argv */ } \ } while (JNI_FALSE) -#define CHECK_EXCEPTION_NULL_FAIL(obj) \ - do { \ - if ((*env)->ExceptionOccurred(env)) { \ - return 0; \ - } else if (obj == NULL) { \ - return 0; \ - } \ - } while (JNI_FALSE) - /* - * Invoke a static main with arguments. Returns 1 (true) if successful otherwise - * processes the pending exception from GetStaticMethodID and returns 0 (false). + * Invokes static main(String[]) method if found. + * Returns 0 with a pending exception if not found. Returns 1 if invoked, maybe + * a pending exception if the method threw. */ int invokeStaticMainWithArgs(JNIEnv *env, jclass mainClass, jobjectArray mainArgs) { jmethodID mainID = (*env)->GetStaticMethodID(env, mainClass, "main", "([Ljava/lang/String;)V"); - CHECK_EXCEPTION_NULL_FAIL(mainID); + if (mainID == NULL) { + // static main(String[]) not found + return 0; + } (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs); - return 1; + return 1; // method was invoked } /* - * Invoke an instance main with arguments. Returns 1 (true) if successful otherwise - * processes the pending exception from GetMethodID and returns 0 (false). + * Invokes instance main(String[]) method if found. + * Returns 0 with a pending exception if not found. Returns 1 if invoked, maybe + * a pending exception if the method threw. */ int invokeInstanceMainWithArgs(JNIEnv *env, jclass mainClass, jobjectArray mainArgs) { jmethodID constructor = (*env)->GetMethodID(env, mainClass, "", "()V"); - CHECK_EXCEPTION_NULL_FAIL(constructor); + if (constructor == NULL) { + // main class' no-arg constructor not found + return 0; + } jobject mainObject = (*env)->NewObject(env, mainClass, constructor); - CHECK_EXCEPTION_NULL_FAIL(mainObject); + if (mainObject == NULL) { + // main class instance couldn't be constructed + return 0; + } jmethodID mainID = (*env)->GetMethodID(env, mainClass, "main", "([Ljava/lang/String;)V"); - CHECK_EXCEPTION_NULL_FAIL(mainID); + if (mainID == NULL) { + // instance method main(String[]) method not found + return 0; + } (*env)->CallVoidMethod(env, mainObject, mainID, mainArgs); - return 1; + return 1; // method was invoked } /* - * Invoke a static main without arguments. Returns 1 (true) if successful otherwise - * processes the pending exception from GetStaticMethodID and returns 0 (false). + * Invokes no-arg static main() method if found. + * Returns 0 with a pending exception if not found. Returns 1 if invoked, maybe + * a pending exception if the method threw. */ int invokeStaticMainWithoutArgs(JNIEnv *env, jclass mainClass) { jmethodID mainID = (*env)->GetStaticMethodID(env, mainClass, "main", "()V"); - CHECK_EXCEPTION_NULL_FAIL(mainID); + if (mainID == NULL) { + // static main() method couldn't be located + return 0; + } (*env)->CallStaticVoidMethod(env, mainClass, mainID); - return 1; + return 1; // method was invoked } /* - * Invoke an instance main without arguments. Returns 1 (true) if successful otherwise - * processes the pending exception from GetMethodID and returns 0 (false). + * Invokes no-arg instance main() method if found. + * Returns 0 with a pending exception if not found. Returns 1 if invoked, maybe + * a pending exception if the method threw. */ int invokeInstanceMainWithoutArgs(JNIEnv *env, jclass mainClass) { jmethodID constructor = (*env)->GetMethodID(env, mainClass, "", "()V"); - CHECK_EXCEPTION_NULL_FAIL(constructor); + if (constructor == NULL) { + // main class' no-arg constructor not found + return 0; + } jobject mainObject = (*env)->NewObject(env, mainClass, constructor); - CHECK_EXCEPTION_NULL_FAIL(mainObject); + if (mainObject == NULL) { + // couldn't create instance of main class + return 0; + } jmethodID mainID = (*env)->GetMethodID(env, mainClass, "main", "()V"); - CHECK_EXCEPTION_NULL_FAIL(mainID); + if (mainID == NULL) { + // instance method main() not found + return 0; + } (*env)->CallVoidMethod(env, mainObject, mainID); - return 1; + return 1; // method was invoked } int @@ -639,6 +658,8 @@ JavaMain(void* _args) } } if (!ret) { + // An appropriate main method couldn't be located, check and report + // any exception and LEAVE() CHECK_EXCEPTION_LEAVE(1); } @@ -646,8 +667,15 @@ JavaMain(void* _args) * The launcher's exit code (in the absence of calls to * System.exit) will be non-zero if main threw an exception. */ - ret = (*env)->ExceptionOccurred(env) == NULL ? 0 : 1; - + if (ret && (*env)->ExceptionOccurred(env) == NULL) { + // main method was invoked and no exception was thrown from it, + // return success. + ret = 0; + } else { + // Either the main method couldn't be located or an exception occurred + // in the invoked main method, return failure. + ret = 1; + } LEAVE(); } From b5212d7bfe78b18c18e45c42c724a22365709328 Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Fri, 14 Jun 2024 13:50:21 +0000 Subject: [PATCH 002/102] 8328107: Shenandoah/C2: TestVerifyLoopOptimizations test failure Reviewed-by: shade --- .../gc/shenandoah/c2/shenandoahSupport.cpp | 8 ++ .../compiler/TestBarrierOnLoopBackedge.java | 84 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 test/hotspot/jtreg/gc/shenandoah/compiler/TestBarrierOnLoopBackedge.java diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp index dbb45995698a6..8cd76dd3d6bc4 100644 --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp @@ -1333,6 +1333,14 @@ void ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop* phase) { OuterStripMinedLoopNode* outer = head->as_OuterStripMinedLoop(); hide_strip_mined_loop(outer, outer->unique_ctrl_out()->as_CountedLoop(), phase); } + if (head->is_BaseCountedLoop() && ctrl->is_IfProj() && ctrl->in(0)->is_BaseCountedLoopEnd() && + head->as_BaseCountedLoop()->loopexit() == ctrl->in(0)) { + Node* entry = head->in(LoopNode::EntryControl); + Node* backedge = head->in(LoopNode::LoopBackControl); + Node* new_head = new LoopNode(entry, backedge); + phase->register_control(new_head, phase->get_loop(entry), entry); + phase->lazy_replace(head, new_head); + } } // Expand load-reference-barriers diff --git a/test/hotspot/jtreg/gc/shenandoah/compiler/TestBarrierOnLoopBackedge.java b/test/hotspot/jtreg/gc/shenandoah/compiler/TestBarrierOnLoopBackedge.java new file mode 100644 index 0000000000000..a72c7d69d7f65 --- /dev/null +++ b/test/hotspot/jtreg/gc/shenandoah/compiler/TestBarrierOnLoopBackedge.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2024, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8328107 + * @summary Barrier expanded on backedge break loop verification code + * @requires vm.gc.Shenandoah + * + * @run main/othervm -XX:+UseShenandoahGC -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,TestBarrierOnLoopBackedge::notInlined + * -XX:+IgnoreUnrecognizedVMOptions -XX:+VerifyLoopOptimizations TestBarrierOnLoopBackedge + * @run main/othervm -XX:+UseShenandoahGC -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,TestBarrierOnLoopBackedge::notInlined + * -XX:+IgnoreUnrecognizedVMOptions -XX:+VerifyLoopOptimizations -XX:-UseCountedLoopSafepoints TestBarrierOnLoopBackedge + */ + +public class TestBarrierOnLoopBackedge { + private static A field = new A(); + private static final A finalField = new A(); + private static float floatField; + + public static void main(String[] args) { + A[] array = new A[1]; + array[0] = finalField; + for (int i = 0; i < 20_000; i++) { + test1(); + test2(); + } + } + + private static void test1() { + floatField = field.f; + for (int i = 0; i < 1000; i++) { + notInlined(field); // load barrier split thru phi and ends up on back edge + if (i % 2 == 0) { + field = finalField; + } + } + } + + private static void test2() { + A[] array = new A[1]; + notInlined(array); + int i = 0; + A a = array[0]; + for (;;) { + synchronized (new Object()) { + } + notInlined(a); + i++; + if (i >= 1000) { + break; + } + a = array[0]; // load barrier pinned on backedge + } + } + + private static void notInlined(Object a) { + + } + + private static class A { + float f; + } +} From dae0bda9d0096c25d6378561ab2d09df05f381cf Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Fri, 14 Jun 2024 14:53:05 +0000 Subject: [PATCH 003/102] 8334252: Verifier error for lambda declared in early construction context Reviewed-by: mcimadamore --- .../sun/tools/javac/comp/LambdaToMethod.java | 24 +++++----- .../javac/SuperInit/LambdaOuterCapture.java | 46 +++++++++++++++++++ 2 files changed, 57 insertions(+), 13 deletions(-) create mode 100644 test/langtools/tools/javac/SuperInit/LambdaOuterCapture.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java index 5b70a376f2a90..7e5dcee0e8d67 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1239,7 +1239,7 @@ class LambdaAnalyzerPreprocessor extends TreeTranslator { private int lambdaCount = 0; /** - * List of types undergoing construction via explicit constructor chaining. + * List of types undergoing construction, i.e., in an early construction context. */ private List typesUnderConstruction; @@ -1280,15 +1280,10 @@ private JCClassDecl analyzeAndPreprocessClass(JCClassDecl tree) { @Override public void visitApply(JCMethodInvocation tree) { - List previousNascentTypes = typesUnderConstruction; - try { - Name methName = TreeInfo.name(tree.meth); - if (methName == names._this || methName == names._super) { - typesUnderConstruction = typesUnderConstruction.prepend(currentClass()); - } - super.visitApply(tree); - } finally { - typesUnderConstruction = previousNascentTypes; + super.visitApply(tree); + if (TreeInfo.isConstructorCall(tree)) { + Assert.check(typesUnderConstruction.head == currentClass()); + typesUnderConstruction = typesUnderConstruction.tail; // end of early construction context } } // where @@ -1439,13 +1434,16 @@ private LambdaTranslationContext analyzeLambda(JCLambda tree, String statKey) { @Override public void visitMethodDef(JCMethodDecl tree) { + List prevTypesUnderConstruction = typesUnderConstruction; List prevStack = frameStack; try { + if (TreeInfo.isConstructor(tree)) // start early construction context (Object() notwithstanding) + typesUnderConstruction = typesUnderConstruction.prepend(currentClass()); frameStack = frameStack.prepend(new Frame(tree)); super.visitMethodDef(tree); - } - finally { + } finally { frameStack = prevStack; + typesUnderConstruction = prevTypesUnderConstruction; } } diff --git a/test/langtools/tools/javac/SuperInit/LambdaOuterCapture.java b/test/langtools/tools/javac/SuperInit/LambdaOuterCapture.java new file mode 100644 index 0000000000000..092e2916c69d5 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/LambdaOuterCapture.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 8194743 + * @summary Test lambda declared in early construction context + * @enablePreview + */ + +public class LambdaOuterCapture { + + public class Inner { + + public Inner() { + Runnable r = () -> System.out.println(LambdaOuterCapture.this); + this(r); + } + + public Inner(Runnable r) { + } + } + + public static void main(String[] args) { + new LambdaOuterCapture().new Inner(); + } +} From 548e95a689d63e97ddbdfe7dd7df3a2e3377046c Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Fri, 14 Jun 2024 15:32:04 +0000 Subject: [PATCH 004/102] 8330702: Update failure handler to don't generate Error message if cores actions are empty Reviewed-by: sspitsyn --- .../jdk/test/failurehandler/action/ActionSet.java | 9 ++++++--- test/failure_handler/src/share/conf/windows.properties | 4 +++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/test/failure_handler/src/share/classes/jdk/test/failurehandler/action/ActionSet.java b/test/failure_handler/src/share/classes/jdk/test/failurehandler/action/ActionSet.java index d67611697bf64..46f1c5bc6f14b 100644 --- a/test/failure_handler/src/share/classes/jdk/test/failurehandler/action/ActionSet.java +++ b/test/failure_handler/src/share/classes/jdk/test/failurehandler/action/ActionSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -104,8 +104,11 @@ private List getPatternActions(PrintWriter log, private String[] getTools(PrintWriter writer, Properties p, String key) { String value = p.getProperty(key); - if (value == null || value.isEmpty()) { - writer.printf("ERROR: '%s' property is empty%n", key); + if (value == null) { + writer.printf("ERROR: '%s' property is not set%n", key); + return new String[]{}; + } + if (value.isEmpty()) { return new String[]{}; } return value.split(" "); diff --git a/test/failure_handler/src/share/conf/windows.properties b/test/failure_handler/src/share/conf/windows.properties index e22c1a523d8a3..6d11553ebbf5d 100644 --- a/test/failure_handler/src/share/conf/windows.properties +++ b/test/failure_handler/src/share/conf/windows.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -59,6 +59,8 @@ native.stack.params.repeat=6 native.core.app=cdb native.core.args=-c ".dump /mA core.%p;qd" -p %p native.core.params.timeout=600000 + +cores= ################################################################################ # environment info to gather ################################################################################ From 8464ce6db5cbd5d50ac2a2bcba905b7255f510f5 Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Fri, 14 Jun 2024 15:32:19 +0000 Subject: [PATCH 005/102] 8332113: Update nsk.share.Log to be always verbose Reviewed-by: sspitsyn, cjplummer --- test/hotspot/jtreg/vmTestbase/nsk/share/Log.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/Log.java b/test/hotspot/jtreg/vmTestbase/nsk/share/Log.java index 735f487f6c3c1..e575018249533 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/Log.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/Log.java @@ -74,15 +74,15 @@ public class Log { /** * Is log-mode verbose? - * Default value is false. + * Always enabled. */ - private boolean verbose = false; + private final boolean verbose = true; /** * Should log messages prefixed with timestamps? - * Default value is false. + * Always enabled. */ - private boolean timestamp = false; + private final boolean timestamp = true; /** * Names for trace levels @@ -193,7 +193,6 @@ public Log(PrintStream stream) { */ public Log(PrintStream stream, boolean verbose) { this(stream); - this.verbose = verbose; } /** @@ -204,7 +203,6 @@ public Log(PrintStream stream, boolean verbose) { public Log(PrintStream stream, ArgumentParser argsParser) { this(stream, argsParser.verbose()); traceLevel = argsParser.getTraceLevel(); - timestamp = argsParser.isTimestamp(); } ///////////////////////////////////////////////////////////////// @@ -220,10 +218,9 @@ public boolean verbose() { * Enable or disable verbose mode for printing messages. */ public void enableVerbose(boolean enable) { - if (!verbose) { - flushLogBuffer(); + if (!enable) { + throw new RuntimeException("The non-verbose logging is not supported."); } - verbose = enable; } public int getTraceLevel() { @@ -422,7 +419,6 @@ protected synchronized void logTo(PrintStream stream) { out.flush(); } out = stream; - verbose = true; } ///////////////////////////////////////////////////////////////// From 31e8debae63e008da79e403bcb870a7be631af2c Mon Sep 17 00:00:00 2001 From: Liming Liu Date: Mon, 17 Jun 2024 06:16:26 +0000 Subject: [PATCH 006/102] 8324781: runtime/Thread/TestAlwaysPreTouchStacks.java failed with Expected a higher ratio between stack committed and reserved 8325218: gc/parallel/TestAlwaysPreTouchBehavior.java fails Reviewed-by: stefank, jsjolen, stuefe --- test/hotspot/jtreg/ProblemList.txt | 2 -- .../gc/parallel/TestAlwaysPreTouchBehavior.java | 3 +-- .../runtime/Thread/TestAlwaysPreTouchStacks.java | 14 +++++++++----- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 5290a9bb6260e..4391357b70349 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -77,7 +77,6 @@ gc/epsilon/TestMemoryMXBeans.java 8206434 generic-all gc/g1/humongousObjects/objectGraphTest/TestObjectGraphAfterGC.java 8156755 generic-all gc/g1/logging/TestG1LoggingFailure.java 8169634 generic-all gc/g1/humongousObjects/TestHeapCounters.java 8178918 generic-all -gc/parallel/TestAlwaysPreTouchBehavior.java 8325218 linux-all gc/TestAllocHumongousFragment.java#adaptive 8298781 generic-all gc/TestAllocHumongousFragment.java#aggressive 8298781 generic-all gc/TestAllocHumongousFragment.java#iu-aggressive 8298781 generic-all @@ -102,7 +101,6 @@ runtime/StackGuardPages/TestStackGuardPagesNative.java 8303612 linux-all runtime/ErrorHandling/TestDwarf.java#checkDecoder 8305489 linux-all runtime/ErrorHandling/MachCodeFramesInErrorFile.java 8313315 linux-ppc64le runtime/cds/appcds/customLoader/HelloCustom_JFR.java 8241075 linux-all,windows-x64 -runtime/Thread/TestAlwaysPreTouchStacks.java 8324781 linux-all applications/jcstress/copy.java 8229852 linux-all diff --git a/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java b/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java index 12c03661e0e22..3a5b2b557cc92 100644 --- a/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java +++ b/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java @@ -31,7 +31,7 @@ * @requires os.family == "linux" * @requires os.maxMemory > 2G * @library /test/lib - * @run main/othervm -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+AlwaysPreTouch gc.parallel.TestAlwaysPreTouchBehavior + * @run main/othervm -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+AlwaysPreTouch -XX:+UnlockDiagnosticVMOptions -XX:-UseMadvPopulateWrite gc.parallel.TestAlwaysPreTouchBehavior */ import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; @@ -77,4 +77,3 @@ public static void main(String [] args) { Asserts.assertGreaterThanOrEqual(rss, committedMemory, "RSS of this process(" + rss + "kb) should be bigger than or equal to committed heap mem(" + committedMemory + "kb)"); } } - diff --git a/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java b/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java index a10f41932348f..b12eff0cf8454 100644 --- a/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java +++ b/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java @@ -27,6 +27,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.concurrent.CyclicBarrier; @@ -89,14 +90,17 @@ public static void main(String[] args) throws Exception { // should show up with fully - or almost fully - committed thread stacks. } else { - - ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( + ArrayList vmArgs = new ArrayList<>(); + Collections.addAll(vmArgs, "-XX:+UnlockDiagnosticVMOptions", "-Xmx100M", "-XX:+AlwaysPreTouchStacks", - "-XX:NativeMemoryTracking=summary", "-XX:+PrintNMTStatistics", - "TestAlwaysPreTouchStacks", - "test"); + "-XX:NativeMemoryTracking=summary", "-XX:+PrintNMTStatistics"); + if (System.getProperty("os.name").contains("Linux")) { + vmArgs.add("-XX:-UseMadvPopulateWrite"); + } + Collections.addAll(vmArgs, "TestAlwaysPreTouchStacks", "test"); + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(vmArgs); OutputAnalyzer output = new OutputAnalyzer(pb.start()); output.reportDiagnosticSummary(); From 29b63928387a8b6ab387057cb3eac4771b1bfff1 Mon Sep 17 00:00:00 2001 From: Emanuel Peter Date: Mon, 17 Jun 2024 06:58:55 +0000 Subject: [PATCH 007/102] 8334228: C2 SuperWord: fix JDK-24 regression in VPointer::cmp_for_sort after JDK-8325155 Reviewed-by: chagedorn, kvn --- src/hotspot/share/opto/vectorization.cpp | 29 +++++----- .../vectorization/TestOffsetSorting.java | 55 +++++++++++++++++++ 2 files changed, 70 insertions(+), 14 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/vectorization/TestOffsetSorting.java diff --git a/src/hotspot/share/opto/vectorization.cpp b/src/hotspot/share/opto/vectorization.cpp index ac575d7192c3c..01b235e8b27e8 100644 --- a/src/hotspot/share/opto/vectorization.cpp +++ b/src/hotspot/share/opto/vectorization.cpp @@ -807,24 +807,26 @@ void VPointer::maybe_add_to_invar(Node* new_invar, bool negate) { _invar = register_if_new(add); } +// We use two comparisons, because a subtraction could underflow. +#define RETURN_CMP_VALUE_IF_NOT_EQUAL(a, b) \ + if (a < b) { return -1; } \ + if (a > b) { return 1; } + // To be in the same group, two VPointers must be the same, // except for the offset. int VPointer::cmp_for_sort_by_group(const VPointer** p1, const VPointer** p2) { const VPointer* a = *p1; const VPointer* b = *p2; - int cmp_base = a->base()->_idx - b->base()->_idx; - if (cmp_base != 0) { return cmp_base; } - - int cmp_opcode = a->mem()->Opcode() - b->mem()->Opcode(); - if (cmp_opcode != 0) { return cmp_opcode; } + RETURN_CMP_VALUE_IF_NOT_EQUAL(a->base()->_idx, b->base()->_idx); + RETURN_CMP_VALUE_IF_NOT_EQUAL(a->mem()->Opcode(), b->mem()->Opcode()); + RETURN_CMP_VALUE_IF_NOT_EQUAL(a->scale_in_bytes(), b->scale_in_bytes()); - int cmp_scale = a->scale_in_bytes() - b->scale_in_bytes(); - if (cmp_scale != 0) { return cmp_scale; } + int a_inva_idx = a->invar() == nullptr ? 0 : a->invar()->_idx; + int b_inva_idx = b->invar() == nullptr ? 0 : b->invar()->_idx; + RETURN_CMP_VALUE_IF_NOT_EQUAL(a_inva_idx, b_inva_idx); - int cmp_invar = (a->invar() == nullptr ? 0 : a->invar()->_idx) - - (b->invar() == nullptr ? 0 : b->invar()->_idx); - return cmp_invar; + return 0; // equal } // We compare by group, then by offset, and finally by node idx. @@ -835,10 +837,9 @@ int VPointer::cmp_for_sort(const VPointer** p1, const VPointer** p2) { const VPointer* a = *p1; const VPointer* b = *p2; - int cmp_offset = a->offset_in_bytes() - b->offset_in_bytes(); - if (cmp_offset != 0) { return cmp_offset; } - - return a->mem()->_idx - b->mem()->_idx; + RETURN_CMP_VALUE_IF_NOT_EQUAL(a->offset_in_bytes(), b->offset_in_bytes()); + RETURN_CMP_VALUE_IF_NOT_EQUAL(a->mem()->_idx, b->mem()->_idx); + return 0; // equal } #ifndef PRODUCT diff --git a/test/hotspot/jtreg/compiler/vectorization/TestOffsetSorting.java b/test/hotspot/jtreg/compiler/vectorization/TestOffsetSorting.java new file mode 100644 index 0000000000000..a1b86293a1886 --- /dev/null +++ b/test/hotspot/jtreg/compiler/vectorization/TestOffsetSorting.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8334228 + * @summary Test sorting of VPointer by offset, when subtraction of two offsets can overflow. + * @run main/othervm -XX:CompileCommand=compileonly,compiler.vectorization.TestOffsetSorting::test -Xcomp compiler.vectorization.TestOffsetSorting + * @run main compiler.vectorization.TestOffsetSorting + */ + +package compiler.vectorization; + +public class TestOffsetSorting { + static int RANGE = 10_000; + + public static void main(String[] args) { + int[] a = new int[RANGE]; + for (int i = 0; i < 10_000; i++) { + try { + test(a, 0); + throw new RuntimeException("test should go out-of-bounds"); + } catch (ArrayIndexOutOfBoundsException e) { + } + } + } + + static void test(int[] a, int invar) { + int large = (1 << 28) + (1 << 20); + for (int i = 0; i < 1_000; i++) { + a[i + invar - large] = 42; + a[i + invar + large] = 42; + } + } +} From 7b38bfea331437ad99277032de7fce939303abc8 Mon Sep 17 00:00:00 2001 From: Emanuel Peter Date: Mon, 17 Jun 2024 07:00:03 +0000 Subject: [PATCH 008/102] 8333729: C2 SuperWord: remove some @requires usages in test/hotspot/jtreg/compiler/loopopts/superword Reviewed-by: chagedorn, kvn --- .../superword/CoLocatePackMemoryState.java | 3 +- .../loopopts/superword/RedTest_long.java | 6 +++- .../loopopts/superword/ReductionPerf.java | 5 ++- .../loopopts/superword/TestAlignVector.java | 5 +-- .../superword/TestAlignVectorFuzzer.java | 5 --- .../superword/TestCyclicDependency.java | 1 - .../superword/TestDependencyOffsets.java | 6 ++-- .../superword/TestGeneralizedReductions.java | 20 +++++++---- ...tIndependentPacksWithCyclicDependency.java | 9 +++-- ...IndependentPacksWithCyclicDependency2.java | 5 ++- .../superword/TestLargeCompilation.java | 4 +-- .../superword/TestLargeScaleAndStride.java | 3 +- .../superword/TestMovingLoadBeforeStore.java | 6 ++-- .../loopopts/superword/TestMulAddS2I.java | 4 +-- .../superword/TestPeeledReductionNode.java | 5 +-- .../superword/TestPickFirstMemoryState.java | 1 - .../superword/TestPickLastMemoryState.java | 1 - .../TestScheduleReordersScalarMemops.java | 5 ++- .../loopopts/superword/TestSplitPacks.java | 3 +- .../superword/TestUnorderedReduction.java | 12 +++---- ...norderedReductionPartialVectorization.java | 2 +- .../loopopts/superword/Vec_MulAddS2I.java | 33 ++++++++++++++----- 22 files changed, 76 insertions(+), 68 deletions(-) diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/CoLocatePackMemoryState.java b/test/hotspot/jtreg/compiler/loopopts/superword/CoLocatePackMemoryState.java index 9dc1cf1f031ba..c60144da0cdae 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/CoLocatePackMemoryState.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/CoLocatePackMemoryState.java @@ -24,12 +24,11 @@ /** * @test - * @requires vm.compiler2.enabled * @bug 8238438 * @summary Tests to select the memory state of the last load in a load pack in SuperWord::co_locate_pack. * * @run main/othervm -Xbatch -XX:CompileCommand=compileonly,compiler.loopopts.superword.CoLocatePackMemoryState::test - * -XX:LoopMaxUnroll=16 compiler.loopopts.superword.CoLocatePackMemoryState + * -XX:+IgnoreUnrecognizedVMOptions -XX:LoopMaxUnroll=16 compiler.loopopts.superword.CoLocatePackMemoryState */ package compiler.loopopts.superword; diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/RedTest_long.java b/test/hotspot/jtreg/compiler/loopopts/superword/RedTest_long.java index 27bfa8cec0ebb..ee691a91bdadd 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/RedTest_long.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/RedTest_long.java @@ -25,7 +25,6 @@ * @test * @bug 8240248 * @summary Add C2 x86 Superword support for scalar logical reduction optimizations : long test - * @requires vm.bits == "64" * @library /test/lib / * @run driver compiler.loopopts.superword.RedTest_long */ @@ -137,6 +136,7 @@ public static void reductionInit2( failOn = {IRNode.ADD_REDUCTION_VL}) @IR(applyIfCPUFeature = {"avx2", "true"}, applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.ADD_REDUCTION_VL, ">= 1", IRNode.ADD_REDUCTION_VL, "<= 2"}) // one for main-loop, one for vector-post-loop public static long sumReductionImplement( long[] a, @@ -154,6 +154,7 @@ public static long sumReductionImplement( failOn = {IRNode.OR_REDUCTION_V}) @IR(applyIfCPUFeature = {"avx2", "true"}, applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.OR_REDUCTION_V, ">= 1", IRNode.OR_REDUCTION_V, "<= 2"}) // one for main-loop, one for vector-post-loop public static long orReductionImplement( long[] a, @@ -171,6 +172,7 @@ public static long orReductionImplement( failOn = {IRNode.AND_REDUCTION_V}) @IR(applyIfCPUFeature = {"avx2", "true"}, applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.AND_REDUCTION_V, ">= 1", IRNode.AND_REDUCTION_V, "<= 2"}) // one for main-loop, one for vector-post-loop public static long andReductionImplement( long[] a, @@ -188,6 +190,7 @@ public static long andReductionImplement( failOn = {IRNode.XOR_REDUCTION_V}) @IR(applyIfCPUFeature = {"avx2", "true"}, applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.XOR_REDUCTION_V, ">= 1", IRNode.XOR_REDUCTION_V, "<= 2"}) // one for main-loop, one for vector-post-loop public static long xorReductionImplement( long[] a, @@ -205,6 +208,7 @@ public static long xorReductionImplement( failOn = {IRNode.MUL_REDUCTION_VL}) @IR(applyIfCPUFeature = {"avx512dq", "true"}, applyIfAnd = {"SuperWordReductions", "true", "LoopMaxUnroll", ">= 8"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.MUL_REDUCTION_VL, ">= 1", IRNode.MUL_REDUCTION_VL, "<= 2"}) // one for main-loop, one for vector-post-loop public static long mulReductionImplement( long[] a, diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/ReductionPerf.java b/test/hotspot/jtreg/compiler/loopopts/superword/ReductionPerf.java index b1495d00548f8..591765bb5823f 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/ReductionPerf.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/ReductionPerf.java @@ -25,11 +25,10 @@ * @test * @bug 8074981 8302652 * @summary Test SuperWord Reduction Perf. - * @requires vm.compiler2.enabled - * @requires vm.simpleArch == "x86" | vm.simpleArch == "x64" | vm.simpleArch == "aarch64" | vm.simpleArch == "riscv64" * @library /test/lib / - * @run main/othervm -Xbatch -XX:LoopUnrollLimit=250 + * @run main/othervm -Xbatch * -XX:CompileCommand=exclude,compiler.loopopts.superword.ReductionPerf::main + * -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=250 * compiler.loopopts.superword.ReductionPerf */ diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVector.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVector.java index fe873770ab44d..fd5c2969074f9 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVector.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVector.java @@ -39,7 +39,6 @@ * @summary Test AlignVector with various loop init, stride, scale, invar, etc. * @modules java.base/jdk.internal.misc * @library /test/lib / - * @requires vm.compiler2.enabled * @run driver compiler.loopopts.superword.TestAlignVector NoAlignVector */ @@ -49,7 +48,6 @@ * @summary Test AlignVector with various loop init, stride, scale, invar, etc. * @modules java.base/jdk.internal.misc * @library /test/lib / - * @requires vm.compiler2.enabled * @run driver compiler.loopopts.superword.TestAlignVector AlignVector */ @@ -59,7 +57,6 @@ * @summary Test AlignVector with various loop init, stride, scale, invar, etc. * @modules java.base/jdk.internal.misc * @library /test/lib / - * @requires vm.compiler2.enabled * @run driver compiler.loopopts.superword.TestAlignVector VerifyAlignVector */ @@ -96,7 +93,7 @@ interface TestFunction { public static void main(String[] args) { TestFramework framework = new TestFramework(TestAlignVector.class); framework.addFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED", - "-XX:LoopUnrollLimit=250"); + "-XX:+IgnoreUnrecognizedVMOptions", "-XX:LoopUnrollLimit=250"); switch (args[0]) { case "NoAlignVector" -> { framework.addFlags("-XX:-AlignVector"); } diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVectorFuzzer.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVectorFuzzer.java index e27feb36e868c..7b95781905ead 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVectorFuzzer.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestAlignVectorFuzzer.java @@ -27,7 +27,6 @@ * @summary Fuzzing loops with different (random) init, limit, stride, scale etc. Do not force alignment. * @modules java.base/jdk.internal.misc * @library /test/lib - * @requires vm.compiler2.enabled * @key randomness * @run main/bootclasspath/othervm -XX:+IgnoreUnrecognizedVMOptions * -XX:LoopUnrollLimit=250 @@ -41,7 +40,6 @@ * @summary Fuzzing loops with different (random) init, limit, stride, scale etc. Verify AlignVector. * @modules java.base/jdk.internal.misc * @library /test/lib - * @requires vm.compiler2.enabled * @key randomness * @run main/bootclasspath/othervm -XX:+IgnoreUnrecognizedVMOptions * -XX:+AlignVector -XX:+VerifyAlignVector @@ -56,8 +54,6 @@ * @summary Fuzzing loops with different (random) init, limit, stride, scale etc. Verify AlignVector. * @modules java.base/jdk.internal.misc * @library /test/lib - * @requires vm.compiler2.enabled - * @requires vm.bits == 64 * @key randomness * @run main/bootclasspath/othervm -XX:+IgnoreUnrecognizedVMOptions * -XX:+AlignVector -XX:+VerifyAlignVector @@ -73,7 +69,6 @@ * @summary Fuzzing loops with different (random) init, limit, stride, scale etc. Verify AlignVector. * @modules java.base/jdk.internal.misc * @library /test/lib - * @requires vm.compiler2.enabled * @key randomness * @run main/bootclasspath/othervm -XX:+IgnoreUnrecognizedVMOptions * -XX:+AlignVector -XX:+VerifyAlignVector diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestCyclicDependency.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestCyclicDependency.java index 94e47f3f7479a..3849f1b05cf27 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestCyclicDependency.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestCyclicDependency.java @@ -27,7 +27,6 @@ * @bug 8298935 * @summary Writing forward on array creates cyclic dependency * which leads to wrong result, when ignored. - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver TestCyclicDependency */ diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java index 1e48ae071069f..2f0a5809d0849 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestDependencyOffsets.java @@ -27,7 +27,7 @@ * and various MaxVectorSize values, and +- AlignVector. * * Note: this test is auto-generated. Please modify / generate with script: - * https://bugs.openjdk.org/browse/JDK-8310190 + * https://bugs.openjdk.org/browse/JDK-8333729 * * Types: int, long, short, char, byte, float, double * Offsets: 0, -1, 1, -2, 2, -3, 3, -4, 4, -7, 7, -8, 8, -14, 14, -16, 16, -18, 18, -20, 20, -31, 31, -32, 32, -63, 63, -64, 64, -65, 65, -128, 128, -129, 129, -192, 192 @@ -113,7 +113,6 @@ * @test id=vanilla-A * @bug 8298935 8308606 8310308 8312570 8310190 * @summary Test SuperWord: vector size, offsets, dependencies, alignment. - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver compiler.loopopts.superword.TestDependencyOffsets vanilla-A */ @@ -122,7 +121,6 @@ * @test id=vanilla-U * @bug 8298935 8308606 8310308 8312570 8310190 * @summary Test SuperWord: vector size, offsets, dependencies, alignment. - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver compiler.loopopts.superword.TestDependencyOffsets vanilla-U */ @@ -1285,7 +1283,7 @@ public static void main(String args[]) { "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestDependencyOffsets::init", "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestDependencyOffsets::test*", "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestDependencyOffsets::verify", - "-XX:LoopUnrollLimit=250"); + "-XX:+IgnoreUnrecognizedVMOptions", "-XX:LoopUnrollLimit=250"); if (args.length != 1) { throw new RuntimeException("Test requires exactly one argument!"); diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestGeneralizedReductions.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestGeneralizedReductions.java index 2a27aad8d5aa1..a0e4b58f5092e 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestGeneralizedReductions.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestGeneralizedReductions.java @@ -27,7 +27,6 @@ * @summary Test reduction vectorizations that are enabled by performing SLP * reduction analysis on unrolled loops. * @library /test/lib / - * @requires vm.bits == 64 * @run driver compiler.loopopts.superword.TestGeneralizedReductions */ @@ -42,7 +41,7 @@ public class TestGeneralizedReductions { public static void main(String[] args) throws Exception { // Fix maximum number of unrolls for test stability. - TestFramework.runWithFlags("-XX:LoopMaxUnroll=16"); + TestFramework.runWithFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:LoopMaxUnroll=16"); } @Run(test = {"testReductionOnGlobalAccumulator", @@ -82,7 +81,9 @@ private static void initArray(long[] array) { } @Test - @IR(applyIfCPUFeature = {"avx2", "true"}, applyIf = {"SuperWordReductions", "true"}, + @IR(applyIfCPUFeature = {"avx2", "true"}, + applyIf = {"SuperWordReductions", "true"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.ADD_REDUCTION_VI, ">= 1"}) private static long testReductionOnGlobalAccumulator(long[] array) { acc = 0; @@ -93,7 +94,9 @@ private static long testReductionOnGlobalAccumulator(long[] array) { } @Test - @IR(applyIfCPUFeature = {"avx2", "true"}, applyIf = {"SuperWordReductions", "true"}, + @IR(applyIfCPUFeature = {"avx2", "true"}, + applyIf = {"SuperWordReductions", "true"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.ADD_REDUCTION_VI, ">= 1"}) private static long testReductionOnPartiallyUnrolledLoop(long[] array) { int sum = 0; @@ -105,7 +108,9 @@ private static long testReductionOnPartiallyUnrolledLoop(long[] array) { } @Test - @IR(applyIfCPUFeature = {"avx2", "true"}, applyIf = {"SuperWordReductions", "true"}, + @IR(applyIfCPUFeature = {"avx2", "true"}, + applyIf = {"SuperWordReductions", "true"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.ADD_REDUCTION_VI, ">= 1"}) private static long testReductionOnLargePartiallyUnrolledLoop(long[] array) { int sum = 0; @@ -128,7 +133,9 @@ private static long testReductionOnLargePartiallyUnrolledLoop(long[] array) { // If this limitation is overcome in the future, the test case should be // turned into a positive one. @Test - @IR(applyIfCPUFeature = {"avx2", "true"}, applyIf = {"SuperWordReductions", "true"}, + @IR(applyIfCPUFeature = {"avx2", "true"}, + applyIf = {"SuperWordReductions", "true"}, + applyIfPlatform = {"64-bit", "true"}, failOn = {IRNode.ADD_REDUCTION_VI}) private static long testReductionOnPartiallyUnrolledLoopWithSwappedInputs(long[] array) { int sum = 0; @@ -142,6 +149,7 @@ private static long testReductionOnPartiallyUnrolledLoopWithSwappedInputs(long[] @Test @IR(applyIfCPUFeature = {"avx2", "true"}, applyIfAnd = {"SuperWordReductions", "true","UsePopCountInstruction", "true"}, + applyIfPlatform = {"64-bit", "true"}, counts = {IRNode.ADD_REDUCTION_VI, ">= 1", IRNode.POPCOUNT_VL, ">= 1"}) @IR(applyIfPlatform = {"riscv64", "true"}, diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency.java index b27483480361e..65398e8adfd39 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency.java @@ -27,8 +27,6 @@ * @bug 8304042 * @summary Test some examples with independent packs with cyclic dependency * between the packs. - * @requires vm.bits == 64 - * @requires vm.compiler2.enabled * @modules java.base/jdk.internal.misc * @library /test/lib / * @run driver compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency @@ -78,7 +76,7 @@ public static void main(String args[]) { "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency::test*", "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency::verify", "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency::init", - "-XX:LoopUnrollLimit=1000"); + "-XX:+IgnoreUnrecognizedVMOptions", "-XX:LoopUnrollLimit=1000"); } TestIndependentPacksWithCyclicDependency() { @@ -120,6 +118,7 @@ public void runTest0() { @Test @IR(counts = {IRNode.ADD_VI, "> 0", IRNode.MUL_VF, "> 0"}, + applyIfPlatform = {"64-bit", "true"}, applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"}) static void test0(int[] dataIa, int[] dataIb, float[] dataFa, float[] dataFb) { for (int i = 0; i < RANGE; i+=2) { @@ -144,6 +143,7 @@ public void runTest1() { @Test @IR(counts = {IRNode.ADD_VI, "> 0", IRNode.MUL_VF, "> 0", IRNode.VECTOR_CAST_F2I, "> 0", IRNode.VECTOR_CAST_I2F, "> 0"}, + applyIfPlatform = {"64-bit", "true"}, applyIfCPUFeatureOr = {"avx2", "true", "asimd", "true"}) static void test1(int[] dataIa, int[] dataIb, float[] dataFa, float[] dataFb) { for (int i = 0; i < RANGE; i+=2) { @@ -167,6 +167,7 @@ public void runTest2() { @Test @IR(counts = {IRNode.ADD_VI, "> 0", IRNode.MUL_VI, "> 0"}, + applyIfPlatform = {"64-bit", "true"}, applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"}) static void test2(int[] dataIa, int[] dataIb, float[] dataFa, float[] dataFb) { for (int i = 0; i < RANGE; i+=2) { @@ -191,6 +192,7 @@ public void runTest3() { @Test @IR(counts = {IRNode.ADD_VI, "> 0", IRNode.MUL_VF, "> 0"}, + applyIfPlatform = {"64-bit", "true"}, applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"}) static void test3(int[] dataIa, int[] dataIb, float[] dataFa, float[] dataFb) { for (int i = 0; i < RANGE; i+=2) { @@ -267,6 +269,7 @@ public void runTest6() { @Test @IR(counts = {IRNode.ADD_VI, "> 0", IRNode.MUL_VI, "> 0", IRNode.ADD_VF, "> 0"}, + applyIfPlatform = {"64-bit", "true"}, applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"}) static void test6(int[] dataIa, int[] dataIb, float[] dataFa, float[] dataFb, long[] dataLa, long[] dataLb) { diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency2.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency2.java index 31a2ba3a0cb64..32d69689a4269 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency2.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestIndependentPacksWithCyclicDependency2.java @@ -28,11 +28,10 @@ * @summary Test some examples with independent packs with cyclic dependency * between the packs. * Before fix, this hit: "assert(!is_visited) failed: visit only once" - * @requires vm.compiler2.enabled * @modules java.base/jdk.internal.misc * @library /test/lib / - * @run main/othervm -XX:LoopUnrollLimit=250 - * -XX:CompileCommand=compileonly,compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency2::test + * @run main/othervm -XX:CompileCommand=compileonly,compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency2::test + * -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=250 * compiler.loopopts.superword.TestIndependentPacksWithCyclicDependency2 */ diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeCompilation.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeCompilation.java index afe19fa1cd88a..cdd80d3baaa66 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeCompilation.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeCompilation.java @@ -27,9 +27,9 @@ * @test * @bug 8327978 * @summary Test compile time for large compilation, where SuperWord takes especially much time. - * @requires vm.compiler2.enabled - * @run main/othervm/timeout=30 -XX:LoopUnrollLimit=1000 -Xbatch + * @run main/othervm/timeout=30 -Xbatch * -XX:CompileCommand=compileonly,compiler.loopopts.superword.TestLargeCompilation::test* + * -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=1000 * compiler.loopopts.superword.TestLargeCompilation */ diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeScaleAndStride.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeScaleAndStride.java index cfb2931d928db..b3453c24d7783 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeScaleAndStride.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestLargeScaleAndStride.java @@ -35,8 +35,7 @@ * @bug 8328938 * @modules java.base/jdk.internal.misc * @library /test/lib / - * @requires vm.compiler2.enabled - * @run main/othervm -XX:+AlignVector compiler.loopopts.superword.TestLargeScaleAndStride + * @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+AlignVector compiler.loopopts.superword.TestLargeScaleAndStride */ package compiler.loopopts.superword; diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestMovingLoadBeforeStore.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestMovingLoadBeforeStore.java index 752c8010468a3..45e3af0774193 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestMovingLoadBeforeStore.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestMovingLoadBeforeStore.java @@ -24,16 +24,16 @@ /** * @test - * @requires vm.compiler2.enabled * @bug 8316679 8316594 * @summary In SuperWord::output, LoadVector can be moved before StoreVector, but only if it is proven to be safe. * @key randomness * @modules java.base/jdk.internal.misc * @library /test/lib * @run main/othervm -XX:CompileCommand=compileonly,compiler.loopopts.superword.TestMovingLoadBeforeStore::test* - * -Xbatch -XX:LoopUnrollLimit=100 - * -XX:+UnlockDiagnosticVMOptions -XX:+StressLCM * --add-modules java.base --add-exports java.base/jdk.internal.misc=ALL-UNNAMED + * -Xbatch + * -XX:+UnlockDiagnosticVMOptions -XX:+StressLCM + * -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=100 * compiler.loopopts.superword.TestMovingLoadBeforeStore */ diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestMulAddS2I.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestMulAddS2I.java index 578d4ee8bdb4d..e0f073c7f8f7d 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestMulAddS2I.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestMulAddS2I.java @@ -75,8 +75,8 @@ public class TestMulAddS2I { public static void main(String[] args) { - TestFramework.runWithFlags("-XX:+AlignVector"); - TestFramework.runWithFlags("-XX:-AlignVector"); + TestFramework.runWithFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+AlignVector"); + TestFramework.runWithFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-AlignVector"); } @Run(test = {"testa", "testb", "testc", "testd", "teste", "testf", "testg", "testh", diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestPeeledReductionNode.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestPeeledReductionNode.java index 99e1e2465f8b5..b69bff04088b2 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestPeeledReductionNode.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestPeeledReductionNode.java @@ -29,8 +29,9 @@ * @library /test/lib * @comment The test is run with -XX:LoopUnrollLimit=32 to prevent unrolling * from fully replacing vectorization. - * @run main/othervm -Xbatch -XX:LoopUnrollLimit=32 - * compiler.loopopts.superword.TestPeeledReductionNode + * @run main/othervm -Xbatch + * -XX:+IgnoreUnrecognizedVMOptions -XX:LoopUnrollLimit=32 + * compiler.loopopts.superword.TestPeeledReductionNode */ package compiler.loopopts.superword; diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestPickFirstMemoryState.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestPickFirstMemoryState.java index 488e32c416a89..5d419766aebfc 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestPickFirstMemoryState.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestPickFirstMemoryState.java @@ -24,7 +24,6 @@ /** * @test - * @requires vm.compiler2.enabled * @bug 8240281 * @summary Test which needs to select the memory state of the first load in a load pack in SuperWord::co_locate_pack. * diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestPickLastMemoryState.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestPickLastMemoryState.java index 4f1972dfdfe02..bbdf4d3ad7ae0 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestPickLastMemoryState.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestPickLastMemoryState.java @@ -25,7 +25,6 @@ /** * @test - * @requires vm.compiler2.enabled * @bug 8290910 8293216 * @summary Test which needs to select the memory state of the last load in a load pack in SuperWord::co_locate_pack. * diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestScheduleReordersScalarMemops.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestScheduleReordersScalarMemops.java index f74c19d1b8b62..f2ed8b6aec2b3 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestScheduleReordersScalarMemops.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestScheduleReordersScalarMemops.java @@ -28,7 +28,6 @@ * @bug 8304720 * @summary Test some examples where non-vectorized memops also need to * be reordered during SuperWord::schedule. - * @requires vm.compiler2.enabled * @modules java.base/jdk.internal.misc * @library /test/lib / * @run driver compiler.loopopts.superword.TestScheduleReordersScalarMemops @@ -55,8 +54,8 @@ public static void main(String args[]) { "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestScheduleReordersScalarMemops::test*", "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestScheduleReordersScalarMemops::verify", "-XX:CompileCommand=compileonly,compiler.loopopts.superword.TestScheduleReordersScalarMemops::init", - "-XX:LoopUnrollLimit=1000", - "-XX:-TieredCompilation", "-Xbatch"); + "-XX:-TieredCompilation", "-Xbatch", + "-XX:+IgnoreUnrecognizedVMOptions", "-XX:LoopUnrollLimit=1000"); } TestScheduleReordersScalarMemops() { diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestSplitPacks.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestSplitPacks.java index a872dbc616bd4..1824f18c8ff83 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestSplitPacks.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestSplitPacks.java @@ -37,7 +37,6 @@ * @bug 8326139 * @summary Test splitting packs in SuperWord * @library /test/lib / - * @requires vm.compiler2.enabled * @run driver compiler.loopopts.superword.TestSplitPacks */ @@ -71,7 +70,7 @@ interface TestFunction { } public static void main(String[] args) { - TestFramework.runWithFlags("-XX:LoopUnrollLimit=1000"); + TestFramework.runWithFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:LoopUnrollLimit=1000"); } public TestSplitPacks() { diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReduction.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReduction.java index 30cdc05bfe5ce..eed03b3a4a1dc 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReduction.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReduction.java @@ -25,7 +25,6 @@ * @test id=Vanilla-Unaligned * @bug 8302652 8314612 * @summary Special test cases for PhaseIdealLoop::move_unordered_reduction_out_of_loop - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver compiler.loopopts.superword.TestUnorderedReduction Vanilla-Unaligned */ @@ -34,7 +33,6 @@ * @test id=Vanilla-Aligned * @bug 8302652 8314612 * @summary Special test cases for PhaseIdealLoop::move_unordered_reduction_out_of_loop - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver compiler.loopopts.superword.TestUnorderedReduction Vanilla-Aligned */ @@ -43,7 +41,6 @@ * @test id=MaxVectorSize16-Unaligned * @bug 8302652 8314612 * @summary Special test cases for PhaseIdealLoop::move_unordered_reduction_out_of_loop - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver compiler.loopopts.superword.TestUnorderedReduction MaxVectorSize16-Unaligned */ @@ -52,7 +49,6 @@ * @test id=MaxVectorSize32-Aligned * @bug 8302652 8314612 * @summary Special test cases for PhaseIdealLoop::move_unordered_reduction_out_of_loop - * @requires vm.compiler2.enabled * @library /test/lib / * @run driver compiler.loopopts.superword.TestUnorderedReduction MaxVectorSize32-Aligned */ @@ -75,10 +71,10 @@ public static void main(String[] args) { } switch (args[0]) { - case "Vanilla-Unaligned" -> { framework.addFlags("-XX:-AlignVector"); } - case "Vanilla-Aligned" -> { framework.addFlags("-XX:+AlignVector"); } - case "MaxVectorSize16-Unaligned" -> { framework.addFlags("-XX:-AlignVector", "-XX:MaxVectorSize=16"); } - case "MaxVectorSize32-Aligned" -> { framework.addFlags("-XX:+AlignVector", "-XX:MaxVectorSize=32"); } + case "Vanilla-Unaligned" -> { framework.addFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-AlignVector"); } + case "Vanilla-Aligned" -> { framework.addFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+AlignVector"); } + case "MaxVectorSize16-Unaligned" -> { framework.addFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:-AlignVector", "-XX:MaxVectorSize=16"); } + case "MaxVectorSize32-Aligned" -> { framework.addFlags("-XX:+IgnoreUnrecognizedVMOptions", "-XX:+AlignVector", "-XX:MaxVectorSize=32"); } default -> { throw new RuntimeException("Test argument not recognized: " + args[0]); } } framework.start(); diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReductionPartialVectorization.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReductionPartialVectorization.java index 666ddaac4416c..0d4a4e7b5d8ae 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReductionPartialVectorization.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestUnorderedReductionPartialVectorization.java @@ -26,7 +26,6 @@ * @bug JDK-8310130 * @summary Special test cases for PhaseIdealLoop::move_unordered_reduction_out_of_loop * Here a case with partial vectorization of the reduction. - * @requires vm.bits == "64" * @library /test/lib / * @run driver compiler.loopopts.superword.TestUnorderedReductionPartialVectorization */ @@ -62,6 +61,7 @@ public void runTests() throws Exception { @IR(counts = {IRNode.LOAD_VECTOR_I, IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", IRNode.VECTOR_CAST_I2L, IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", IRNode.OR_REDUCTION_V, "> 0",}, + applyIfPlatform = {"64-bit", "true"}, applyIfCPUFeatureOr = {"avx2", "true"}) static long test1(int[] data, long sum) { for (int i = 0; i < data.length; i+=2) { diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/Vec_MulAddS2I.java b/test/hotspot/jtreg/compiler/loopopts/superword/Vec_MulAddS2I.java index f63692871adb2..d595e914ff409 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/Vec_MulAddS2I.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/Vec_MulAddS2I.java @@ -27,47 +27,62 @@ * @bug 8214751 * @summary Test operations in C2 MulAddS2I and MulAddVS2VI nodes. * @library /test/lib - * @requires vm.compiler2.enabled * - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:+UseSuperWord * -XX:LoopMaxUnroll=2 * compiler.loopopts.superword.Vec_MulAddS2I - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:-UseSuperWord * -XX:LoopMaxUnroll=2 * compiler.loopopts.superword.Vec_MulAddS2I * - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:+UseSuperWord * -XX:LoopMaxUnroll=4 * compiler.loopopts.superword.Vec_MulAddS2I - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:-UseSuperWord * -XX:LoopMaxUnroll=4 * compiler.loopopts.superword.Vec_MulAddS2I * - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:+UseSuperWord * -XX:LoopMaxUnroll=8 * compiler.loopopts.superword.Vec_MulAddS2I - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:-UseSuperWord * -XX:LoopMaxUnroll=8 * compiler.loopopts.superword.Vec_MulAddS2I * - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:+UseSuperWord * -XX:LoopMaxUnroll=16 * compiler.loopopts.superword.Vec_MulAddS2I - * @run main/othervm -XX:LoopUnrollLimit=250 + * @run main/othervm + * -XX:+IgnoreUnrecognizedVMOptions + * -XX:LoopUnrollLimit=250 * -XX:CompileThresholdScaling=0.1 * -XX:-UseSuperWord * -XX:LoopMaxUnroll=16 From 5e09397bf6244c98204180f53a2891604d2843d1 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Mon, 17 Jun 2024 08:06:20 +0000 Subject: [PATCH 009/102] 8334222: exclude containers/cgroup/PlainRead.java Reviewed-by: lucy --- test/hotspot/jtreg/ProblemList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 4391357b70349..a4ff429bd00c3 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -104,6 +104,7 @@ runtime/cds/appcds/customLoader/HelloCustom_JFR.java 8241075 linux-all,windows-x applications/jcstress/copy.java 8229852 linux-all +containers/cgroup/PlainRead.java 8333967,8261242 linux-all containers/docker/TestJcmd.java 8278102 linux-all containers/docker/TestMemoryAwareness.java 8303470 linux-all containers/docker/TestJFREvents.java 8327723 linux-x64 From d751441b76ef41880c77b48372c491f9558f1c68 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Mon, 17 Jun 2024 08:23:39 +0000 Subject: [PATCH 010/102] 8330586: GHA: Drop additional gcc/glibc packages installation for x86_32 Reviewed-by: ihse --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index df53a2cd310e9..067548b9768e3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -146,7 +146,7 @@ jobs: apt-architecture: 'i386' # Some multilib libraries do not have proper inter-dependencies, so we have to # install their dependencies manually. - apt-extra-packages: 'libfreetype-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libc6-i386 libgcc-s1:i386 libstdc++6:i386 libffi-dev:i386' + apt-extra-packages: 'libfreetype-dev:i386 libtiff-dev:i386 libcupsimage2-dev:i386 libffi-dev:i386' extra-conf-options: '--with-target-bits=32 --enable-fallback-linker --enable-libffi-bundling' configure-arguments: ${{ github.event.inputs.configure-arguments }} make-arguments: ${{ github.event.inputs.make-arguments }} From 113a2c028dc3b9abb6229d5f0b812b54a9b61011 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Mon, 17 Jun 2024 08:57:57 +0000 Subject: [PATCH 011/102] 8332903: ubsan: opto/output.cpp:1002:18: runtime error: load of value 171, which is not a valid value for type 'bool' Reviewed-by: kvn, mdoerr --- src/hotspot/cpu/ppc/ppc.ad | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad index cbe28deb51676..fcc24060a3afe 100644 --- a/src/hotspot/cpu/ppc/ppc.ad +++ b/src/hotspot/cpu/ppc/ppc.ad @@ -3430,6 +3430,7 @@ encode %{ call->_in_rms = _in_rms; call->_nesting = _nesting; call->_override_symbolic_info = _override_symbolic_info; + call->_arg_escape = _arg_escape; // New call needs all inputs of old call. // Req... From 0d1080d194c596dc74dd8b173b18b14cc71e1b52 Mon Sep 17 00:00:00 2001 From: Martin Doerr Date: Mon, 17 Jun 2024 09:30:48 +0000 Subject: [PATCH 012/102] 8331117: [PPC64] secondary_super_cache does not scale well Reviewed-by: rrich, amitkumar --- src/hotspot/cpu/ppc/macroAssembler_ppc.cpp | 289 +++++++++++++++++++++ src/hotspot/cpu/ppc/macroAssembler_ppc.hpp | 27 ++ src/hotspot/cpu/ppc/ppc.ad | 47 ++++ src/hotspot/cpu/ppc/stubGenerator_ppc.cpp | 50 ++++ src/hotspot/cpu/ppc/vm_version_ppc.cpp | 7 + src/hotspot/cpu/ppc/vm_version_ppc.hpp | 1 + 6 files changed, 421 insertions(+) diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp index 6aaa7f3c057ac..0527cb306b274 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.cpp @@ -2130,6 +2130,295 @@ void MacroAssembler::check_klass_subtype(Register sub_klass, bind(L_failure); // Fallthru if not successful. } +// scans count pointer sized words at [addr] for occurrence of value, +// generic (count must be >0) +// iff found: CR0 eq, scratch == 0 +void MacroAssembler::repne_scan(Register addr, Register value, Register count, Register scratch) { + Label Lloop, Lexit; + +#ifdef ASSERT + { + Label ok; + cmpdi(CCR0, count, 0); + bgt(CCR0, ok); + stop("count must be positive"); + bind(ok); + } +#endif + + mtctr(count); + + bind(Lloop); + ld(scratch, 0 , addr); + xor_(scratch, scratch, value); + beq(CCR0, Lexit); + addi(addr, addr, wordSize); + bdnz(Lloop); + + bind(Lexit); +} + +// Ensure that the inline code and the stub are using the same registers. +#define LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS \ +do { \ + assert(r_super_klass == R4_ARG2 && \ + r_array_base == R3_ARG1 && \ + r_array_length == R7_ARG5 && \ + (r_array_index == R6_ARG4 || r_array_index == noreg) && \ + (r_sub_klass == R5_ARG3 || r_sub_klass == noreg) && \ + (r_bitmap == R11_scratch1 || r_bitmap == noreg) && \ + (result == R8_ARG6 || result == noreg), "registers must match ppc64.ad"); \ +} while(0) + +// Return true: we succeeded in generating this code +void MacroAssembler::lookup_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register temp1, + Register temp2, + Register temp3, + Register temp4, + Register result, + u1 super_klass_slot) { + assert_different_registers(r_sub_klass, r_super_klass, temp1, temp2, temp3, temp4, result); + + Label L_done; + + BLOCK_COMMENT("lookup_secondary_supers_table {"); + + const Register + r_array_base = temp1, + r_array_length = temp2, + r_array_index = temp3, + r_bitmap = temp4; + + LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS; + + ld(r_bitmap, in_bytes(Klass::bitmap_offset()), r_sub_klass); + + // First check the bitmap to see if super_klass might be present. If + // the bit is zero, we are certain that super_klass is not one of + // the secondary supers. + u1 bit = super_klass_slot; + int shift_count = Klass::SECONDARY_SUPERS_TABLE_MASK - bit; + + // if (shift_count == 0) this is used for comparing with 0: + sldi_(r_array_index, r_bitmap, shift_count); + + li(result, 1); // failure + // We test the MSB of r_array_index, i.e. its sign bit + bge(CCR0, L_done); + + // We will consult the secondary-super array. + ld(r_array_base, in_bytes(Klass::secondary_supers_offset()), r_sub_klass); + + // The value i in r_array_index is >= 1, so even though r_array_base + // points to the length, we don't need to adjust it to point to the + // data. + assert(Array::base_offset_in_bytes() == wordSize, "Adjust this code"); + + // Get the first array index that can contain super_klass. + if (bit != 0) { + popcntd(r_array_index, r_array_index); + // NB! r_array_index is off by 1. It is compensated by keeping r_array_base off by 1 word. + sldi(r_array_index, r_array_index, LogBytesPerWord); // scale + ldx(result, r_array_base, r_array_index); + } else { + // Actually use index 0, but r_array_base and r_array_index are off by 1 word + // such that the sum is precise. + ld(result, BytesPerWord, r_array_base); + li(r_array_index, BytesPerWord); // for slow path (scaled) + } + + xor_(result, result, r_super_klass); + beq(CCR0, L_done); // Found a match (result == 0) + + // Is there another entry to check? Consult the bitmap. + testbitdi(CCR0, /* temp */ r_array_length, r_bitmap, (bit + 1) & Klass::SECONDARY_SUPERS_TABLE_MASK); + beq(CCR0, L_done); // (result != 0) + + // Linear probe. Rotate the bitmap so that the next bit to test is + // in Bit 2 for the look-ahead check in the slow path. + if (bit != 0) { + rldicl(r_bitmap, r_bitmap, 64 - bit, 0); + } + + // Calls into the stub generated by lookup_secondary_supers_table_slow_path. + // Arguments: r_super_klass, r_array_base, r_array_index, r_bitmap. + // Kills: r_array_length. + // Returns: result. + address stub = StubRoutines::lookup_secondary_supers_table_slow_path_stub(); + Register r_stub_addr = r_array_length; + add_const_optimized(r_stub_addr, R29_TOC, MacroAssembler::offset_to_global_toc(stub), R0); + mtctr(r_stub_addr); + bctrl(); + + bind(L_done); + BLOCK_COMMENT("} lookup_secondary_supers_table"); + + if (VerifySecondarySupers) { + verify_secondary_supers_table(r_sub_klass, r_super_klass, result, + temp1, temp2, temp3); + } +} + +// Called by code generated by check_klass_subtype_slow_path +// above. This is called when there is a collision in the hashed +// lookup in the secondary supers array. +void MacroAssembler::lookup_secondary_supers_table_slow_path(Register r_super_klass, + Register r_array_base, + Register r_array_index, + Register r_bitmap, + Register result, + Register temp1) { + assert_different_registers(r_super_klass, r_array_base, r_array_index, r_bitmap, result, temp1); + + const Register + r_array_length = temp1, + r_sub_klass = noreg; + + LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS; + + Label L_done; + + // Load the array length. + lwa(r_array_length, Array::length_offset_in_bytes(), r_array_base); + // And adjust the array base to point to the data. + // NB! Effectively increments current slot index by 1. + assert(Array::base_offset_in_bytes() == wordSize, ""); + addi(r_array_base, r_array_base, Array::base_offset_in_bytes()); + + // Linear probe + Label L_huge; + + // The bitmap is full to bursting. + // Implicit invariant: BITMAP_FULL implies (length > 0) + assert(Klass::SECONDARY_SUPERS_BITMAP_FULL == ~uintx(0), ""); + cmpdi(CCR0, r_bitmap, -1); + beq(CCR0, L_huge); + + // NB! Our caller has checked bits 0 and 1 in the bitmap. The + // current slot (at secondary_supers[r_array_index]) has not yet + // been inspected, and r_array_index may be out of bounds if we + // wrapped around the end of the array. + + { // This is conventional linear probing, but instead of terminating + // when a null entry is found in the table, we maintain a bitmap + // in which a 0 indicates missing entries. + // The check above guarantees there are 0s in the bitmap, so the loop + // eventually terminates. + +#ifdef ASSERT + { + // We should only reach here after having found a bit in the bitmap. + // Invariant: array_length == popcount(bitmap) + Label ok; + cmpdi(CCR0, r_array_length, 0); + bgt(CCR0, ok); + stop("array_length must be positive"); + bind(ok); + } +#endif + + // Compute limit in r_array_length + addi(r_array_length, r_array_length, -1); + sldi(r_array_length, r_array_length, LogBytesPerWord); + + Label L_loop; + bind(L_loop); + + // Check for wraparound. + cmpd(CCR0, r_array_index, r_array_length); + isel_0(r_array_index, CCR0, Assembler::greater); + + ldx(result, r_array_base, r_array_index); + xor_(result, result, r_super_klass); + beq(CCR0, L_done); // success (result == 0) + + // look-ahead check (Bit 2); result is non-zero + testbitdi(CCR0, R0, r_bitmap, 2); + beq(CCR0, L_done); // fail (result != 0) + + rldicl(r_bitmap, r_bitmap, 64 - 1, 0); + addi(r_array_index, r_array_index, BytesPerWord); + b(L_loop); + } + + { // Degenerate case: more than 64 secondary supers. + // FIXME: We could do something smarter here, maybe a vectorized + // comparison or a binary search, but is that worth any added + // complexity? + bind(L_huge); + repne_scan(r_array_base, r_super_klass, r_array_length, result); + } + + bind(L_done); +} + +// Make sure that the hashed lookup and a linear scan agree. +void MacroAssembler::verify_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register result, + Register temp1, + Register temp2, + Register temp3) { + assert_different_registers(r_sub_klass, r_super_klass, result, temp1, temp2, temp3); + + const Register + r_array_base = temp1, + r_array_length = temp2, + r_array_index = temp3, + r_bitmap = noreg; // unused + + LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS; + + BLOCK_COMMENT("verify_secondary_supers_table {"); + + Label passed, failure; + + // We will consult the secondary-super array. + ld(r_array_base, in_bytes(Klass::secondary_supers_offset()), r_sub_klass); + // Load the array length. + lwa(r_array_length, Array::length_offset_in_bytes(), r_array_base); + // And adjust the array base to point to the data. + addi(r_array_base, r_array_base, Array::base_offset_in_bytes()); + + // convert !=0 to 1 + neg(R0, result); + orr(result, result, R0); + srdi(result, result, 63); + + const Register linear_result = r_array_index; // reuse + li(linear_result, 1); + cmpdi(CCR0, r_array_length, 0); + ble(CCR0, failure); + repne_scan(r_array_base, r_super_klass, r_array_length, linear_result); + bind(failure); + + // convert !=0 to 1 + neg(R0, linear_result); + orr(linear_result, linear_result, R0); + srdi(linear_result, linear_result, 63); + + cmpd(CCR0, result, linear_result); + beq(CCR0, passed); + + assert_different_registers(R3_ARG1, r_sub_klass, linear_result, result); + mr_if_needed(R3_ARG1, r_super_klass); + assert_different_registers(R4_ARG2, linear_result, result); + mr_if_needed(R4_ARG2, r_sub_klass); + assert_different_registers(R5_ARG3, result); + neg(R5_ARG3, linear_result); + neg(R6_ARG4, result); + const char* msg = "mismatch"; + load_const_optimized(R7_ARG5, (intptr_t)msg, R0); + call_VM_leaf(CAST_FROM_FN_PTR(address, Klass::on_secondary_supers_verification_failure)); + should_not_reach_here(); + + bind(passed); + + BLOCK_COMMENT("} verify_secondary_supers_table"); +} + void MacroAssembler::clinit_barrier(Register klass, Register thread, Label* L_fast_path, Label* L_slow_path) { assert(L_fast_path != nullptr || L_slow_path != nullptr, "at least one is required"); diff --git a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp index 4444690e3a317..4f2ff708a46a3 100644 --- a/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp +++ b/src/hotspot/cpu/ppc/macroAssembler_ppc.hpp @@ -604,6 +604,33 @@ class MacroAssembler: public Assembler { Register temp2_reg, Label& L_success); + void repne_scan(Register addr, Register value, Register count, Register scratch); + + // As above, but with a constant super_klass. + // The result is in Register result, not the condition codes. + void lookup_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register temp1, + Register temp2, + Register temp3, + Register temp4, + Register result, + u1 super_klass_slot); + + void verify_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register result, + Register temp1, + Register temp2, + Register temp3); + + void lookup_secondary_supers_table_slow_path(Register r_super_klass, + Register r_array_base, + Register r_array_index, + Register r_bitmap, + Register result, + Register temp1); + void clinit_barrier(Register klass, Register thread, Label* L_fast_path = nullptr, diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad index fcc24060a3afe..8917b344e54cb 100644 --- a/src/hotspot/cpu/ppc/ppc.ad +++ b/src/hotspot/cpu/ppc/ppc.ad @@ -641,6 +641,8 @@ reg_class rarg1_bits64_reg(R3_H, R3); reg_class rarg2_bits64_reg(R4_H, R4); reg_class rarg3_bits64_reg(R5_H, R5); reg_class rarg4_bits64_reg(R6_H, R6); +reg_class rarg5_bits64_reg(R7_H, R7); +reg_class rarg6_bits64_reg(R8_H, R8); // Thread register, 'written' by tlsLoadP, see there. reg_class thread_bits64_reg(R16_H, R16); @@ -4354,6 +4356,8 @@ operand iRegPsrc() %{ match(rarg2RegP); match(rarg3RegP); match(rarg4RegP); + match(rarg5RegP); + match(rarg6RegP); match(threadRegP); format %{ %} interface(REG_INTER); @@ -4409,6 +4413,20 @@ operand rarg4RegP() %{ interface(REG_INTER); %} +operand rarg5RegP() %{ + constraint(ALLOC_IN_RC(rarg5_bits64_reg)); + match(iRegPdst); + format %{ %} + interface(REG_INTER); +%} + +operand rarg6RegP() %{ + constraint(ALLOC_IN_RC(rarg6_bits64_reg)); + match(iRegPdst); + format %{ %} + interface(REG_INTER); +%} + operand iRegNsrc() %{ constraint(ALLOC_IN_RC(bits32_reg_ro)); match(RegN); @@ -12024,6 +12042,35 @@ instruct partialSubtypeCheck(iRegPdst result, iRegP_N2P subklass, iRegP_N2P supe ins_pipe(pipe_class_default); %} +instruct partialSubtypeCheckConstSuper(rarg3RegP sub, rarg2RegP super_reg, immP super_con, rarg6RegP result, + rarg1RegP tempR1, rarg5RegP tempR2, rarg4RegP tempR3, rscratch1RegP tempR4, + flagsRegCR0 cr0, regCTR ctr) +%{ + match(Set result (PartialSubtypeCheck sub (Binary super_reg super_con))); + predicate(UseSecondarySupersTable); + effect(KILL cr0, KILL ctr, TEMP tempR1, TEMP tempR2, TEMP tempR3, TEMP tempR4); + + ins_cost(DEFAULT_COST*8); // smaller than the other version + format %{ "partialSubtypeCheck $result, $sub, $super_reg" %} + + ins_encode %{ + u1 super_klass_slot = ((Klass*)$super_con$$constant)->hash_slot(); + if (InlineSecondarySupersTest) { + __ lookup_secondary_supers_table($sub$$Register, $super_reg$$Register, + $tempR1$$Register, $tempR2$$Register, $tempR3$$Register, $tempR4$$Register, + $result$$Register, super_klass_slot); + } else { + address stub = StubRoutines::lookup_secondary_supers_table_stub(super_klass_slot); + Register r_stub_addr = $tempR1$$Register; + __ add_const_optimized(r_stub_addr, R29_TOC, MacroAssembler::offset_to_global_toc(stub), R0); + __ mtctr(r_stub_addr); + __ bctrl(); + } + %} + + ins_pipe(pipe_class_memory); +%} + // inlined locking and unlocking instruct cmpFastLock(flagsRegCR0 crx, iRegPdst oop, iRegPdst box, iRegPdst tmp1, iRegPdst tmp2) %{ diff --git a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp index ee7aa27a6303b..8da7cf7e79157 100644 --- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp +++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp @@ -4531,6 +4531,46 @@ class StubGenerator: public StubCodeGenerator { #endif // VM_LITTLE_ENDIAN +address generate_lookup_secondary_supers_table_stub(u1 super_klass_index) { + StubCodeMark mark(this, "StubRoutines", "lookup_secondary_supers_table"); + + address start = __ pc(); + const Register + r_super_klass = R4_ARG2, + r_array_base = R3_ARG1, + r_array_length = R7_ARG5, + r_array_index = R6_ARG4, + r_sub_klass = R5_ARG3, + r_bitmap = R11_scratch1, + result = R8_ARG6; + + __ lookup_secondary_supers_table(r_sub_klass, r_super_klass, + r_array_base, r_array_length, r_array_index, + r_bitmap, result, super_klass_index); + __ blr(); + + return start; + } + + // Slow path implementation for UseSecondarySupersTable. + address generate_lookup_secondary_supers_table_slow_path_stub() { + StubCodeMark mark(this, "StubRoutines", "lookup_secondary_supers_table_slow_path"); + + address start = __ pc(); + const Register + r_super_klass = R4_ARG2, + r_array_base = R3_ARG1, + temp1 = R7_ARG5, + r_array_index = R6_ARG4, + r_bitmap = R11_scratch1, + result = R8_ARG6; + + __ lookup_secondary_supers_table_slow_path(r_super_klass, r_array_base, r_array_index, r_bitmap, result, temp1); + __ blr(); + + return start; + } + address generate_cont_thaw(const char* label, Continuation::thaw_kind kind) { if (!Continuations::enabled()) return nullptr; @@ -4807,6 +4847,16 @@ class StubGenerator: public StubCodeGenerator { // arraycopy stubs used by compilers generate_arraycopy_stubs(); + if (UseSecondarySupersTable) { + StubRoutines::_lookup_secondary_supers_table_slow_path_stub = generate_lookup_secondary_supers_table_slow_path_stub(); + if (!InlineSecondarySupersTest) { + for (int slot = 0; slot < Klass::SECONDARY_SUPERS_TABLE_SIZE; slot++) { + StubRoutines::_lookup_secondary_supers_table_stubs[slot] + = generate_lookup_secondary_supers_table_stub(slot); + } + } + } + StubRoutines::_upcall_stub_exception_handler = generate_upcall_stub_exception_handler(); } diff --git a/src/hotspot/cpu/ppc/vm_version_ppc.cpp b/src/hotspot/cpu/ppc/vm_version_ppc.cpp index 5a9d035be6034..20578ed3b8baa 100644 --- a/src/hotspot/cpu/ppc/vm_version_ppc.cpp +++ b/src/hotspot/cpu/ppc/vm_version_ppc.cpp @@ -340,6 +340,13 @@ void VM_Version::initialize() { FLAG_SET_DEFAULT(UseSHA, false); } + if (UseSecondarySupersTable && PowerArchitecturePPC64 < 7) { + if (!FLAG_IS_DEFAULT(UseSecondarySupersTable)) { + warning("UseSecondarySupersTable requires Power7 or later."); + } + FLAG_SET_DEFAULT(UseSecondarySupersTable, false); + } + #ifdef COMPILER2 if (FLAG_IS_DEFAULT(UseSquareToLenIntrinsic)) { UseSquareToLenIntrinsic = true; diff --git a/src/hotspot/cpu/ppc/vm_version_ppc.hpp b/src/hotspot/cpu/ppc/vm_version_ppc.hpp index 0efde131277b2..9d8e4b88ee2e5 100644 --- a/src/hotspot/cpu/ppc/vm_version_ppc.hpp +++ b/src/hotspot/cpu/ppc/vm_version_ppc.hpp @@ -95,6 +95,7 @@ class VM_Version: public Abstract_VM_Version { static bool supports_fast_class_init_checks() { return true; } constexpr static bool supports_stack_watermark_barrier() { return true; } constexpr static bool supports_recursive_lightweight_locking() { return true; } + constexpr static bool supports_secondary_supers_table() { return true; } static bool is_determine_features_test_running() { return _is_determine_features_test_running; } // CPU instruction support From ef7923e1277ce86c6e5331871f1031c28bf82e31 Mon Sep 17 00:00:00 2001 From: Gui Cao Date: Mon, 17 Jun 2024 11:35:41 +0000 Subject: [PATCH 013/102] 8334078: RISC-V: TestIntVect.java fails after JDK-8332153 when running without RVV Reviewed-by: fyang, mli --- .../linux_riscv/vm_version_linux_riscv.cpp | 5 +- .../compiler/c2/cr7200264/TestIntVect.java | 117 +++--------------- .../irTests/TestVectorizeURShiftSubword.java | 2 +- .../intrinsics/TestBitShuffleOpers.java | 2 +- .../intrinsics/chacha/TestChaCha20.java | 20 ++- .../ir_framework/test/IREncodingPrinter.java | 2 +- .../vectorapi/reshape/TestVectorCastRVV.java | 2 +- .../vectorization/TestSignumVector.java | 2 +- .../runner/ArrayShiftOpTest.java | 35 ++---- .../vectorization/runner/BasicByteOpTest.java | 15 +-- .../vectorization/runner/BasicCharOpTest.java | 15 +-- .../vectorization/runner/BasicIntOpTest.java | 15 +-- .../vectorization/runner/BasicLongOpTest.java | 15 +-- .../runner/BasicShortOpTest.java | 15 +-- 14 files changed, 58 insertions(+), 204 deletions(-) diff --git a/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp b/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp index f74ed8c8f81f0..3f9f26b525ba5 100644 --- a/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp +++ b/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp @@ -131,7 +131,10 @@ void VM_Version::setup_cpu_available_features() { if (_feature_list[i]->feature_string()) { const char* tmp = _feature_list[i]->pretty(); if (strlen(tmp) == 1) { - strcat(buf, " "); + // Feature string is expected to be in multi-character form + // like rvc, rvv, etc so that it will be easier to specify + // target feature string in tests. + strcat(buf, " rv"); strcat(buf, tmp); } else { // Feature string is expected to be lower case. diff --git a/test/hotspot/jtreg/compiler/c2/cr7200264/TestIntVect.java b/test/hotspot/jtreg/compiler/c2/cr7200264/TestIntVect.java index 17556896f2606..457e33667b2d1 100644 --- a/test/hotspot/jtreg/compiler/c2/cr7200264/TestIntVect.java +++ b/test/hotspot/jtreg/compiler/c2/cr7200264/TestIntVect.java @@ -480,10 +480,7 @@ void test_suba(int[] a0, int[] a1, int[] a2) { @Test @IR(counts = { IRNode.SUB_VI, "> 0", IRNode.LSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.SUB_VI, "> 0", IRNode.LSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_mulc(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]*VALUE); @@ -492,10 +489,7 @@ void test_mulc(int[] a0, int[] a1) { @Test @IR(counts = { IRNode.SUB_VI, "> 0", IRNode.LSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.SUB_VI, "> 0", IRNode.LSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_mulc_n(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]*(-VALUE)); @@ -527,15 +521,7 @@ void test_mula(int[] a0, int[] a1, int[] a2) { IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", IRNode.SUB_VI, IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0" }, - applyIfCPUFeatureOr = {"avx2", "true", "sve", "true"}) - @IR(counts = { IRNode.ADD_VI, - IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", - IRNode.RSHIFT_VI, - IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", - IRNode.SUB_VI, - IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"avx2", "true", "sve", "true", "rvv", "true"}) // Not vectorized: On aarch64, vectorization for this example results in // MulVL nodes, which asimd does not support. @IR(counts = { IRNode.LOAD_VECTOR_I, "= 0", @@ -555,15 +541,7 @@ void test_divc(int[] a0, int[] a1) { IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", IRNode.SUB_VI, IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0" }, - applyIfCPUFeatureOr = {"avx2", "true", "sve", "true"}) - @IR(counts = { IRNode.ADD_VI, - IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", - IRNode.RSHIFT_VI, - IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0", - IRNode.SUB_VI, - IRNode.VECTOR_SIZE + "min(max_int, max_long)", "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"avx2", "true", "sve", "true", "rvv", "true"}) // Not vectorized: On aarch64, vectorization for this example results in // MulVL nodes, which asimd does not support. @IR(counts = { IRNode.LOAD_VECTOR_I, "= 0", @@ -683,10 +661,7 @@ void test_xora(int[] a0, int[] a1, int[] a2) { @Test @IR(counts = { IRNode.LSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.LSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_sllc(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]< 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.LSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_sllc_n(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]<<(-VALUE)); @@ -710,12 +682,7 @@ void test_sllc_n(int[] a0, int[] a1) { @IR(counts = { IRNode.LSHIFT_VI, "= 0", IRNode.LOAD_VECTOR_I, "> 0", IRNode.STORE_VECTOR, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.LSHIFT_VI, "= 0", - IRNode.LOAD_VECTOR_I, "> 0", - IRNode.STORE_VECTOR, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_sllc_o(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]< 0", IRNode.STORE_VECTOR, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.LSHIFT_VI, "= 0", - IRNode.LOAD_VECTOR_I, "> 0", - IRNode.STORE_VECTOR, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_sllc_on(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]<<(-SHIFT)); @@ -741,10 +703,7 @@ void test_sllc_on(int[] a0, int[] a1) { @Test @IR(counts = { IRNode.LSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.LSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_sllv(int[] a0, int[] a1, int b) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]< 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.URSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srlc(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>>VALUE); @@ -765,10 +721,7 @@ void test_srlc(int[] a0, int[] a1) { @Test @IR(counts = { IRNode.URSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.URSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srlc_n(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>>(-VALUE)); @@ -780,12 +733,7 @@ void test_srlc_n(int[] a0, int[] a1) { @IR(counts = { IRNode.URSHIFT_VI, "= 0", IRNode.LOAD_VECTOR_I, "> 0", IRNode.STORE_VECTOR, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.URSHIFT_VI, "= 0", - IRNode.LOAD_VECTOR_I, "> 0", - IRNode.STORE_VECTOR, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srlc_o(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>>SHIFT); @@ -797,12 +745,7 @@ void test_srlc_o(int[] a0, int[] a1) { @IR(counts = { IRNode.URSHIFT_VI, "= 0", IRNode.LOAD_VECTOR_I, "> 0", IRNode.STORE_VECTOR, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.URSHIFT_VI, "= 0", - IRNode.LOAD_VECTOR_I, "> 0", - IRNode.STORE_VECTOR, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srlc_on(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>>(-SHIFT)); @@ -811,10 +754,7 @@ void test_srlc_on(int[] a0, int[] a1) { @Test @IR(counts = { IRNode.URSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.URSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srlv(int[] a0, int[] a1, int b) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>>b); @@ -823,10 +763,7 @@ void test_srlv(int[] a0, int[] a1, int b) { @Test @IR(counts = { IRNode.RSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.RSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srac(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>VALUE); @@ -835,10 +772,7 @@ void test_srac(int[] a0, int[] a1) { @Test @IR(counts = { IRNode.RSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.RSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srac_n(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>(-VALUE)); @@ -850,12 +784,7 @@ void test_srac_n(int[] a0, int[] a1) { @IR(counts = { IRNode.RSHIFT_VI, "= 0", IRNode.LOAD_VECTOR_I, "> 0", IRNode.STORE_VECTOR, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.RSHIFT_VI, "= 0", - IRNode.LOAD_VECTOR_I, "> 0", - IRNode.STORE_VECTOR, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srac_o(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>SHIFT); @@ -867,12 +796,7 @@ void test_srac_o(int[] a0, int[] a1) { @IR(counts = { IRNode.RSHIFT_VI, "= 0", IRNode.LOAD_VECTOR_I, "> 0", IRNode.STORE_VECTOR, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.RSHIFT_VI, "= 0", - IRNode.LOAD_VECTOR_I, "> 0", - IRNode.STORE_VECTOR, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srac_on(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>(-SHIFT)); @@ -881,10 +805,7 @@ void test_srac_on(int[] a0, int[] a1) { @Test @IR(counts = { IRNode.RSHIFT_VI, "> 0" }, - applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true"}) - @IR(counts = { IRNode.RSHIFT_VI, "> 0" }, - applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}) + applyIfCPUFeatureOr = {"sse2", "true", "asimd", "true", "rvv", "true"}) void test_srav(int[] a0, int[] a1, int b) { for (int i = 0; i < a0.length; i+=1) { a0[i] = (int)(a1[i]>>b); diff --git a/test/hotspot/jtreg/compiler/c2/irTests/TestVectorizeURShiftSubword.java b/test/hotspot/jtreg/compiler/c2/irTests/TestVectorizeURShiftSubword.java index f477a08f7174a..9896a8b906e96 100644 --- a/test/hotspot/jtreg/compiler/c2/irTests/TestVectorizeURShiftSubword.java +++ b/test/hotspot/jtreg/compiler/c2/irTests/TestVectorizeURShiftSubword.java @@ -35,7 +35,7 @@ * @key randomness * @summary Auto-vectorization enhancement for unsigned shift right on signed subword types * @requires ((os.arch=="amd64" | os.arch=="x86_64") & (vm.opt.UseSSE == "null" | vm.opt.UseSSE > 3)) | os.arch=="aarch64" | - * (os.arch == "riscv64" & vm.cpu.features ~= ".*v,.*") + * (os.arch == "riscv64" & vm.cpu.features ~= ".*rvv.*") * @library /test/lib / * @run driver compiler.c2.irTests.TestVectorizeURShiftSubword */ diff --git a/test/hotspot/jtreg/compiler/intrinsics/TestBitShuffleOpers.java b/test/hotspot/jtreg/compiler/intrinsics/TestBitShuffleOpers.java index 9a7e0c6b9f2b2..064ffeb41fb34 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/TestBitShuffleOpers.java +++ b/test/hotspot/jtreg/compiler/intrinsics/TestBitShuffleOpers.java @@ -31,7 +31,7 @@ * (vm.cpu.features ~= ".*bmi2.*" & vm.cpu.features ~= ".*bmi1.*" & * vm.cpu.features ~= ".*sse2.*")) | * (os.arch=="aarch64" & vm.cpu.features ~= ".*svebitperm.*") | - * (os.arch=="riscv64" & vm.cpu.features ~= ".*v,.*")) + * (os.arch=="riscv64" & vm.cpu.features ~= ".*rvv.*")) * @library /test/lib / * @run driver compiler.intrinsics.TestBitShuffleOpers */ diff --git a/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java b/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java index 55f8375332d5b..448d594b6aabe 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java +++ b/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java @@ -38,7 +38,7 @@ * @library /test/lib * @requires (vm.cpu.features ~= ".*avx512.*" | vm.cpu.features ~= ".*avx2.*" | vm.cpu.features ~= ".*avx.*") | * (os.arch=="aarch64" & vm.cpu.features ~= ".*simd.*") | - * (os.arch == "riscv64" & vm.cpu.features ~= ".*v,.*") + * (os.arch == "riscv64" & vm.cpu.features ~= ".*rvv.*") * @build compiler.intrinsics.chacha.ExerciseChaCha20 * jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox @@ -60,13 +60,9 @@ private static List mix(List o, String... mix) { return n; } - private static boolean containsFuzzy(List list, String sub, Boolean matchExactly) { + private static boolean containsFuzzy(List list, String sub) { for (String s : list) { - if (matchExactly) { - if (s.equals(sub)) return true; - } else { - if (s.contains(sub)) return true; - } + if (s.contains(sub)) return true; } return false; } @@ -86,27 +82,27 @@ public static void main(String... args) throws Exception { } // Otherwise, select the tests that make sense on current platform. - if (containsFuzzy(cpuFeatures, "avx512", false)) { + if (containsFuzzy(cpuFeatures, "avx512")) { System.out.println("Setting up AVX512 worker"); configs.add(List.of("-XX:UseAVX=3")); } - if (containsFuzzy(cpuFeatures, "avx2", false)) { + if (containsFuzzy(cpuFeatures, "avx2")) { System.out.println("Setting up AVX2 worker"); configs.add(List.of("-XX:UseAVX=2")); } - if (containsFuzzy(cpuFeatures, "avx", false)) { + if (containsFuzzy(cpuFeatures, "avx")) { System.out.println("Setting up AVX worker"); configs.add(List.of("-XX:UseAVX=1")); } } else if (Platform.isAArch64()) { // AArch64 intrinsics require the advanced simd instructions - if (containsFuzzy(cpuFeatures, "simd", false)) { + if (containsFuzzy(cpuFeatures, "simd")) { System.out.println("Setting up ASIMD worker"); configs.add(new ArrayList()); } } else if (Platform.isRISCV64()) { // Riscv64 intrinsics require the vector instructions - if (containsFuzzy(cpuFeatures, "v", true)) { + if (containsFuzzy(cpuFeatures, "rvv")) { System.out.println("Setting up vector worker"); configs.add(List.of("-XX:+UseRVV")); } diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/test/IREncodingPrinter.java b/test/hotspot/jtreg/compiler/lib/ir_framework/test/IREncodingPrinter.java index fc46712bb43f1..73943db3f5374 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/test/IREncodingPrinter.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/test/IREncodingPrinter.java @@ -108,7 +108,7 @@ public class IREncodingPrinter { "asimd", "sve", // Riscv64 - "v", + "rvv", "zvbb" )); diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastRVV.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastRVV.java index ebcd4a727f0e2..b8bcf73b403e5 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastRVV.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastRVV.java @@ -34,7 +34,7 @@ * @modules jdk.incubator.vector * @modules java.base/jdk.internal.misc * @summary Test that vector cast intrinsics work as intended on riscv (rvv). - * @requires os.arch == "riscv64" & vm.cpu.features ~= ".*v,.*" + * @requires os.arch == "riscv64" & vm.cpu.features ~= ".*rvv.*" * @library /test/lib / * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastRVV */ diff --git a/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java b/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java index 66943d68a678d..ee4e613dbbb7c 100644 --- a/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java +++ b/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java @@ -28,7 +28,7 @@ * and riscv64 (vector) * @requires vm.compiler2.enabled * @requires (os.simpleArch == "x64" & vm.cpu.features ~= ".*avx.*") | os.arch == "aarch64" | - * (os.arch == "riscv64" & vm.cpu.features ~= ".*v,.*") + * (os.arch == "riscv64" & vm.cpu.features ~= ".*rvv.*") * @library /test/lib / * @run driver compiler.vectorization.TestSignumVector */ diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/ArrayShiftOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/ArrayShiftOpTest.java index c4f601f42c89f..ec1e3f998ca12 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/ArrayShiftOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/ArrayShiftOpTest.java @@ -153,10 +153,7 @@ public long[] longExplicitRotateWithPopulateIndex2() { @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VI, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VI, ">0"}) public int[] intShiftLargeDistConstant() { int[] res = new int[SIZE]; @@ -167,10 +164,7 @@ public int[] intShiftLargeDistConstant() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VI, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VI, ">0"}) public int[] intShiftLargeDistInvariant() { int[] res = new int[SIZE]; @@ -181,10 +175,7 @@ public int[] intShiftLargeDistInvariant() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VS, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VS, ">0"}) public short[] shortShiftLargeDistConstant() { short[] res = new short[SIZE]; @@ -195,10 +186,7 @@ public short[] shortShiftLargeDistConstant() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VS, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VS, ">0"}) public short[] shortShiftLargeDistInvariant() { short[] res = new short[SIZE]; @@ -209,10 +197,7 @@ public short[] shortShiftLargeDistInvariant() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.LSHIFT_VL, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.LSHIFT_VL, ">0"}) public long[] longShiftLargeDistConstant() { long[] res = new long[SIZE]; @@ -223,10 +208,7 @@ public long[] longShiftLargeDistConstant() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.URSHIFT_VL, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.URSHIFT_VL, ">0"}) public long[] longShiftLargeDistInvariant() { long[] res = new long[SIZE]; @@ -259,10 +241,7 @@ public short[] loopIndexShiftDistance() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VS, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VS, ">0"}) public short[] vectorUnsignedShiftRight() { short[] res = new short[SIZE]; diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicByteOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicByteOpTest.java index f080e29d1c358..60a6d78a7d467 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicByteOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicByteOpTest.java @@ -189,10 +189,7 @@ public byte[] vectorXor() { // ---------------- Shift ---------------- @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse4.1", "true"}, - counts = {IRNode.LSHIFT_VB, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse4.1", "true", "rvv", "true"}, counts = {IRNode.LSHIFT_VB, ">0"}) public byte[] vectorShiftLeft() { byte[] res = new byte[SIZE]; @@ -203,10 +200,7 @@ public byte[] vectorShiftLeft() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse4.1", "true"}, - counts = {IRNode.RSHIFT_VB, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse4.1", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VB, ">0"}) public byte[] vectorSignedShiftRight() { byte[] res = new byte[SIZE]; @@ -217,10 +211,7 @@ public byte[] vectorSignedShiftRight() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse4.1", "true"}, - counts = {IRNode.RSHIFT_VB, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse4.1", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VB, ">0"}) public byte[] vectorUnsignedShiftRight() { byte[] res = new byte[SIZE]; diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicCharOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicCharOpTest.java index 9fa53609ea27e..8c20b879d59d8 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicCharOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicCharOpTest.java @@ -191,10 +191,7 @@ public char[] vectorXor() { // ---------------- Shift ---------------- @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.LSHIFT_VC, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.LSHIFT_VC, ">0"}) public char[] vectorShiftLeft() { char[] res = new char[SIZE]; @@ -205,10 +202,7 @@ public char[] vectorShiftLeft() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.URSHIFT_VC, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.URSHIFT_VC, ">0"}) public char[] vectorSignedShiftRight() { char[] res = new char[SIZE]; @@ -219,10 +213,7 @@ public char[] vectorSignedShiftRight() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.URSHIFT_VC, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.URSHIFT_VC, ">0"}) public char[] vectorUnsignedShiftRight() { char[] res = new char[SIZE]; diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicIntOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicIntOpTest.java index 5774e3b63b2f0..b3d7c21586776 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicIntOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicIntOpTest.java @@ -198,10 +198,7 @@ public int[] vectorXor() { // ---------------- Shift ---------------- @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.LSHIFT_VI, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.LSHIFT_VI, ">0"}) public int[] vectorShiftLeft() { int[] res = new int[SIZE]; @@ -212,10 +209,7 @@ public int[] vectorShiftLeft() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VI, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VI, ">0"}) public int[] vectorSignedShiftRight() { int[] res = new int[SIZE]; @@ -226,10 +220,7 @@ public int[] vectorSignedShiftRight() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.URSHIFT_VI, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.URSHIFT_VI, ">0"}) public int[] vectorUnsignedShiftRight() { int[] res = new int[SIZE]; diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicLongOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicLongOpTest.java index c6ecac096f93a..2f1bfcdf1df84 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicLongOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicLongOpTest.java @@ -190,10 +190,7 @@ public long[] vectorXor() { // ---------------- Shift ---------------- @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.LSHIFT_VL, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.LSHIFT_VL, ">0"}) public long[] vectorShiftLeft() { long[] res = new long[SIZE]; @@ -204,10 +201,7 @@ public long[] vectorShiftLeft() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VL, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VL, ">0"}) public long[] vectorSignedShiftRight() { long[] res = new long[SIZE]; @@ -218,10 +212,7 @@ public long[] vectorSignedShiftRight() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.URSHIFT_VL, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.URSHIFT_VL, ">0"}) public long[] vectorUnsignedShiftRight() { long[] res = new long[SIZE]; diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicShortOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicShortOpTest.java index bf5516ddaf8a0..50b68cd2e4873 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicShortOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicShortOpTest.java @@ -189,10 +189,7 @@ public short[] vectorXor() { // ---------------- Shift ---------------- @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.LSHIFT_VS, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.LSHIFT_VS, ">0"}) public short[] vectorShiftLeft() { short[] res = new short[SIZE]; @@ -203,10 +200,7 @@ public short[] vectorShiftLeft() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VS, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VS, ">0"}) public short[] vectorSignedShiftRight() { short[] res = new short[SIZE]; @@ -242,10 +236,7 @@ public short[] vectorMax() { } @Test - @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, - counts = {IRNode.RSHIFT_VS, ">0"}) - @IR(applyIfPlatform = {"riscv64", "true"}, - applyIfCPUFeature = {"v", "true"}, + @IR(applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, counts = {IRNode.RSHIFT_VS, ">0"}) public short[] vectorUnsignedShiftRight() { short[] res = new short[SIZE]; From cdf22b13204456b589349500bef0e9d48af44e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Gr=C3=B6nlund?= Date: Mon, 17 Jun 2024 12:57:09 +0000 Subject: [PATCH 014/102] 8326715: ZGC: RunThese24H fails with ExitCode 139 during shutdown Reviewed-by: egahlin --- .../checkpoint/objectSampleCheckpoint.cpp | 113 ++++++---------- .../checkpoint/objectSampleCheckpoint.hpp | 5 +- .../leakprofiler/sampling/objectSample.hpp | 4 +- .../checkpoint/jfrCheckpointManager.cpp | 28 ++-- .../checkpoint/jfrCheckpointWriter.hpp | 1 + .../storage/jfrReferenceCountedStorage.cpp | 79 ++++++++++++ .../storage/jfrReferenceCountedStorage.hpp | 68 ++++++++++ .../jfr/support/jfrDeprecationEventWriter.cpp | 29 ++++- .../jfr/support/jfrDeprecationEventWriter.hpp | 13 +- .../jfr/support/jfrDeprecationManager.cpp | 122 ++++++++++-------- .../jfr/support/jfrDeprecationManager.hpp | 13 +- 11 files changed, 312 insertions(+), 163 deletions(-) create mode 100644 src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.cpp create mode 100644 src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.hpp diff --git a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp index 2412454f6aa83..b7f9b733c0fd0 100644 --- a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp +++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.cpp @@ -36,6 +36,7 @@ #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp" #include "jfr/recorder/service/jfrOptionSet.hpp" #include "jfr/recorder/stacktrace/jfrStackTraceRepository.hpp" +#include "jfr/recorder/storage/jfrReferenceCountedStorage.hpp" #include "jfr/support/jfrKlassUnloading.hpp" #include "jfr/support/jfrMethodLookup.hpp" #include "jfr/utilities/jfrHashtable.hpp" @@ -272,11 +273,30 @@ static void install_stack_traces(const ObjectSampler* sampler) { iterate_samples(installer); } +// Resets the blob write states from the previous epoch. +static void reset_blob_write_state(const ObjectSampler* sampler, JavaThread* jt) { + assert(sampler != nullptr, "invariant"); + const ObjectSample* sample = sampler->last_resolved(); + while (sample != nullptr) { + if (sample->has_stacktrace()) { + sample->stacktrace()->reset_write_state(); + } + if (sample->has_thread()) { + sample->thread()->reset_write_state(); + } + if (sample->has_type_set()) { + sample->type_set()->reset_write_state(); + } + sample = sample->next(); + } +} + void ObjectSampleCheckpoint::on_rotation(const ObjectSampler* sampler) { assert(sampler != nullptr, "invariant"); assert(LeakProfiler::is_running(), "invariant"); JavaThread* const thread = JavaThread::current(); DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_native(thread);) + reset_blob_write_state(sampler, thread); if (!ObjectSampler::has_unresolved_entry()) { return; } @@ -326,38 +346,34 @@ void ObjectSampleCheckpoint::write_stacktrace(const JfrStackTrace* trace, JfrChe } } -static void write_blob(const JfrBlobHandle& blob, JfrCheckpointWriter& writer, bool reset) { - if (reset) { - blob->reset_write_state(); - return; - } +static void write_blob(const JfrBlobHandle& blob, JfrCheckpointWriter& writer) { blob->exclusive_write(writer); } -static void write_type_set_blob(const ObjectSample* sample, JfrCheckpointWriter& writer, bool reset) { +static void write_type_set_blob(const ObjectSample* sample, JfrCheckpointWriter& writer) { if (sample->has_type_set()) { - write_blob(sample->type_set(), writer, reset); + write_blob(sample->type_set(), writer); } } -static void write_thread_blob(const ObjectSample* sample, JfrCheckpointWriter& writer, bool reset) { +static void write_thread_blob(const ObjectSample* sample, JfrCheckpointWriter& writer) { assert(sample->has_thread(), "invariant"); if (sample->is_virtual_thread() || has_thread_exited(sample->thread_id())) { - write_blob(sample->thread(), writer, reset); + write_blob(sample->thread(), writer); } } -static void write_stacktrace_blob(const ObjectSample* sample, JfrCheckpointWriter& writer, bool reset) { +static void write_stacktrace_blob(const ObjectSample* sample, JfrCheckpointWriter& writer) { if (sample->has_stacktrace()) { - write_blob(sample->stacktrace(), writer, reset); + write_blob(sample->stacktrace(), writer); } } -static void write_blobs(const ObjectSample* sample, JfrCheckpointWriter& writer, bool reset) { +static void write_blobs(const ObjectSample* sample, JfrCheckpointWriter& writer) { assert(sample != nullptr, "invariant"); - write_stacktrace_blob(sample, writer, reset); - write_thread_blob(sample, writer, reset); - write_type_set_blob(sample, writer, reset); + write_stacktrace_blob(sample, writer); + write_thread_blob(sample, writer); + write_type_set_blob(sample, writer); } class BlobWriter { @@ -365,18 +381,14 @@ class BlobWriter { const ObjectSampler* _sampler; JfrCheckpointWriter& _writer; const jlong _last_sweep; - bool _reset; public: BlobWriter(const ObjectSampler* sampler, JfrCheckpointWriter& writer, jlong last_sweep) : - _sampler(sampler), _writer(writer), _last_sweep(last_sweep), _reset(false) {} + _sampler(sampler), _writer(writer), _last_sweep(last_sweep) {} void sample_do(ObjectSample* sample) { if (sample->is_alive_and_older_than(_last_sweep)) { - write_blobs(sample, _writer, _reset); + write_blobs(sample, _writer); } } - void set_reset() { - _reset = true; - } }; static void write_sample_blobs(const ObjectSampler* sampler, bool emit_all, Thread* thread) { @@ -385,9 +397,6 @@ static void write_sample_blobs(const ObjectSampler* sampler, bool emit_all, Thre JfrCheckpointWriter writer(thread, false); BlobWriter cbw(sampler, writer, last_sweep); iterate_samples(cbw, true); - // reset blob write states - cbw.set_reset(); - iterate_samples(cbw, true); } void ObjectSampleCheckpoint::write(const ObjectSampler* sampler, EdgeStore* edge_store, bool emit_all, Thread* thread) { @@ -403,67 +412,17 @@ void ObjectSampleCheckpoint::write(const ObjectSampler* sampler, EdgeStore* edge } } -// A linked list of saved type set blobs for the epoch. -// The link consist of a reference counted handle. -static JfrBlobHandle saved_type_set_blobs; - -static void release_state_for_previous_epoch() { - // decrements the reference count and the list is reinitialized - saved_type_set_blobs = JfrBlobHandle(); -} - -class BlobInstaller { - public: - ~BlobInstaller() { - release_state_for_previous_epoch(); - } - void sample_do(ObjectSample* sample) { - if (!sample->is_dead()) { - sample->set_type_set(saved_type_set_blobs); - } - } -}; - -static void install_type_set_blobs() { - if (saved_type_set_blobs.valid()) { - BlobInstaller installer; - iterate_samples(installer); - } -} - -static void save_type_set_blob(JfrCheckpointWriter& writer) { - assert(writer.has_data(), "invariant"); - const JfrBlobHandle blob = writer.copy(); - if (saved_type_set_blobs.valid()) { - saved_type_set_blobs->set_next(blob); - } else { - saved_type_set_blobs = blob; - } -} - // This routine has exclusive access to the sampler instance on entry. -void ObjectSampleCheckpoint::on_type_set(JfrCheckpointWriter& writer) { +void ObjectSampleCheckpoint::on_type_set(JavaThread* jt) { assert(LeakProfiler::is_running(), "invariant"); DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(JavaThread::current());) assert(ClassLoaderDataGraph_lock->owned_by_self(), "invariant"); if (!ObjectSampler::has_unresolved_entry()) { return; } - const ObjectSample* const last = ObjectSampler::sampler()->last(); + ObjectSample* const last = ObjectSampler::sampler()->last(); assert(last != nullptr, "invariant"); assert(last != ObjectSampler::sampler()->last_resolved(), "invariant"); - if (writer.has_data()) { - save_type_set_blob(writer); - } - install_type_set_blobs(); + JfrReferenceCountedStorage::install(last, ObjectSampler::sampler()->last_resolved()); ObjectSampler::sampler()->set_last_resolved(last); } - -// This routine does NOT have exclusive access to the sampler instance on entry. -void ObjectSampleCheckpoint::on_type_set_unload(JfrCheckpointWriter& writer) { - assert(LeakProfiler::is_running(), "invariant"); - assert_locked_or_safepoint(ClassLoaderDataGraph_lock); - if (writer.has_data() && ObjectSampler::has_unresolved_entry()) { - save_type_set_blob(writer); - } -} diff --git a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp index eb887f2db9a4a..bf1965b13b508 100644 --- a/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp +++ b/src/hotspot/share/jfr/leakprofiler/checkpoint/objectSampleCheckpoint.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,8 +50,7 @@ class ObjectSampleCheckpoint : AllStatic { static void write(const ObjectSampler* sampler, EdgeStore* edge_store, bool emit_all, Thread* thread); static void clear(); public: - static void on_type_set(JfrCheckpointWriter& writer); - static void on_type_set_unload(JfrCheckpointWriter& writer); + static void on_type_set(JavaThread* jt); static void on_thread_exit(traceid tid); static void on_rotation(const ObjectSampler* sampler); }; diff --git a/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.hpp b/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.hpp index c202ba8d8aa1c..214de827d03bc 100644 --- a/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.hpp +++ b/src/hotspot/share/jfr/leakprofiler/sampling/objectSample.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -233,7 +233,7 @@ class ObjectSample : public JfrCHeapObj { return _type_set.valid(); } - void set_type_set(const JfrBlobHandle& ref) { + void install_type_set(const JfrBlobHandle& ref) { if (_type_set != ref) { if (_type_set.valid()) { _type_set->set_next(ref); diff --git a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp index 0aed916702e79..a2e887e71a32a 100644 --- a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp +++ b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,7 @@ #include "jfr/recorder/service/jfrOptionSet.hpp" #include "jfr/recorder/storage/jfrEpochStorage.inline.hpp" #include "jfr/recorder/storage/jfrMemorySpace.inline.hpp" +#include "jfr/recorder/storage/jfrReferenceCountedStorage.hpp" #include "jfr/recorder/storage/jfrStorageUtils.inline.hpp" #include "jfr/recorder/stringpool/jfrStringPool.hpp" #include "jfr/support/jfrDeprecationManager.hpp" @@ -589,12 +590,14 @@ void JfrCheckpointManager::clear_type_set() { MutexLocker module_lock(Module_lock); JfrTypeSet::clear(&writer, &leakp_writer); } - JfrDeprecationManager::on_type_set(leakp_writer, nullptr, thread); - // We placed a blob in the Deprecated subsystem by moving the information - // from the leakp writer. For the real writer, the data will not be - // committed, because the JFR system is yet to be started. - // Therefore, the writer is cancelled before its destructor is run, - // to avoid writing unnecessary information into the checkpoint system. + JfrAddRefCountedBlob add_blob(leakp_writer); + JfrDeprecationManager::on_type_set(nullptr, thread); + // We installed a blob in the JfrReferenceCountedStorage subsystem + // by moving the information from the leakp writer. + // For the real writer, the data will not be committed, + // because the JFR system is yet to be started. + // Therefore, we cancel the writer before its destructor is run + // to avoid writing invalid information into the checkpoint system. writer.cancel(); } @@ -613,11 +616,11 @@ void JfrCheckpointManager::write_type_set() { MutexLocker module_lock(thread, Module_lock); JfrTypeSet::serialize(&writer, &leakp_writer, false, false); } + JfrAddRefCountedBlob add_blob(leakp_writer); if (LeakProfiler::is_running()) { - ObjectSampleCheckpoint::on_type_set(leakp_writer); + ObjectSampleCheckpoint::on_type_set(thread); } - // Place this call after ObjectSampleCheckpoint::on_type_set. - JfrDeprecationManager::on_type_set(leakp_writer, _chunkwriter, thread); + JfrDeprecationManager::on_type_set(_chunkwriter, thread); } write(); } @@ -626,10 +629,7 @@ void JfrCheckpointManager::on_unloading_classes() { assert_locked_or_safepoint(ClassLoaderDataGraph_lock); JfrCheckpointWriter writer(Thread::current()); JfrTypeSet::on_unloading_classes(&writer); - if (LeakProfiler::is_running()) { - ObjectSampleCheckpoint::on_type_set_unload(writer); - } - JfrDeprecationManager::on_type_set_unload(writer); + JfrAddRefCountedBlob add_blob(writer, false /* move */, false /* reset */); } static size_t flush_type_set(Thread* thread) { diff --git a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.hpp b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.hpp index a8ec2fd70f538..aaebc8f3e7e27 100644 --- a/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.hpp +++ b/src/hotspot/share/jfr/recorder/checkpoint/jfrCheckpointWriter.hpp @@ -54,6 +54,7 @@ struct JfrCheckpointContext { }; class JfrCheckpointWriter : public JfrCheckpointWriterBase { + friend class JfrAddRefCountedBlob; friend class JfrCheckpointManager; friend class JfrDeprecationManager; friend class JfrSerializerRegistration; diff --git a/src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.cpp b/src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.cpp new file mode 100644 index 0000000000000..ac652905c5b83 --- /dev/null +++ b/src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "jfr/leakprofiler/sampling/objectSampler.hpp" +#include "jfr/recorder/checkpoint/jfrCheckpointWriter.hpp" +#include "jfr/recorder/storage/jfrReferenceCountedStorage.hpp" +#include "jfr/support/jfrDeprecationManager.hpp" + +// Currently only two subsystems use type set blobs. Save a blob only if either has an unresolved entry. +static inline bool save_blob_predicate() { + return JfrDeprecationManager::has_unresolved_entry() || ObjectSampler::has_unresolved_entry(); +} + +JfrAddRefCountedBlob::JfrAddRefCountedBlob(JfrCheckpointWriter& writer, bool move /* true */, bool reset /* true */) : _reset(reset) { + if (writer.has_data()) { + if (save_blob_predicate()) { + JfrReferenceCountedStorage::save_blob(writer, move); + } else if (move) { + writer.cancel(); + } + } + DEBUG_ONLY(if (reset) JfrReferenceCountedStorage::set_scope();) +} + +JfrAddRefCountedBlob::~JfrAddRefCountedBlob() { + if (_reset) { + JfrReferenceCountedStorage::reset(); + } +} + +JfrBlobHandle JfrReferenceCountedStorage::_type_sets = JfrBlobHandle(); +DEBUG_ONLY(bool JfrReferenceCountedStorage::_scope = false;) + +void JfrReferenceCountedStorage::save_blob(JfrCheckpointWriter& writer, bool move /* false */) { + assert(writer.has_data(), "invariant"); + const JfrBlobHandle blob = move ? writer.move() : writer.copy(); + if (_type_sets.valid()) { + _type_sets->set_next(blob); + return; + } + _type_sets = blob; +} + +void JfrReferenceCountedStorage::reset() { + assert(_scope, "invariant"); + if (_type_sets.valid()) { + _type_sets = JfrBlobHandle(); + } + DEBUG_ONLY(_scope = false;) +} + +#ifdef ASSERT +void JfrReferenceCountedStorage::set_scope() { + assert(!_scope, "invariant"); + _scope = true; +} +#endif diff --git a/src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.hpp b/src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.hpp new file mode 100644 index 0000000000000..6d32e1b0eadb0 --- /dev/null +++ b/src/hotspot/share/jfr/recorder/storage/jfrReferenceCountedStorage.hpp @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_JFR_RECORDER_STORAGE_JFRREFERENCECOUNTEDSTORAGE_HPP +#define SHARE_JFR_RECORDER_STORAGE_JFRREFERENCECOUNTEDSTORAGE_HPP + +#include "jfr/utilities/jfrBlob.hpp" +#include "memory/allocation.hpp" +#include "utilities/macros.hpp" + +class JfrCheckpointWriter; + +// RAII helper class for adding blobs to the storage. +class JfrAddRefCountedBlob : public StackObj { + private: + bool _reset; + public: + JfrAddRefCountedBlob(JfrCheckpointWriter& writer, bool move = true, bool reset = true); + ~JfrAddRefCountedBlob(); +}; + +// The debug aid 'scope' implies the proper RAII save construct is placed on stack. +// This is a necessary condition for installing reference counted storage to nodes. +class JfrReferenceCountedStorage : AllStatic { + friend class JfrAddRefCountedBlob; + private: + static JfrBlobHandle _type_sets; // linked-list of blob handles saved during epoch. + DEBUG_ONLY(static bool _scope;) + + static void save_blob(JfrCheckpointWriter& writer, bool move = false); + static void reset(); + DEBUG_ONLY(static void set_scope();) + + public: + template + static void install(T* node, const T* end) { + assert(_scope, "invariant"); + if (_type_sets.valid()) { + while (node != end) { + node->install_type_set(_type_sets); + node = node->next(); + } + } + } +}; + +#endif // SHARE_JFR_RECORDER_STORAGE_JFRREFERENCECOUNTEDSTORAGE_HPP diff --git a/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.cpp b/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.cpp index 24cdbdc161126..4aa61bdddff7f 100644 --- a/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.cpp +++ b/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.cpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -116,8 +116,8 @@ bool JfrDeprecatedStackTraceWriter::process(const JfrDeprecatedEdge* edge) { return true; } -JfrDeprecatedEventWriter::JfrDeprecatedEventWriter(JfrChunkWriter& cw, bool stacktrace) : - _now(JfrTicks::now()),_cw(cw), _for_removal(only_for_removal()), _stacktrace(stacktrace), _did_write(false) {} +JfrDeprecatedEventWriter::JfrDeprecatedEventWriter(JfrChunkWriter& cw, JfrCheckpointWriter& tsw, bool stacktrace) : + _now(JfrTicks::now()),_cw(cw), _tsw(tsw), _for_removal(only_for_removal()), _stacktrace(stacktrace) {} static size_t calculate_event_size(const JfrDeprecatedEdge* edge, JfrChunkWriter& cw, const JfrTicks& now, bool stacktrace) { assert(edge != nullptr, "invariant"); @@ -141,14 +141,31 @@ static void write_event(const JfrDeprecatedEdge* edge, JfrChunkWriter& cw, const cw.write(edge->for_removal()); } +static void write_type_set(const JfrDeprecatedEdge* edge, JfrCheckpointWriter& tsw) { + if (!edge->has_type_set()) { + return; + } + edge->type_set()->exclusive_write(tsw); +} + bool JfrDeprecatedEventWriter::process(const JfrDeprecatedEdge* edge) { assert(edge != nullptr, "invariant"); if (_for_removal && !edge->for_removal()) { return true; } - write_event(edge, _cw,_now, _stacktrace); - if (!_did_write) { - _did_write = true; + write_event(edge, _cw, _now, _stacktrace); + write_type_set(edge, _tsw); + return true; +} + +JfrDeprecatedEventClear::JfrDeprecatedEventClear() {} + +bool JfrDeprecatedEventClear::process(const JfrDeprecatedEdge* edge) { + assert(edge != nullptr, "invariant"); + if (!edge->has_type_set()) { + return true; } + edge->type_set()->reset_write_state(); return true; } + diff --git a/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.hpp b/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.hpp index 77699c94979ef..1d73d4dc3a39e 100644 --- a/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.hpp +++ b/src/hotspot/share/jfr/support/jfrDeprecationEventWriter.hpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,12 +56,17 @@ class JfrDeprecatedEventWriter : public StackObj { private: JfrTicks _now; JfrChunkWriter& _cw; + JfrCheckpointWriter& _tsw; bool _for_removal; bool _stacktrace; - bool _did_write; public: - JfrDeprecatedEventWriter(JfrChunkWriter& cw, bool stacktrace); - bool did_write() const { return _did_write; } + JfrDeprecatedEventWriter(JfrChunkWriter& cw, JfrCheckpointWriter& tsw, bool stacktrace); + bool process(const JfrDeprecatedEdge* edge); +}; + +class JfrDeprecatedEventClear : public StackObj { + public: + JfrDeprecatedEventClear(); bool process(const JfrDeprecatedEdge* edge); }; diff --git a/src/hotspot/share/jfr/support/jfrDeprecationManager.cpp b/src/hotspot/share/jfr/support/jfrDeprecationManager.cpp index 5f5c87d239c7f..8969b787a1cdc 100644 --- a/src/hotspot/share/jfr/support/jfrDeprecationManager.cpp +++ b/src/hotspot/share/jfr/support/jfrDeprecationManager.cpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp" #include "jfr/recorder/repository/jfrChunkWriter.hpp" #include "jfr/recorder/stacktrace/jfrStackTraceRepository.hpp" +#include "jfr/recorder/storage/jfrReferenceCountedStorage.hpp" #include "jfr/support/jfrDeprecationEventWriter.hpp" #include "jfr/support/jfrDeprecationManager.hpp" #include "jfr/support/jfrKlassUnloading.hpp" @@ -66,6 +67,7 @@ static inline traceid load_traceid(const Method* method) { JfrDeprecatedEdge::JfrDeprecatedEdge(const Method* method, Method* sender, int bci, u1 frame_type, JavaThread* jt) : _invocation_time(JfrTicks::now()), _stacktrace(), + _type_set(), _next(nullptr), _deprecated_ik(method->method_holder()), _deprecated_methodid(load_traceid(method)), @@ -94,11 +96,25 @@ const JfrBlobHandle& JfrDeprecatedEdge::stacktrace() const { return _stacktrace; } +bool JfrDeprecatedEdge::has_type_set() const { + return _type_set.valid(); +} + +const JfrBlobHandle& JfrDeprecatedEdge::type_set() const { + assert(has_type_set(), "invariant"); + return _type_set; +} + +void JfrDeprecatedEdge::install_type_set(const JfrBlobHandle& type_set) { + assert(!has_type_set(), "invariant"); + _type_set = type_set; +} + typedef JfrLinkedList DeprecatedEdgeList; static DeprecatedEdgeList _list; // Newly constructed edges are concurrently added to this list. static DeprecatedEdgeList _pending_list; // During epoch rotation (safepoint) entries in _list are moved onto _pending_list -static DeprecatedEdgeList _resolved_list; // Fully resolved edges (event and stacktrace blobs). +static DeprecatedEdgeList _resolved_list; // Fully resolved edges (event, stacktrace and typeset blobs). static JfrDeprecatedEdge* allocate_edge(const Method* method, Method* sender, int bci, u1 frame_type, JavaThread* jt) { DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(jt);) @@ -225,10 +241,6 @@ static void transfer_list() { } } -void JfrDeprecationManager::on_level_setting_update(int64_t new_level) { - JfrDeprecatedEventWriterState::on_level_setting_update(new_level); -} - void JfrDeprecationManager::on_safepoint_clear() { assert(!_enqueue_klasses, "invariant"); // We are now starting JFR, so begin enqueuing tagged klasses. @@ -270,6 +282,23 @@ static void add_to_leakp_set(const JfrDeprecatedEdge* edge) { static DeprecatedEdgeList::NodePtr _pending_head = nullptr; static DeprecatedEdgeList::NodePtr _pending_tail = nullptr; +inline DeprecatedEdgeList::NodePtr pending_head() { + return Atomic::load(&_pending_head); +} + +// The test for a pending head can be read concurrently from a thread doing class unloading. +inline static bool has_pending_head() { + return pending_head() != nullptr; +} + +inline static bool no_pending_head() { + return !has_pending_head(); +} + +inline static void set_pending_head(DeprecatedEdgeList::NodePtr head) { + Atomic::store(&_pending_head, head); +} + class PendingListProcessor { private: JfrCheckpointWriter& _writer; @@ -281,66 +310,57 @@ class PendingListProcessor { JfrDeprecatedStackTraceWriter::install_stacktrace_blob(edge, _writer, _jt); assert(edge->has_stacktrace(), "invariant"); add_to_leakp_set(edge); - if (_pending_head == nullptr) { - _pending_head = edge; + if (no_pending_head()) { + set_pending_head(edge); } _pending_tail = edge; return true; } }; -void JfrDeprecationManager::prepare_type_set(JavaThread* jt) { - _pending_head = nullptr; +// Resets the pending head and tail. +// Resets blob write states for nodes on the resolved list, dirtied in the previous epoch. +static void reset_type_set_blobs() { + set_pending_head(nullptr); _pending_tail = nullptr; + if (_resolved_list.is_nonempty()) { + JfrDeprecatedEventClear clear; + _resolved_list.iterate(clear); + } +} + +void JfrDeprecationManager::prepare_type_set(JavaThread* jt) { + reset_type_set_blobs(); if (_pending_list.is_nonempty()) { JfrKlassUnloading::sort(true); JfrCheckpointWriter writer(true /* prev epoch */, jt, false /* header */); PendingListProcessor plp(writer, jt); _pending_list.iterate(plp); - assert(_pending_head != nullptr, "invariant"); + assert(has_pending_head(), "invariant"); assert(_pending_tail != nullptr, "invariant"); assert(_pending_tail->next() == nullptr, "invariant"); // Excise already resolved edges to link them. _pending_tail->set_next(_resolved_list.cut()); // Re-insertion. - _resolved_list.add_list(_pending_head); + _resolved_list.add_list(pending_head()); _pending_list.clear(); } assert(_pending_list.is_empty(), "invariant"); } -// A linked-list of blob handles. -static JfrBlobHandle type_set_blobs; - -static inline void write_type_set_blobs(JfrCheckpointWriter& writer) { - type_set_blobs->write(writer); -} - -static void save_type_set_blob(JfrCheckpointWriter& writer, bool copy = false) { - assert(writer.has_data(), "invariant"); - const JfrBlobHandle blob = copy ? writer.copy() : writer.move(); - if (type_set_blobs.valid()) { - type_set_blobs->set_next(blob); - } else { - type_set_blobs = blob; - } -} - -void JfrDeprecationManager::on_type_set_unload(JfrCheckpointWriter& writer) { - if (writer.has_data()) { - save_type_set_blob(writer, true); - } +bool JfrDeprecationManager::has_unresolved_entry() { + return _list.is_nonempty() || has_pending_head() || _pending_list.is_nonempty(); } static inline bool has_stacktrace() { return JfrEventSetting::has_stacktrace(JfrDeprecatedInvocationEvent); } -static inline bool write_events(JfrChunkWriter& cw) { +static inline void write_events(JfrChunkWriter& cw, Thread* thread, bool on_error) { assert(_resolved_list.is_nonempty(), "invariant"); - JfrDeprecatedEventWriter ebw(cw, has_stacktrace()); + JfrCheckpointWriter type_set_writer(!on_error, thread, false); + JfrDeprecatedEventWriter ebw(cw, type_set_writer, has_stacktrace()); _resolved_list.iterate(ebw); - return ebw.did_write(); } static inline void write_stacktraces(JfrChunkWriter& cw) { @@ -349,34 +369,30 @@ static inline void write_stacktraces(JfrChunkWriter& cw) { _resolved_list.iterate(scw); } -static inline void write_type_sets(Thread* thread, bool on_error) { - JfrCheckpointWriter writer(!on_error, thread, false); - write_type_set_blobs(writer); -} - -// First, we consolidate all stacktrace blobs into a single TYPE_STACKTRACE checkpoint and serialize it to the chunk. -// Secondly, we serialize all events to the chunk. -// Thirdly, the type set blobs are written into the JfrCheckpoint system, to be serialized to the chunk -// just after we return from here. +// First, we consolidate all stack trace blobs into a single TYPE_STACKTRACE checkpoint +// and serialize it to the chunk. Then, all events are serialized, and unique type set blobs +// written into the JfrCheckpoint system to be serialized to the chunk upon return. void JfrDeprecationManager::write_edges(JfrChunkWriter& cw, Thread* thread, bool on_error /* false */) { if (_resolved_list.is_nonempty() && JfrEventSetting::is_enabled(JfrDeprecatedInvocationEvent)) { if (has_stacktrace()) { write_stacktraces(cw); } - if (write_events(cw)) { - write_type_sets(thread, on_error); - } + write_events(cw, thread, on_error); } } -void JfrDeprecationManager::on_type_set(JfrCheckpointWriter& writer, JfrChunkWriter* cw, Thread* thread) { +void JfrDeprecationManager::on_type_set(JfrChunkWriter* cw, Thread* thread) { assert(_pending_list.is_empty(), "invariant"); - if (_pending_head != nullptr) { - save_type_set_blob(writer); - } else { - writer.cancel(); + if (has_pending_head()) { + assert(_pending_tail != nullptr, "invariant"); + // Install type set blobs for the pending, i.e. unresolved nodes. + JfrReferenceCountedStorage::install(pending_head(), _pending_tail->next()); } if (cw != nullptr) { write_edges(*cw, thread); } } + +void JfrDeprecationManager::on_level_setting_update(int64_t new_level) { + JfrDeprecatedEventWriterState::on_level_setting_update(new_level); +} diff --git a/src/hotspot/share/jfr/support/jfrDeprecationManager.hpp b/src/hotspot/share/jfr/support/jfrDeprecationManager.hpp index a19483574916a..d156679521a43 100644 --- a/src/hotspot/share/jfr/support/jfrDeprecationManager.hpp +++ b/src/hotspot/share/jfr/support/jfrDeprecationManager.hpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,6 +42,7 @@ class JfrDeprecatedEdge : public CHeapObj { private: JfrTicks _invocation_time; JfrBlobHandle _stacktrace; + JfrBlobHandle _type_set; JfrDeprecatedEdge* _next; InstanceKlass* _deprecated_ik; traceid _deprecated_methodid; @@ -58,7 +59,7 @@ class JfrDeprecatedEdge : public CHeapObj { public: JfrDeprecatedEdge(const Method* method, Method* sender, int bci, u1 frame_type, JavaThread* jt); - const JfrDeprecatedEdge* next() const { return _next; } + JfrDeprecatedEdge* next() const { return _next; } void set_next(JfrDeprecatedEdge* edge) { _next = edge; } bool has_event() const; @@ -68,6 +69,10 @@ class JfrDeprecatedEdge : public CHeapObj { const JfrBlobHandle& stacktrace() const; void install_stacktrace_blob(JavaThread* jt); + bool has_type_set() const; + const JfrBlobHandle& type_set() const; + void install_type_set(const JfrBlobHandle& type_set); + const InstanceKlass* deprecated_ik() const { return _deprecated_ik; } traceid deprecated_methodid() const { return _deprecated_methodid; } @@ -89,11 +94,11 @@ class JfrDeprecationManager : AllStatic { static void on_safepoint_write(); static void on_recorder_stop(); static void prepare_type_set(JavaThread* jt); - static void on_type_set(JfrCheckpointWriter& writer, JfrChunkWriter* cw, Thread* thread); - static void on_type_set_unload(JfrCheckpointWriter& writer); + static void on_type_set(JfrChunkWriter* cw, Thread* thread); static void write_edges(JfrChunkWriter& cw, Thread* thread, bool on_error = false); static void on_link(const Method* method, Method* sender, int bci, u1 frame_type, JavaThread* thread); static void on_level_setting_update(int64_t new_level); + static bool has_unresolved_entry(); }; #endif // SHARE_JFR_SUPPORT_JFRDEPRECATIONMANAGER_HPP From c94af6f943c179553d1827550847b93491d47506 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Mon, 17 Jun 2024 15:50:55 +0000 Subject: [PATCH 015/102] 8333962: Obsolete OldSize Reviewed-by: dholmes, zgu --- .../share/gc/serial/tenuredGeneration.cpp | 1 + src/hotspot/share/gc/shared/gc_globals.hpp | 4 - src/hotspot/share/gc/shared/genArguments.cpp | 74 ++--------------- src/hotspot/share/gc/shared/genArguments.hpp | 2 + src/hotspot/share/runtime/arguments.cpp | 3 +- .../sun/jvm/hotspot/tools/HeapSummary.java | 1 - .../gtest/gc/shared/test_collectorPolicy.cpp | 79 ------------------- .../gc/arguments/TestMaxHeapSizeTools.java | 16 ++-- .../jtreg/gc/arguments/TestMaxNewSize.java | 7 +- .../jtreg/gc/g1/TestInvalidateArrayCopy.java | 2 +- .../jtreg/gc/g1/plab/lib/PLABUtils.java | 1 - .../TestOptionsWithRanges.java | 1 - .../largeheap/MemOptions/MemOptionsTest.java | 4 - .../jdk/jfr/event/runtime/TestSizeTFlags.java | 13 +-- .../jhsdb/heapconfig/JMapHeapConfigTest.java | 1 - 15 files changed, 24 insertions(+), 185 deletions(-) diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index fedded6de082e..1cddce2dc514e 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -32,6 +32,7 @@ #include "gc/shared/gcLocker.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" +#include "gc/shared/genArguments.hpp" #include "gc/shared/space.hpp" #include "gc/shared/spaceDecorator.hpp" #include "logging/log.hpp" diff --git a/src/hotspot/share/gc/shared/gc_globals.hpp b/src/hotspot/share/gc/shared/gc_globals.hpp index 1440f788e18b3..66496544b9627 100644 --- a/src/hotspot/share/gc/shared/gc_globals.hpp +++ b/src/hotspot/share/gc/shared/gc_globals.hpp @@ -540,10 +540,6 @@ "Soft limit for maximum heap size (in bytes)") \ constraint(SoftMaxHeapSizeConstraintFunc,AfterMemoryInit) \ \ - product(size_t, OldSize, ScaleForWordSize(4*M), \ - "(Deprecated) Initial tenured generation size (in bytes)") \ - range(0, max_uintx) \ - \ product(size_t, NewSize, ScaleForWordSize(1*M), \ "Initial new generation size (in bytes)") \ constraint(NewSizeConstraintFunc,AfterErgo) \ diff --git a/src/hotspot/share/gc/shared/genArguments.cpp b/src/hotspot/share/gc/shared/genArguments.cpp index 3eac2e39f3830..76f9f6d40523b 100644 --- a/src/hotspot/share/gc/shared/genArguments.cpp +++ b/src/hotspot/share/gc/shared/genArguments.cpp @@ -37,6 +37,8 @@ size_t MinNewSize = 0; size_t MinOldSize = 0; size_t MaxOldSize = 0; +size_t OldSize = 0; + size_t GenAlignment = 0; size_t GenArguments::conservative_max_heap_alignment() { return (size_t)Generation::GenGrain; } @@ -152,24 +154,7 @@ void GenArguments::initialize_heap_flags_and_sizes() { vm_exit_during_initialization("Invalid young gen ratio specified"); } - if (OldSize < old_gen_size_lower_bound()) { - FLAG_SET_ERGO(OldSize, old_gen_size_lower_bound()); - } - if (!is_aligned(OldSize, GenAlignment)) { - FLAG_SET_ERGO(OldSize, align_down(OldSize, GenAlignment)); - } - - if (FLAG_IS_CMDLINE(OldSize) && FLAG_IS_DEFAULT(MaxHeapSize)) { - // NewRatio will be used later to set the young generation size so we use - // it to calculate how big the heap should be based on the requested OldSize - // and NewRatio. - assert(NewRatio > 0, "NewRatio should have been set up earlier"); - size_t calculated_heapsize = (OldSize / NewRatio) * (NewRatio + 1); - - calculated_heapsize = align_up(calculated_heapsize, HeapAlignment); - FLAG_SET_ERGO(MaxHeapSize, calculated_heapsize); - FLAG_SET_ERGO(InitialHeapSize, calculated_heapsize); - } + OldSize = old_gen_size_lower_bound(); // Adjust NewSize and OldSize or MaxHeapSize to match each other if (NewSize + OldSize > MaxHeapSize) { @@ -185,23 +170,12 @@ void GenArguments::initialize_heap_flags_and_sizes() { // HeapAlignment, and we just made sure that NewSize is aligned to // GenAlignment. In initialize_flags() we verified that HeapAlignment // is a multiple of GenAlignment. - FLAG_SET_ERGO(OldSize, MaxHeapSize - NewSize); + OldSize = MaxHeapSize - NewSize; } else { FLAG_SET_ERGO(MaxHeapSize, align_up(NewSize + OldSize, HeapAlignment)); } } - // Update NewSize, if possible, to avoid sizing the young gen too small when only - // OldSize is set on the command line. - if (FLAG_IS_CMDLINE(OldSize) && !FLAG_IS_CMDLINE(NewSize)) { - if (OldSize < InitialHeapSize) { - size_t new_size = InitialHeapSize - OldSize; - if (new_size >= MinNewSize && new_size <= MaxNewSize) { - FLAG_SET_ERGO(NewSize, new_size); - } - } - } - DEBUG_ONLY(assert_flags();) } @@ -215,12 +189,6 @@ void GenArguments::initialize_heap_flags_and_sizes() { // In the absence of explicitly set command line flags, policies // such as the use of NewRatio are used to size the generation. -// Minimum sizes of the generations may be different than -// the initial sizes. An inconsistency is permitted here -// in the total size that can be specified explicitly by -// command line specification of OldSize and NewSize and -// also a command line specification of -Xms. Issue a warning -// but allow the values to pass. void GenArguments::initialize_size_info() { GCArguments::initialize_size_info(); @@ -286,37 +254,7 @@ void GenArguments::initialize_size_info() { InitialHeapSize - initial_young_size, MinHeapSize - MinNewSize); - size_t initial_old_size = OldSize; - - // If no explicit command line flag has been set for the - // old generation size, use what is left. - if (!FLAG_IS_CMDLINE(OldSize)) { - // The user has not specified any value but the ergonomics - // may have chosen a value (which may or may not be consistent - // with the overall heap size). In either case make - // the minimum, maximum and initial sizes consistent - // with the young sizes and the overall heap sizes. - initial_old_size = clamp(InitialHeapSize - initial_young_size, MinOldSize, MaxOldSize); - // MaxOldSize and MinOldSize have already been made consistent above. - } else { - // OldSize has been explicitly set on the command line. Use it - // for the initial size but make sure the minimum allow a young - // generation to fit as well. - // If the user has explicitly set an OldSize that is inconsistent - // with other command line flags, issue a warning. - // The generation minimums and the overall heap minimum should - // be within one generation alignment. - if (initial_old_size > MaxOldSize) { - log_warning(gc, ergo)("Inconsistency between maximum heap size and maximum " - "generation sizes: using maximum heap = " SIZE_FORMAT - ", -XX:OldSize flag is being ignored", - MaxHeapSize); - initial_old_size = MaxOldSize; - } else if (initial_old_size < MinOldSize) { - log_warning(gc, ergo)("Inconsistency between initial old size and minimum old size"); - MinOldSize = initial_old_size; - } - } + size_t initial_old_size = clamp(InitialHeapSize - initial_young_size, MinOldSize, MaxOldSize);; // The initial generation sizes should match the initial heap size, // if not issue a warning and resize the generations. This behavior @@ -359,7 +297,7 @@ void GenArguments::initialize_size_info() { } if (OldSize != initial_old_size) { - FLAG_SET_ERGO(OldSize, initial_old_size); + OldSize = initial_old_size; } log_trace(gc, heap)("Minimum old " SIZE_FORMAT " Initial old " SIZE_FORMAT " Maximum old " SIZE_FORMAT, diff --git a/src/hotspot/share/gc/shared/genArguments.hpp b/src/hotspot/share/gc/shared/genArguments.hpp index a4c62ff5afe36..dfc392cac6ba6 100644 --- a/src/hotspot/share/gc/shared/genArguments.hpp +++ b/src/hotspot/share/gc/shared/genArguments.hpp @@ -33,6 +33,8 @@ extern size_t MinNewSize; extern size_t MinOldSize; extern size_t MaxOldSize; +extern size_t OldSize; + extern size_t GenAlignment; class GenArguments : public GCArguments { diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 5f89384ba661a..38f63354735f6 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -34,6 +34,7 @@ #include "compiler/compilerDefinitions.hpp" #include "gc/shared/gcArguments.hpp" #include "gc/shared/gcConfig.hpp" +#include "gc/shared/genArguments.hpp" #include "gc/shared/stringdedup/stringDedup.hpp" #include "gc/shared/tlab_globals.hpp" #include "jvm.h" @@ -502,7 +503,6 @@ static SpecialFlag const special_jvm_flags[] = { { "RequireSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "UseSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "DontYieldALot", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, - { "OldSize", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "PreserveAllAnnotations", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseNotificationThread", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseEmptySlotsInSupers", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, @@ -513,6 +513,7 @@ static SpecialFlag const special_jvm_flags[] = { { "MetaspaceReclaimPolicy", JDK_Version::undefined(), JDK_Version::jdk(21), JDK_Version::undefined() }, + { "OldSize", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, #if defined(X86) { "UseRTMLocking", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseRTMDeopt", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java index 41788757e0c78..22eb627d39ff5 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java @@ -80,7 +80,6 @@ public void run() { printValMB("MaxHeapSize = ", getFlagValue("MaxHeapSize", flagMap)); printValMB("NewSize = ", getFlagValue("NewSize", flagMap)); printValMB("MaxNewSize = ", getFlagValue("MaxNewSize", flagMap)); - printValMB("OldSize = ", getFlagValue("OldSize", flagMap)); printValue("NewRatio = ", getFlagValue("NewRatio", flagMap)); printValue("SurvivorRatio = ", getFlagValue("SurvivorRatio", flagMap)); printValMB("MetaspaceSize = ", getFlagValue("MetaspaceSize", flagMap)); diff --git a/test/hotspot/gtest/gc/shared/test_collectorPolicy.cpp b/test/hotspot/gtest/gc/shared/test_collectorPolicy.cpp index 102ede42de63f..b38586a89753b 100644 --- a/test/hotspot/gtest/gc/shared/test_collectorPolicy.cpp +++ b/test/hotspot/gtest/gc/shared/test_collectorPolicy.cpp @@ -63,11 +63,9 @@ class TestGenCollectorPolicy { AutoSaveRestore FLAG_GUARD(MaxNewSize); AutoSaveRestore FLAG_GUARD(MinHeapDeltaBytes); AutoSaveRestore FLAG_GUARD(NewSize); - AutoSaveRestore FLAG_GUARD(OldSize); MinHeapSize = 40 * M; FLAG_SET_ERGO(InitialHeapSize, 100 * M); - FLAG_SET_ERGO(OldSize, 4 * M); FLAG_SET_ERGO(NewSize, 1 * M); FLAG_SET_ERGO(MaxNewSize, 80 * M); @@ -144,14 +142,6 @@ class TestGenCollectorPolicy { } }; - class SetOldSizeCmd : public UnaryExecutor { - public: - SetOldSizeCmd(size_t param) : UnaryExecutor(param) { } - void execute() { - FLAG_SET_CMDLINE(OldSize, param); - } - }; - class SetMaxNewSizeCmd : public BinaryExecutor { public: SetMaxNewSizeCmd(size_t param1, size_t param2) : BinaryExecutor(param1, param2) { } @@ -162,49 +152,6 @@ class TestGenCollectorPolicy { FLAG_SET_CMDLINE(MaxNewSize, new_size_value); } }; - - class CheckOldMin : public UnaryExecutor { - public: - CheckOldMin(size_t param) : UnaryExecutor(param) { } - void execute() { - SerialArguments sa; - sa.initialize_heap_sizes(); - ASSERT_LE(MinOldSize, param); - } - }; - - class CheckOldInitial : public Executor { - public: - void execute() { - size_t heap_alignment = GCArguments::compute_heap_alignment(); - - SerialArguments sa; - sa.initialize_heap_sizes(); - - size_t expected_old_initial = align_up(InitialHeapSize, heap_alignment) - - MaxNewSize; - - ASSERT_EQ(expected_old_initial, OldSize); - } - }; - - class CheckOldInitialMaxNewSize : public BinaryExecutor { - public: - CheckOldInitialMaxNewSize(size_t param1, size_t param2) : BinaryExecutor(param1, param2) { } - void execute() { - size_t heap_alignment = GCArguments::compute_heap_alignment(); - size_t new_size_value = align_up(MaxHeapSize, heap_alignment) - - param1 + param2; - - SerialArguments sa; - sa.initialize_heap_sizes(); - - size_t expected_old_initial = align_up(MaxHeapSize, heap_alignment) - - new_size_value; - - ASSERT_EQ(expected_old_initial, OldSize); - } - }; }; @@ -244,29 +191,3 @@ TEST_OTHER_VM(CollectorPolicy, young_cmd) { TestGenCollectorPolicy::CheckYoungInitial checker_large(80 * M); TestGenCollectorPolicy::TestWrapper::test(&setter_large, &checker_large); } - -// Since a flag has been set with FLAG_SET_CMDLINE it -// will be treated as it have been set on the command line for -// the rest of the VM lifetime. This is an irreversible change and -// could impact other tests so we use TEST_OTHER_VM -TEST_OTHER_VM(CollectorPolicy, old_cmd) { - // If OldSize is set on the command line, it should be used - // for both min and initial old size if less than min heap. - TestGenCollectorPolicy::SetOldSizeCmd setter(20 * M); - - TestGenCollectorPolicy::CheckOldMin checker_min(20 * M); - TestGenCollectorPolicy::TestWrapper::test(&setter, &checker_min); - - TestGenCollectorPolicy::CheckOldInitial checker_initial; - TestGenCollectorPolicy::TestWrapper::test(&setter, &checker_initial); - - // If MaxNewSize is large, the maximum OldSize will be less than - // what's requested on the command line and it should be reset - // ergonomically. - // We intentionally set MaxNewSize + OldSize > MaxHeapSize - TestGenCollectorPolicy::SetOldSizeCmd setter_old_size(30 * M); - TestGenCollectorPolicy::SetMaxNewSizeCmd setter_max_new_size(30 * M, 20 * M); - TestGenCollectorPolicy::CheckOldInitialMaxNewSize checker_large(30 * M, 20 * M); - - TestGenCollectorPolicy::TestWrapper::test(&setter_old_size, &setter_max_new_size, &checker_large); -} diff --git a/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java b/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java index fd78486166327..7194e97c76819 100644 --- a/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java +++ b/test/hotspot/jtreg/gc/arguments/TestMaxHeapSizeTools.java @@ -59,15 +59,10 @@ public static void checkMinInitialMaxHeapFlags(String gcflag) throws Exception { } public static void checkMinInitialErgonomics(String gcflag) throws Exception { - // heap sizing ergonomics use the value NewSize + OldSize as default values - // for ergonomics calculation. Retrieve these values. - long[] values = new long[2]; - getNewOldSize(gcflag, values); - // we check cases with values smaller and larger than this default value. - long newPlusOldSize = values[0] + values[1]; - long smallValue = newPlusOldSize / 2; - long largeValue = newPlusOldSize * 2; + long initialHeapSize = getInitialHeapSize(gcflag); + long smallValue = initialHeapSize / 2; + long largeValue = initialHeapSize * 2; long maxHeapSize = largeValue + (2 * 1024 * 1024); // -Xms is not set @@ -114,14 +109,13 @@ private static long align_up(long value, long alignment) { return (value + alignmentMinusOne) & ~alignmentMinusOne; } - private static void getNewOldSize(String gcflag, long[] values) throws Exception { + private static long getInitialHeapSize(String gcflag) throws Exception { OutputAnalyzer output = GCArguments.executeTestJava(gcflag, "-XX:+PrintFlagsFinal", "-version"); output.shouldHaveExitValue(0); String stdout = output.getStdout(); - values[0] = getFlagValue(" NewSize", stdout); - values[1] = getFlagValue(" OldSize", stdout); + return getFlagValue(" InitialHeapSize", stdout); } public static void checkGenMaxHeapErgo(String gcflag) throws Exception { diff --git a/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java b/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java index 3f741ab144035..d967a4f609fbb 100644 --- a/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java +++ b/test/hotspot/jtreg/gc/arguments/TestMaxNewSize.java @@ -29,7 +29,7 @@ * @summary Make sure that MaxNewSize always has a useful value after argument * processing. * @key flag-sensitive - * @requires vm.gc.Serial & vm.opt.MaxNewSize == null & vm.opt.NewRatio == null & vm.opt.NewSize == null & vm.opt.OldSize == null + * @requires vm.gc.Serial & vm.opt.MaxNewSize == null & vm.opt.NewRatio == null & vm.opt.NewSize == null * @library /test/lib * @library / * @modules java.base/jdk.internal.misc @@ -44,7 +44,7 @@ * @summary Make sure that MaxNewSize always has a useful value after argument * processing. * @key flag-sensitive - * @requires vm.gc.Parallel & vm.opt.MaxNewSize == null & vm.opt.NewRatio == null & vm.opt.NewSize == null & vm.opt.OldSize == null + * @requires vm.gc.Parallel & vm.opt.MaxNewSize == null & vm.opt.NewRatio == null & vm.opt.NewSize == null * @library /test/lib * @library / * @modules java.base/jdk.internal.misc @@ -59,7 +59,7 @@ * @summary Make sure that MaxNewSize always has a useful value after argument * processing. * @key flag-sensitive - * @requires vm.gc.G1 & vm.opt.MaxNewSize == null & vm.opt.NewRatio == null & vm.opt.NewSize == null & vm.opt.OldSize == null + * @requires vm.gc.G1 & vm.opt.MaxNewSize == null & vm.opt.NewRatio == null & vm.opt.NewSize == null * @library /test/lib * @library / * @modules java.base/jdk.internal.misc @@ -116,7 +116,6 @@ public static void main(String args[]) throws Exception { checkMaxNewSize(new String[] { gcName, "-Xmx128M" }, 128 * M); checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=5" }, 128 * M); checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M" }, 128 * M); - checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:OldSize=96M" }, 128 * M); checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:MaxNewSize=32M" }, 32 * M); checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewSize=32M", "-XX:MaxNewSize=32M" }, 32 * M); checkMaxNewSize(new String[] { gcName, "-Xmx128M", "-XX:NewRatio=6", "-XX:MaxNewSize=32M" }, 32 * M); diff --git a/test/hotspot/jtreg/gc/g1/TestInvalidateArrayCopy.java b/test/hotspot/jtreg/gc/g1/TestInvalidateArrayCopy.java index 2e5b3c0a3636f..84140ae1679de 100644 --- a/test/hotspot/jtreg/gc/g1/TestInvalidateArrayCopy.java +++ b/test/hotspot/jtreg/gc/g1/TestInvalidateArrayCopy.java @@ -29,7 +29,7 @@ * @summary Check that benign (0-sized) out of heap bounds card table invalidations do not assert. * @requires vm.gc.G1 * @requires vm.debug - * @run main/othervm -XX:NewSize=1M -Xlog:gc -XX:MaxNewSize=1m -XX:-UseTLAB -XX:OldSize=63M -XX:MaxHeapSize=64M gc.g1.TestInvalidateArrayCopy + * @run main/othervm -XX:NewSize=1M -Xlog:gc -XX:MaxNewSize=1m -XX:-UseTLAB -XX:MaxHeapSize=64M gc.g1.TestInvalidateArrayCopy */ // The test allocates zero-sized arrays of j.l.O and tries to arraycopy random data into it so diff --git a/test/hotspot/jtreg/gc/g1/plab/lib/PLABUtils.java b/test/hotspot/jtreg/gc/g1/plab/lib/PLABUtils.java index 0ae28ab9d5592..b9192c45fbfd6 100644 --- a/test/hotspot/jtreg/gc/g1/plab/lib/PLABUtils.java +++ b/test/hotspot/jtreg/gc/g1/plab/lib/PLABUtils.java @@ -40,7 +40,6 @@ public class PLABUtils { private final static String[] GC_TUNE_OPTIONS = { "-XX:+UseG1GC", "-XX:G1HeapRegionSize=1m", - "-XX:OldSize=64m", "-XX:-UseAdaptiveSizePolicy", "-XX:MaxTenuringThreshold=1", "-XX:-UseTLAB", diff --git a/test/hotspot/jtreg/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java b/test/hotspot/jtreg/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java index 12bced849d916..033b74f7eb133 100644 --- a/test/hotspot/jtreg/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java +++ b/test/hotspot/jtreg/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java @@ -240,7 +240,6 @@ public static void main(String[] args) throws Exception { excludeTestMaxRange("MaxHeapSize"); excludeTestMaxRange("MaxRAM"); excludeTestMaxRange("NewSize"); - excludeTestMaxRange("OldSize"); excludeTestMaxRange("ParallelGCThreads"); excludeTestMaxRange("TLABSize"); diff --git a/test/hotspot/jtreg/vmTestbase/gc/huge/quicklook/largeheap/MemOptions/MemOptionsTest.java b/test/hotspot/jtreg/vmTestbase/gc/huge/quicklook/largeheap/MemOptions/MemOptionsTest.java index 67e629fddcdcf..4547bcdbc304d 100644 --- a/test/hotspot/jtreg/vmTestbase/gc/huge/quicklook/largeheap/MemOptions/MemOptionsTest.java +++ b/test/hotspot/jtreg/vmTestbase/gc/huge/quicklook/largeheap/MemOptions/MemOptionsTest.java @@ -79,10 +79,6 @@ public void test() throws IOException { // positive("Initial young generation size at 32-bit range", "-Xmx5G", "-XX:NewSize=4G"); // positive("Initial young generation size outside 32-bit range", "-Xmx5G", "-XX:NewSize=4G"); - // positive("Initial old generation size within 32-bit range", "-Xmx3G", "-XX:OldSize=2G"); - // positive("Initial old generation size at 32-bit range", "-Xmx5G", "-XX:OldSize=4G"); - // positive("Initial old generation size outside 32-bit range", "-Xmx5G", "-XX:OldSize=4G"); - if (!failed.isEmpty()) { throw new AssertionError(String.format("%d cases failed : %s", failed.size(), failed)); } diff --git a/test/jdk/jdk/jfr/event/runtime/TestSizeTFlags.java b/test/jdk/jdk/jfr/event/runtime/TestSizeTFlags.java index c2ad220d78d60..ae21537840f43 100644 --- a/test/jdk/jdk/jfr/event/runtime/TestSizeTFlags.java +++ b/test/jdk/jdk/jfr/event/runtime/TestSizeTFlags.java @@ -40,13 +40,12 @@ * @key jfr * @summary Test checks that flags of type size_t are being sent to the jfr * @library /test/lib - * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:-UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:+UseTLAB -XX:MinTLABSize=3k -XX:OldSize=30m -XX:YoungPLABSize=3k -XX:MaxDirectMemorySize=5M jdk.jfr.event.runtime.TestSizeTFlags + * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:-UseFastUnorderedTimeStamps -XX:+UseG1GC -XX:+UseTLAB -XX:MinTLABSize=3k -XX:YoungPLABSize=3k -XX:MaxDirectMemorySize=5M jdk.jfr.event.runtime.TestSizeTFlags */ public class TestSizeTFlags { private static final String EVENT_NAME = EventNames.UnsignedLongFlag; - private static final int NUMBER_OF_FLAGS_TO_CHECK = 4; + private static final int NUMBER_OF_FLAGS_TO_CHECK = 3; private static final long MIN_TLAB_SIZE_FLAG_VALUE = 3*1024L; - private static final long OLD_SIZE_FLAG_VALUE = 30*1024*1024L; private static final long YOUNG_PLAB_SIZE_FLAG_VALUE = 3*1024L; private static final long MAX_DIRECT_MEMORY_SIZE_FLAG_VALUE = 5*1024*1024L; @@ -71,16 +70,12 @@ public static void main(String[] args) throws Exception { flagsFoundWithExpectedValue[0] = MIN_TLAB_SIZE_FLAG_VALUE == value; continue; } - case "OldSize": { - flagsFoundWithExpectedValue[1] = OLD_SIZE_FLAG_VALUE == value; - continue; - } case "YoungPLABSize": { - flagsFoundWithExpectedValue[2] = YOUNG_PLAB_SIZE_FLAG_VALUE == value; + flagsFoundWithExpectedValue[1] = YOUNG_PLAB_SIZE_FLAG_VALUE == value; continue; } case "MaxDirectMemorySize": { - flagsFoundWithExpectedValue[3] = MAX_DIRECT_MEMORY_SIZE_FLAG_VALUE == value; + flagsFoundWithExpectedValue[2] = MAX_DIRECT_MEMORY_SIZE_FLAG_VALUE == value; continue; } default: { diff --git a/test/jdk/sun/tools/jhsdb/heapconfig/JMapHeapConfigTest.java b/test/jdk/sun/tools/jhsdb/heapconfig/JMapHeapConfigTest.java index 53330c0861808..89a5801cff772 100644 --- a/test/jdk/sun/tools/jhsdb/heapconfig/JMapHeapConfigTest.java +++ b/test/jdk/sun/tools/jhsdb/heapconfig/JMapHeapConfigTest.java @@ -54,7 +54,6 @@ public class JMapHeapConfigTest { "MaxHeapSize", "NewSize", "MaxNewSize", - "OldSize", "NewRatio", "SurvivorRatio", "MetaspaceSize", From 801bf15f02ca47c3547eb677079d7d2f3af1de8c Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Mon, 17 Jun 2024 17:27:01 +0000 Subject: [PATCH 016/102] 8332105: Exploded JDK does not include CDS Reviewed-by: dholmes, iklam --- src/hotspot/share/prims/whitebox.cpp | 6 +++++- .../CompressedCPUSpecificClassSpaceReservation.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index a45be186aa486..821444ea38985 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -29,6 +29,7 @@ #include "cds/filemap.hpp" #include "cds/heapShared.hpp" #include "cds/metaspaceShared.hpp" +#include "classfile/classLoader.hpp" #include "classfile/classLoaderDataGraph.hpp" #include "classfile/classLoaderStats.hpp" #include "classfile/classPrinter.hpp" @@ -2115,7 +2116,10 @@ WB_END WB_ENTRY(jboolean, WB_IsCDSIncluded(JNIEnv* env)) #if INCLUDE_CDS - return true; + // An exploded build inhibits use of CDS. Therefore, for the + // purpose of testing, the JVM can be treated as not having CDS + // built in at all. + return ClassLoader::has_jrt_entry(); #else return false; #endif // INCLUDE_CDS diff --git a/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java b/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java index 8a25b1eff88a5..f1b4c7143b432 100644 --- a/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java +++ b/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java @@ -26,6 +26,7 @@ * @summary Test the various CPU-specific reservation schemes * @requires vm.bits == 64 & !vm.graal.enabled & vm.debug == true * @requires vm.flagless + * @requires vm.cds * @requires (os.family != "windows") & (os.family != "aix") * @library /test/lib * @modules java.base/jdk.internal.misc From ba5a4670b8ad86fefb41a939752754bf36aac9dc Mon Sep 17 00:00:00 2001 From: Phil Race Date: Mon, 17 Jun 2024 19:37:32 +0000 Subject: [PATCH 017/102] 8332854: Unable to build openjdk with --with-harfbuzz=system Reviewed-by: jwaters, erikj, jdv, ihse --- make/modules/java.desktop/lib/ClientLibraries.gmk | 1 + 1 file changed, 1 insertion(+) diff --git a/make/modules/java.desktop/lib/ClientLibraries.gmk b/make/modules/java.desktop/lib/ClientLibraries.gmk index 6f3616608ccea..f023969536987 100644 --- a/make/modules/java.desktop/lib/ClientLibraries.gmk +++ b/make/modules/java.desktop/lib/ClientLibraries.gmk @@ -281,6 +281,7 @@ endif ifeq ($(USE_EXTERNAL_HARFBUZZ), true) LIBFONTMANAGER_EXTRA_SRC = LIBFONTMANAGER_LIBS += $(HARFBUZZ_LIBS) + LIBFONTMANAGER_CFLAGS += $(HARFBUZZ_CFLAGS) else LIBFONTMANAGER_EXTRA_SRC = libharfbuzz From e95f092862307c248bbd93e7026cbd92053fb4c9 Mon Sep 17 00:00:00 2001 From: Gui Cao Date: Tue, 18 Jun 2024 05:24:33 +0000 Subject: [PATCH 018/102] 8333964: RISC-V: C2: Check "requires_strict_order" flag for floating-point add reduction Reviewed-by: fyang --- src/hotspot/cpu/riscv/riscv_v.ad | 50 +++++++++++++++++-- .../superword/TestVectorFPReduction.java | 4 +- .../vectorapi/TestVectorAddMulReduction.java | 14 +++--- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 4a71da9f20c65..841e8cb260cb8 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -2007,11 +2007,20 @@ instruct reduce_addL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{ ins_pipe(pipe_slow); %} -instruct reduce_addF(fRegF dst, fRegF src1, vReg src2, vReg tmp) %{ +// Distinguish two cases based on requires_strict_order +// 1. Non strictly-ordered AddReductionVF/D. For example, AddReductionVF/D +// generated by Vector API. It is more beneficial performance-wise to do +// an unordered FP reduction sum (vfredusum.vs). +// 2. Strictly-ordered AddReductionVF/D. For example, AddReductionVF/D +// generated by auto-vectorization. Must do an ordered FP reduction sum +// (vfredosum.vs). + +instruct reduce_addF_ordered(fRegF dst, fRegF src1, vReg src2, vReg tmp) %{ + predicate(n->as_Reduction()->requires_strict_order()); match(Set dst (AddReductionVF src1 src2)); effect(TEMP tmp); ins_cost(VEC_COST); - format %{ "reduce_addF $dst, $src1, $src2\t# KILL $tmp" %} + format %{ "reduce_addF_ordered $dst, $src1, $src2\t# KILL $tmp" %} ins_encode %{ __ vsetvli_helper(T_FLOAT, Matcher::vector_length(this, $src2)); __ vfmv_s_f(as_VectorRegister($tmp$$reg), $src1$$FloatRegister); @@ -2022,11 +2031,28 @@ instruct reduce_addF(fRegF dst, fRegF src1, vReg src2, vReg tmp) %{ ins_pipe(pipe_slow); %} -instruct reduce_addD(fRegD dst, fRegD src1, vReg src2, vReg tmp) %{ +instruct reduce_addF_unordered(fRegF dst, fRegF src1, vReg src2, vReg tmp) %{ + predicate(!n->as_Reduction()->requires_strict_order()); + match(Set dst (AddReductionVF src1 src2)); + effect(TEMP tmp); + ins_cost(VEC_COST); + format %{ "reduce_addF_unordered $dst, $src1, $src2\t# KILL $tmp" %} + ins_encode %{ + __ vsetvli_helper(T_FLOAT, Matcher::vector_length(this, $src2)); + __ vfmv_s_f(as_VectorRegister($tmp$$reg), $src1$$FloatRegister); + __ vfredusum_vs(as_VectorRegister($tmp$$reg), as_VectorRegister($src2$$reg), + as_VectorRegister($tmp$$reg)); + __ vfmv_f_s($dst$$FloatRegister, as_VectorRegister($tmp$$reg)); + %} + ins_pipe(pipe_slow); +%} + +instruct reduce_addD_ordered(fRegD dst, fRegD src1, vReg src2, vReg tmp) %{ + predicate(n->as_Reduction()->requires_strict_order()); match(Set dst (AddReductionVD src1 src2)); effect(TEMP tmp); ins_cost(VEC_COST); - format %{ "reduce_addD $dst, $src1, $src2\t# KILL $tmp" %} + format %{ "reduce_addD_ordered $dst, $src1, $src2\t# KILL $tmp" %} ins_encode %{ __ vsetvli_helper(T_DOUBLE, Matcher::vector_length(this, $src2)); __ vfmv_s_f(as_VectorRegister($tmp$$reg), $src1$$FloatRegister); @@ -2037,6 +2063,22 @@ instruct reduce_addD(fRegD dst, fRegD src1, vReg src2, vReg tmp) %{ ins_pipe(pipe_slow); %} +instruct reduce_addD_unordered(fRegD dst, fRegD src1, vReg src2, vReg tmp) %{ + predicate(!n->as_Reduction()->requires_strict_order()); + match(Set dst (AddReductionVD src1 src2)); + effect(TEMP tmp); + ins_cost(VEC_COST); + format %{ "reduce_addD_unordered $dst, $src1, $src2\t# KILL $tmp" %} + ins_encode %{ + __ vsetvli_helper(T_DOUBLE, Matcher::vector_length(this, $src2)); + __ vfmv_s_f(as_VectorRegister($tmp$$reg), $src1$$FloatRegister); + __ vfredusum_vs(as_VectorRegister($tmp$$reg), as_VectorRegister($src2$$reg), + as_VectorRegister($tmp$$reg)); + __ vfmv_f_s($dst$$FloatRegister, as_VectorRegister($tmp$$reg)); + %} + ins_pipe(pipe_slow); +%} + // vector add reduction - predicated instruct reduce_addI_masked(iRegINoSp dst, iRegIorL2I src1, vReg src2, vRegMask_V0 v0, vReg tmp) %{ diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestVectorFPReduction.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestVectorFPReduction.java index 327e6e5e12de0..b328d4135ecfe 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestVectorFPReduction.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestVectorFPReduction.java @@ -54,7 +54,7 @@ public static void main(String[] args) { applyIfCPUFeatureAnd = {"asimd", "true", "sve", "false"}) @IR(counts = {"requires_strict_order", ">=1", IRNode.ADD_REDUCTION_VF, ">=1"}, failOn = {"no_strict_order"}, - applyIfCPUFeatureOr = {"sve", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"sve", "true", "sse2", "true", "rvv", "true"}, phase = CompilePhase.PRINT_IDEAL) private static void testAddReductionVF() { float result = 1; @@ -69,7 +69,7 @@ private static void testAddReductionVF() { applyIfCPUFeatureAnd = {"asimd", "true", "sve", "false"}) @IR(counts = {"requires_strict_order", ">=1", IRNode.ADD_REDUCTION_VD, ">=1"}, failOn = {"no_strict_order"}, - applyIfCPUFeatureOr = {"sve", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"sve", "true", "sse2", "true", "rvv", "true"}, phase = CompilePhase.PRINT_IDEAL) private static void testAddReductionVD() { double result = 1; diff --git a/test/hotspot/jtreg/compiler/vectorapi/TestVectorAddMulReduction.java b/test/hotspot/jtreg/compiler/vectorapi/TestVectorAddMulReduction.java index 549d9aa5d4946..38a2753a7eda4 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/TestVectorAddMulReduction.java +++ b/test/hotspot/jtreg/compiler/vectorapi/TestVectorAddMulReduction.java @@ -78,7 +78,7 @@ public static void testFloatAddKernel(VectorSpecies SPECIES, float[] f) { @Test @IR(counts = {IRNode.ADD_REDUCTION_VF, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=8"}, phase = CompilePhase.PRINT_IDEAL) public static void testFloatAdd_64() { @@ -88,7 +88,7 @@ public static void testFloatAdd_64() { @Test @IR(counts = {IRNode.ADD_REDUCTION_VF, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=16"}, phase = CompilePhase.PRINT_IDEAL) public static void testFloatAdd_128() { @@ -98,7 +98,7 @@ public static void testFloatAdd_128() { @Test @IR(counts = {IRNode.ADD_REDUCTION_VF, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=32"}, phase = CompilePhase.PRINT_IDEAL) public static void testFloatAdd_256() { @@ -108,7 +108,7 @@ public static void testFloatAdd_256() { @Test @IR(counts = {IRNode.ADD_REDUCTION_VF, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=64"}, phase = CompilePhase.PRINT_IDEAL) public static void testFloatAdd_512() { @@ -127,7 +127,7 @@ public static void testDoubleAddKernel(VectorSpecies SPECIES, double[] d) { @Test @IR(counts = {IRNode.ADD_REDUCTION_VD, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=16"}, phase = CompilePhase.PRINT_IDEAL) public static void testDoubleAdd_128() { @@ -137,7 +137,7 @@ public static void testDoubleAdd_128() { @Test @IR(counts = {IRNode.ADD_REDUCTION_VD, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=32"}, phase = CompilePhase.PRINT_IDEAL) public static void testDoubleAdd_256() { @@ -147,7 +147,7 @@ public static void testDoubleAdd_256() { @Test @IR(counts = {IRNode.ADD_REDUCTION_VD, ">=1", "no_strict_order", ">=1"}, failOn = {"requires_strict_order"}, - applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true"}, + applyIfCPUFeatureOr = {"asimd", "true", "sse2", "true", "rvv", "true"}, applyIf = {"MaxVectorSize", ">=64"}, phase = CompilePhase.PRINT_IDEAL) public static void testDoubleAdd_512() { From 0199fee431e0dccdd570b38595ea29c760dbed44 Mon Sep 17 00:00:00 2001 From: Martin Doerr Date: Tue, 18 Jun 2024 06:48:26 +0000 Subject: [PATCH 019/102] 8333639: ubsan: cppVtables.cpp:81:55: runtime error: index 14 out of bounds for type 'long int [1]' Reviewed-by: aboldtch, mbaesken, kbarrett --- src/hotspot/share/cds/cppVtables.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/hotspot/share/cds/cppVtables.cpp b/src/hotspot/share/cds/cppVtables.cpp index f17d94a82fdb5..6dd5e65ae4343 100644 --- a/src/hotspot/share/cds/cppVtables.cpp +++ b/src/hotspot/share/cds/cppVtables.cpp @@ -66,19 +66,17 @@ class CppVtableInfo { intptr_t _vtable_size; - intptr_t _cloned_vtable[1]; + intptr_t _cloned_vtable[1]; // Pseudo flexible array member. + static size_t cloned_vtable_offset() { return offset_of(CppVtableInfo, _cloned_vtable); } public: - static int num_slots(int vtable_size) { - return 1 + vtable_size; // Need to add the space occupied by _vtable_size; - } int vtable_size() { return int(uintx(_vtable_size)); } void set_vtable_size(int n) { _vtable_size = intptr_t(n); } - intptr_t* cloned_vtable() { return &_cloned_vtable[0]; } - void zero() { memset(_cloned_vtable, 0, sizeof(intptr_t) * vtable_size()); } + // Using _cloned_vtable[i] for i > 0 causes undefined behavior. We use address calculation instead. + intptr_t* cloned_vtable() { return (intptr_t*)((char*)this + cloned_vtable_offset()); } + void zero() { memset(cloned_vtable(), 0, sizeof(intptr_t) * vtable_size()); } // Returns the address of the next CppVtableInfo that can be placed immediately after this CppVtableInfo static size_t byte_size(int vtable_size) { - CppVtableInfo i; - return pointer_delta(&i._cloned_vtable[vtable_size], &i, sizeof(u1)); + return cloned_vtable_offset() + (sizeof(intptr_t) * vtable_size); } }; From 99fefec092f49cd759f93aa75e008cfa06d2a183 Mon Sep 17 00:00:00 2001 From: Christian Stein Date: Tue, 18 Jun 2024 07:25:17 +0000 Subject: [PATCH 020/102] 8331431: Update to use jtreg 7.4 Reviewed-by: ihse, erikj, jpai --- make/autoconf/lib-tests.m4 | 4 ++-- make/conf/github-actions.conf | 2 +- make/conf/jib-profiles.js | 4 ++-- test/hotspot/jtreg/TEST.ROOT | 4 ++-- test/jaxp/TEST.ROOT | 2 +- test/jdk/TEST.ROOT | 2 +- test/langtools/TEST.ROOT | 2 +- test/lib-test/TEST.ROOT | 4 ++-- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/make/autoconf/lib-tests.m4 b/make/autoconf/lib-tests.m4 index be099e50a0471..955b8c9ba830a 100644 --- a/make/autoconf/lib-tests.m4 +++ b/make/autoconf/lib-tests.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -28,7 +28,7 @@ ################################################################################ # Minimum supported versions -JTREG_MINIMUM_VERSION=7.3.1 +JTREG_MINIMUM_VERSION=7.4 GTEST_MINIMUM_VERSION=1.14.0 ############################################################################### diff --git a/make/conf/github-actions.conf b/make/conf/github-actions.conf index f6b00bd2a13ba..deb5e36f60572 100644 --- a/make/conf/github-actions.conf +++ b/make/conf/github-actions.conf @@ -26,7 +26,7 @@ # Versions and download locations for dependencies used by GitHub Actions (GHA) GTEST_VERSION=1.14.0 -JTREG_VERSION=7.3.1+1 +JTREG_VERSION=7.4+1 LINUX_X64_BOOT_JDK_EXT=tar.gz LINUX_X64_BOOT_JDK_URL=https://download.java.net/java/GA/jdk22/830ec9fcccef480bb3e73fb7ecafe059/36/GPL/openjdk-22_linux-x64_bin.tar.gz diff --git a/make/conf/jib-profiles.js b/make/conf/jib-profiles.js index b6f091398d5c9..30c45d4cde161 100644 --- a/make/conf/jib-profiles.js +++ b/make/conf/jib-profiles.js @@ -1184,9 +1184,9 @@ var getJibProfilesDependencies = function (input, common) { jtreg: { server: "jpg", product: "jtreg", - version: "7.3.1", + version: "7.4", build_number: "1", - file: "bundles/jtreg-7.3.1+1.zip", + file: "bundles/jtreg-7.4+1.zip", environment_name: "JT_HOME", environment_path: input.get("jtreg", "home_path") + "/bin", configure_args: "--with-jtreg=" + input.get("jtreg", "home_path"), diff --git a/test/hotspot/jtreg/TEST.ROOT b/test/hotspot/jtreg/TEST.ROOT index 4c9a28a3076bf..5f4c52186a7ef 100644 --- a/test/hotspot/jtreg/TEST.ROOT +++ b/test/hotspot/jtreg/TEST.ROOT @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -90,7 +90,7 @@ requires.properties= \ jdk.containerized # Minimum jtreg version -requiredVersion=7.3.1+1 +requiredVersion=7.4+1 # Path to libraries in the topmost test directory. This is needed so @library # does not need ../../../ notation to reach them diff --git a/test/jaxp/TEST.ROOT b/test/jaxp/TEST.ROOT index a44ad3a7c0151..8098695b80eca 100644 --- a/test/jaxp/TEST.ROOT +++ b/test/jaxp/TEST.ROOT @@ -23,7 +23,7 @@ modules=java.xml groups=TEST.groups # Minimum jtreg version -requiredVersion=7.3.1+1 +requiredVersion=7.4+1 # Path to libraries in the topmost test directory. This is needed so @library # does not need ../../ notation to reach them diff --git a/test/jdk/TEST.ROOT b/test/jdk/TEST.ROOT index bfa99c72b6646..67eceaa5a3ef5 100644 --- a/test/jdk/TEST.ROOT +++ b/test/jdk/TEST.ROOT @@ -106,7 +106,7 @@ requires.properties= \ jdk.foreign.linker # Minimum jtreg version -requiredVersion=7.3.1+1 +requiredVersion=7.4+1 # Path to libraries in the topmost test directory. This is needed so @library # does not need ../../ notation to reach them diff --git a/test/langtools/TEST.ROOT b/test/langtools/TEST.ROOT index da884dee17064..11daad5244f31 100644 --- a/test/langtools/TEST.ROOT +++ b/test/langtools/TEST.ROOT @@ -15,7 +15,7 @@ keys=intermittent randomness needs-src needs-src-jdk_javadoc groups=TEST.groups # Minimum jtreg version -requiredVersion=7.3.1+1 +requiredVersion=7.4+1 # Use new module options useNewOptions=true diff --git a/test/lib-test/TEST.ROOT b/test/lib-test/TEST.ROOT index 9b91a0dfcc155..27576a2d04019 100644 --- a/test/lib-test/TEST.ROOT +++ b/test/lib-test/TEST.ROOT @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ keys=randomness # Minimum jtreg version -requiredVersion=7.3.1+1 +requiredVersion=7.4+1 # Path to libraries in the topmost test directory. This is needed so @library # does not need ../../ notation to reach them From 0665195e59889c3f8dc5ade6521d6ca2eb4ca8b4 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Tue, 18 Jun 2024 08:27:26 +0000 Subject: [PATCH 021/102] 8334293: G1: Refactor G1ConcurrentMark::update_top_at_rebuild_start Reviewed-by: tschatzl, iwalulya --- src/hotspot/share/gc/g1/g1ConcurrentMark.inline.hpp | 9 +++------ src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp | 8 -------- src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.hpp | 3 --- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.inline.hpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.inline.hpp index 9f165cf1d22a0..7b9be48d9b5fb 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.inline.hpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.inline.hpp @@ -214,17 +214,14 @@ inline HeapWord* G1ConcurrentMark::top_at_rebuild_start(G1HeapRegion* r) const { } inline void G1ConcurrentMark::update_top_at_rebuild_start(G1HeapRegion* r) { + assert(r->is_old() || r->is_humongous(), "precondition"); + uint const region = r->hrm_index(); assert(region < _g1h->max_reserved_regions(), "Tried to access TARS for region %u out of bounds", region); assert(_top_at_rebuild_starts[region] == nullptr, "TARS for region %u has already been set to " PTR_FORMAT " should be null", region, p2i(_top_at_rebuild_starts[region])); - G1RemSetTrackingPolicy* tracker = _g1h->policy()->remset_tracker(); - if (tracker->needs_scan_for_rebuild(r)) { - _top_at_rebuild_starts[region] = r->top(); - } else { - // Leave TARS at null. - } + _top_at_rebuild_starts[region] = r->top(); } inline void G1CMTask::update_liveness(oop const obj, const size_t obj_size) { diff --git a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp index 6a97deacfab54..21b188c00c245 100644 --- a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp +++ b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.cpp @@ -30,14 +30,6 @@ #include "gc/g1/g1RemSetTrackingPolicy.hpp" #include "runtime/safepoint.hpp" -bool G1RemSetTrackingPolicy::needs_scan_for_rebuild(G1HeapRegion* r) const { - // All non-free and non-young regions need to be scanned for references; - // At every gc we gather references to other regions in young. - // Free regions trivially do not need scanning because they do not contain live - // objects. - return !(r->is_young() || r->is_free()); -} - void G1RemSetTrackingPolicy::update_at_allocate(G1HeapRegion* r) { assert(r->is_young() || r->is_humongous() || r->is_old(), "Region %u with unexpected heap region type %s", r->hrm_index(), r->get_type_str()); diff --git a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.hpp b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.hpp index 7560b7260801a..a89c24e6f4e96 100644 --- a/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.hpp +++ b/src/hotspot/share/gc/g1/g1RemSetTrackingPolicy.hpp @@ -34,9 +34,6 @@ // set is complete. class G1RemSetTrackingPolicy : public CHeapObj { public: - // Do we need to scan the given region to get all outgoing references for remembered - // set rebuild? - bool needs_scan_for_rebuild(G1HeapRegion* r) const; // Update remembered set tracking state at allocation of the region. May be // called at any time. The caller makes sure that the changes to the remembered // set state are visible to other threads. From b42fe86e817ec6975c869f46922797f546734ee0 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Tue, 18 Jun 2024 08:33:02 +0000 Subject: [PATCH 022/102] 8334097: Parallel: Obsolete HeapFirstMaximumCompactionCount Reviewed-by: tschatzl, dholmes --- src/hotspot/share/gc/parallel/parallel_globals.hpp | 4 ---- src/hotspot/share/gc/parallel/psParallelCompact.cpp | 3 +-- src/hotspot/share/runtime/arguments.cpp | 2 ++ 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/gc/parallel/parallel_globals.hpp b/src/hotspot/share/gc/parallel/parallel_globals.hpp index 291dd5d73c65b..e3b9660b06911 100644 --- a/src/hotspot/share/gc/parallel/parallel_globals.hpp +++ b/src/hotspot/share/gc/parallel/parallel_globals.hpp @@ -36,10 +36,6 @@ "any dead space)") \ range(0, max_uintx) \ \ - product(uintx, HeapFirstMaximumCompactionCount, 3, \ - "The collection count for the first maximum compaction") \ - range(0, max_uintx) \ - \ product(bool, UseMaximumCompactionOnSystemGC, true, \ "Use maximum compaction in the Parallel Old garbage collector " \ "for a system GC") \ diff --git a/src/hotspot/share/gc/parallel/psParallelCompact.cpp b/src/hotspot/share/gc/parallel/psParallelCompact.cpp index e0d174dcc6ace..6c08503438423 100644 --- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp +++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp @@ -837,8 +837,7 @@ bool PSParallelCompact::reassess_maximum_compaction(bool maximum_compaction, const uint total_invocations = ParallelScavengeHeap::heap()->total_full_collections(); assert(total_invocations >= _maximum_compaction_gc_num, "sanity"); const size_t gcs_since_max = total_invocations - _maximum_compaction_gc_num; - const bool is_interval_ended = gcs_since_max > HeapMaximumCompactionInterval - || total_invocations == HeapFirstMaximumCompactionCount; + const bool is_interval_ended = gcs_since_max > HeapMaximumCompactionInterval; // If all regions in old-gen are full const bool is_region_full = diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 38f63354735f6..a56e1fcb9988a 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -519,6 +519,8 @@ static SpecialFlag const special_jvm_flags[] = { { "UseRTMDeopt", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "RTMRetryCount", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, #endif // X86 + + { "HeapFirstMaximumCompactionCount", JDK_Version::undefined(), JDK_Version::jdk(24), JDK_Version::jdk(25) }, #ifdef ASSERT { "DummyObsoleteTestFlag", JDK_Version::undefined(), JDK_Version::jdk(18), JDK_Version::undefined() }, #endif From d4c13737171b7ab7a8a29a69fa9965f8363c5aee Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Tue, 18 Jun 2024 08:42:44 +0000 Subject: [PATCH 023/102] 8334043: VerifyError when inner class is accessed in prologue Reviewed-by: mcimadamore --- .../classes/com/sun/tools/javac/comp/Resolve.java | 15 ++++++++++++++- .../tools/javac/SuperInit/EarlyAssignments.java | 11 +++++++++++ .../tools/javac/SuperInit/EarlyAssignments.out | 3 ++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java index ac8374a9a5553..3dcac0b26461f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java @@ -3861,7 +3861,20 @@ private boolean isAllowedEarlyReference(Env env, VarSymbol v) { // Get the symbol's qualifier, if any JCExpression lhs = TreeInfo.skipParens(assign.lhs); - JCExpression base = lhs instanceof JCFieldAccess select ? select.selected : null; + JCExpression base; + switch (lhs.getTag()) { + case IDENT: + base = null; + break; + case SELECT: + JCFieldAccess select = (JCFieldAccess)lhs; + base = select.selected; + if (!TreeInfo.isExplicitThisReference(types, (ClassType)env.enclClass.type, base)) + return false; + break; + default: + return false; + } // If an early reference, the field must not be declared in a superclass if (isEarlyReference(env, base, v) && v.owner != env.enclClass.sym) diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignments.java b/test/langtools/tools/javac/SuperInit/EarlyAssignments.java index 89a13ccf0ffb5..c3cad5d7016ca 100644 --- a/test/langtools/tools/javac/SuperInit/EarlyAssignments.java +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignments.java @@ -158,4 +158,15 @@ public Inner7() { super(); } } + + public static class Inner8 { + class Inner8a { + int x; + } + + public Inner8() { + this.new Inner8a().x = 1; // FAIL - illegal early access + super(); + } + } } diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignments.out b/test/langtools/tools/javac/SuperInit/EarlyAssignments.out index 81b4f20b50575..38182c2d3126a 100644 --- a/test/langtools/tools/javac/SuperInit/EarlyAssignments.out +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignments.out @@ -23,6 +23,7 @@ EarlyAssignments.java:134:17: compiler.err.cant.ref.before.ctor.called: super EarlyAssignments.java:139:23: compiler.err.cant.ref.before.ctor.called: this EarlyAssignments.java:148:13: compiler.err.cant.assign.initialized.before.ctor.called: x EarlyAssignments.java:157:13: compiler.err.cant.assign.val.to.var: final, x +EarlyAssignments.java:168:13: compiler.err.cant.ref.before.ctor.called: this - compiler.note.preview.filename: EarlyAssignments.java, DEFAULT - compiler.note.preview.recompile -25 errors +26 errors From 614b99a8f8360dc0a6a018f06fb336c6883f0f4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Casta=C3=B1eda=20Lozano?= Date: Tue, 18 Jun 2024 09:48:31 +0000 Subject: [PATCH 024/102] 8334442: Temporarily disable return type assertion to reduce noise in testing Reviewed-by: thartmann, chagedorn --- src/hotspot/share/opto/parse1.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/hotspot/share/opto/parse1.cpp b/src/hotspot/share/opto/parse1.cpp index 4dc3ac3704231..3989020451eb5 100644 --- a/src/hotspot/share/opto/parse1.cpp +++ b/src/hotspot/share/opto/parse1.cpp @@ -1057,16 +1057,6 @@ void Parse::do_exits() { // loading. It could also be due to an error, so mark this method as not compilable because // otherwise this could lead to an infinite compile loop. // In any case, this code path is rarely (and never in my testing) reached. -#ifdef ASSERT - tty->print_cr("# Can't determine return type."); - tty->print_cr("# exit control"); - _exits.control()->dump(2); - tty->print_cr("# ret phi type"); - _gvn.type(ret_phi)->dump(); - tty->print_cr("# ret phi"); - ret_phi->dump(2); -#endif // ASSERT - assert(false, "Can't determine return type."); C->record_method_not_compilable("Can't determine return type."); return; } From 472b935b442f7f925b665c7de91eda77f3dcbe8b Mon Sep 17 00:00:00 2001 From: SendaoYan Date: Tue, 18 Jun 2024 10:24:43 +0000 Subject: [PATCH 025/102] 8334332: TestIOException.java fails if run by root Reviewed-by: prappo --- .../testIOException/TestIOException.java | 60 ++++++------------- 1 file changed, 19 insertions(+), 41 deletions(-) diff --git a/test/langtools/jdk/javadoc/doclet/testIOException/TestIOException.java b/test/langtools/jdk/javadoc/doclet/testIOException/TestIOException.java index 9127cdf86bbf4..5dd81b62d336f 100644 --- a/test/langtools/jdk/javadoc/doclet/testIOException/TestIOException.java +++ b/test/langtools/jdk/javadoc/doclet/testIOException/TestIOException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,9 @@ /* * @test - * @bug 8164130 + * @bug 8164130 8334332 * @summary test IOException handling - * @library ../../lib + * @library ../../lib /test/lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build javadoc.tester.* * @run main TestIOException @@ -39,6 +39,7 @@ import java.util.Map; import javadoc.tester.JavadocTester; +import jtreg.SkippedException; /** * Tests IO Exception handling. @@ -61,16 +62,13 @@ public static void main(String... args) throws Exception { public void testReadOnlyDirectory() { File outDir = new File("out1"); if (!outDir.mkdir()) { - throw error(outDir, "Cannot create directory"); + throw skip(outDir, "Cannot create directory"); } if (!outDir.setReadOnly()) { - if (skip(outDir)) { - return; - } - throw error(outDir, "could not set directory read-only"); + throw skip(outDir, "could not set directory read-only"); } if (outDir.canWrite()) { - throw error(outDir, "directory is writable"); + throw skip(outDir, "directory is writable"); } try { @@ -93,15 +91,15 @@ public void testReadOnlyDirectory() { public void testReadOnlyFile() throws Exception { File outDir = new File("out2"); if (!outDir.mkdir()) { - throw error(outDir, "Cannot create directory"); + throw skip(outDir, "Cannot create directory"); } File index = new File(outDir, "index.html"); try (FileWriter fw = new FileWriter(index)) { } if (!index.setReadOnly()) { - throw error(index, "could not set index read-only"); + throw skip(index, "could not set index read-only"); } if (index.canWrite()) { - throw error(index, "index is writable"); + throw skip(index, "index is writable"); } try { @@ -139,16 +137,13 @@ public void testReadOnlySubdirectory() throws Exception { File outDir = new File("out3"); File pkgOutDir = new File(outDir, "p"); if (!pkgOutDir.mkdirs()) { - throw error(pkgOutDir, "Cannot create directory"); + throw skip(pkgOutDir, "Cannot create directory"); } if (!pkgOutDir.setReadOnly()) { - if (skip(pkgOutDir)) { - return; - } - throw error(pkgOutDir, "could not set directory read-only"); + throw skip(pkgOutDir, "could not set directory read-only"); } if (pkgOutDir.canWrite()) { - throw error(pkgOutDir, "directory is writable"); + throw skip(pkgOutDir, "directory is writable"); } // run javadoc and check results @@ -192,16 +187,13 @@ public void testReadOnlyDocFilesDir() throws Exception { File pkgOutDir = new File(outDir, "p"); File docFilesOutDir = new File(pkgOutDir, "doc-files"); if (!docFilesOutDir.mkdirs()) { - throw error(docFilesOutDir, "Cannot create directory"); + throw skip(docFilesOutDir, "Cannot create directory"); } if (!docFilesOutDir.setReadOnly()) { - if (skip(docFilesOutDir)) { - return; - } - throw error(docFilesOutDir, "could not set directory read-only"); + throw skip(docFilesOutDir, "could not set directory read-only"); } if (docFilesOutDir.canWrite()) { - throw error(docFilesOutDir, "directory is writable"); + throw skip(docFilesOutDir, "directory is writable"); } try { @@ -219,10 +211,11 @@ public void testReadOnlyDocFilesDir() throws Exception { } } - private Error error(File f, String message) { + private Error skip(File f, String message) { + out.print(System.getProperty("user.name")); out.println(f + ": " + message); showAllAttributes(f.toPath()); - throw new Error(f + ": " + message); + throw new SkippedException(f + ": " + message); } private void showAllAttributes(Path p) { @@ -242,20 +235,5 @@ private void showAttributes(Path p, String attributes) { out.println("Error accessing attributes " + attributes + ": " + t); } } - - private boolean skip(File dir) { - if (isWindows()) { - showAllAttributes(dir.toPath()); - out.println("Windows: cannot set directory read only:" + dir); - out.println("TEST CASE SKIPPED"); - return true; - } else { - return false; - } - } - - private boolean isWindows() { - return System.getProperty("os.name").toLowerCase(Locale.US).startsWith("windows"); - } } From fa401f37dffe7bde27e562065dfd24381d5237cc Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Tue, 18 Jun 2024 12:08:57 +0000 Subject: [PATCH 026/102] 8333805: Replaying compilation with null static final fields results in a crash Reviewed-by: thartmann, dlong --- src/hotspot/share/ci/ciInstanceKlass.cpp | 10 ++- src/hotspot/share/ci/ciReplay.cpp | 87 ++++++++++--------- .../ciReplay/TestNullStaticField.java | 82 +++++++++++++++++ 3 files changed, 135 insertions(+), 44 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/ciReplay/TestNullStaticField.java diff --git a/src/hotspot/share/ci/ciInstanceKlass.cpp b/src/hotspot/share/ci/ciInstanceKlass.cpp index fa084e2287fbe..240bb25ae3aa8 100644 --- a/src/hotspot/share/ci/ciInstanceKlass.cpp +++ b/src/hotspot/share/ci/ciInstanceKlass.cpp @@ -661,7 +661,8 @@ class StaticFinalFieldPrinter : public FieldClosure { ResourceMark rm; oop mirror = fd->field_holder()->java_mirror(); _out->print("staticfield %s %s %s ", _holder, fd->name()->as_quoted_ascii(), fd->signature()->as_quoted_ascii()); - switch (fd->field_type()) { + BasicType field_type = fd->field_type(); + switch (field_type) { case T_BYTE: _out->print_cr("%d", mirror->byte_field(fd->offset())); break; case T_BOOLEAN: _out->print_cr("%d", mirror->bool_field(fd->offset())); break; case T_SHORT: _out->print_cr("%d", mirror->short_field(fd->offset())); break; @@ -682,9 +683,12 @@ class StaticFinalFieldPrinter : public FieldClosure { case T_OBJECT: { oop value = mirror->obj_field_acquire(fd->offset()); if (value == nullptr) { - _out->print_cr("null"); + if (field_type == T_ARRAY) { + _out->print("%d", -1); + } + _out->cr(); } else if (value->is_instance()) { - assert(fd->field_type() == T_OBJECT, ""); + assert(field_type == T_OBJECT, ""); if (value->is_a(vmClasses::String_klass())) { const char* ascii_value = java_lang_String::as_quoted_ascii(value); _out->print_cr("\"%s\"", (ascii_value != nullptr) ? ascii_value : ""); diff --git a/src/hotspot/share/ci/ciReplay.cpp b/src/hotspot/share/ci/ciReplay.cpp index 5fa30f864114f..3ed71806b078b 100644 --- a/src/hotspot/share/ci/ciReplay.cpp +++ b/src/hotspot/share/ci/ciReplay.cpp @@ -1056,46 +1056,48 @@ class CompileReplay : public StackObj { int length = parse_int("array length"); oop value = nullptr; - if (field_signature[1] == JVM_SIGNATURE_ARRAY) { - // multi dimensional array - ArrayKlass* kelem = (ArrayKlass *)parse_klass(CHECK); - if (kelem == nullptr) { - return; - } - int rank = 0; - while (field_signature[rank] == JVM_SIGNATURE_ARRAY) { - rank++; - } - jint* dims = NEW_RESOURCE_ARRAY(jint, rank); - dims[0] = length; - for (int i = 1; i < rank; i++) { - dims[i] = 1; // These aren't relevant to the compiler - } - value = kelem->multi_allocate(rank, dims, CHECK); - } else { - if (strcmp(field_signature, "[B") == 0) { - value = oopFactory::new_byteArray(length, CHECK); - } else if (strcmp(field_signature, "[Z") == 0) { - value = oopFactory::new_boolArray(length, CHECK); - } else if (strcmp(field_signature, "[C") == 0) { - value = oopFactory::new_charArray(length, CHECK); - } else if (strcmp(field_signature, "[S") == 0) { - value = oopFactory::new_shortArray(length, CHECK); - } else if (strcmp(field_signature, "[F") == 0) { - value = oopFactory::new_floatArray(length, CHECK); - } else if (strcmp(field_signature, "[D") == 0) { - value = oopFactory::new_doubleArray(length, CHECK); - } else if (strcmp(field_signature, "[I") == 0) { - value = oopFactory::new_intArray(length, CHECK); - } else if (strcmp(field_signature, "[J") == 0) { - value = oopFactory::new_longArray(length, CHECK); - } else if (field_signature[0] == JVM_SIGNATURE_ARRAY && - field_signature[1] == JVM_SIGNATURE_CLASS) { - parse_klass(CHECK); // eat up the array class name - Klass* kelem = resolve_klass(field_signature + 1, CHECK); - value = oopFactory::new_objArray(kelem, length, CHECK); + if (length != -1) { + if (field_signature[1] == JVM_SIGNATURE_ARRAY) { + // multi dimensional array + ArrayKlass* kelem = (ArrayKlass *)parse_klass(CHECK); + if (kelem == nullptr) { + return; + } + int rank = 0; + while (field_signature[rank] == JVM_SIGNATURE_ARRAY) { + rank++; + } + jint* dims = NEW_RESOURCE_ARRAY(jint, rank); + dims[0] = length; + for (int i = 1; i < rank; i++) { + dims[i] = 1; // These aren't relevant to the compiler + } + value = kelem->multi_allocate(rank, dims, CHECK); } else { - report_error("unhandled array staticfield"); + if (strcmp(field_signature, "[B") == 0) { + value = oopFactory::new_byteArray(length, CHECK); + } else if (strcmp(field_signature, "[Z") == 0) { + value = oopFactory::new_boolArray(length, CHECK); + } else if (strcmp(field_signature, "[C") == 0) { + value = oopFactory::new_charArray(length, CHECK); + } else if (strcmp(field_signature, "[S") == 0) { + value = oopFactory::new_shortArray(length, CHECK); + } else if (strcmp(field_signature, "[F") == 0) { + value = oopFactory::new_floatArray(length, CHECK); + } else if (strcmp(field_signature, "[D") == 0) { + value = oopFactory::new_doubleArray(length, CHECK); + } else if (strcmp(field_signature, "[I") == 0) { + value = oopFactory::new_intArray(length, CHECK); + } else if (strcmp(field_signature, "[J") == 0) { + value = oopFactory::new_longArray(length, CHECK); + } else if (field_signature[0] == JVM_SIGNATURE_ARRAY && + field_signature[1] == JVM_SIGNATURE_CLASS) { + Klass* actual_array_klass = parse_klass(CHECK); + Klass* kelem = ObjArrayKlass::cast(actual_array_klass)->element_klass(); + value = oopFactory::new_objArray(kelem, length, CHECK); + } else { + report_error("unhandled array staticfield"); + } } } java_mirror->obj_field_put(fd.offset(), value); @@ -1133,8 +1135,11 @@ class CompileReplay : public StackObj { Handle value = java_lang_String::create_from_str(string_value, CHECK); java_mirror->obj_field_put(fd.offset(), value()); } else if (field_signature[0] == JVM_SIGNATURE_CLASS) { - Klass* k = resolve_klass(string_value, CHECK); - oop value = InstanceKlass::cast(k)->allocate_instance(CHECK); + oop value = nullptr; + if (string_value != nullptr) { + Klass* k = resolve_klass(string_value, CHECK); + value = InstanceKlass::cast(k)->allocate_instance(CHECK); + } java_mirror->obj_field_put(fd.offset(), value); } else { report_error("unhandled staticfield"); diff --git a/test/hotspot/jtreg/compiler/ciReplay/TestNullStaticField.java b/test/hotspot/jtreg/compiler/ciReplay/TestNullStaticField.java new file mode 100644 index 0000000000000..47a78ad5e446e --- /dev/null +++ b/test/hotspot/jtreg/compiler/ciReplay/TestNullStaticField.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2024, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8333805 + * @library / /test/lib + * @summary Replaying compilation with null static final fields results in a crash + * @requires vm.flightRecorder != true & vm.compMode != "Xint" & vm.compMode != "Xcomp" & vm.debug == true & vm.compiler2.enabled + * @modules java.base/jdk.internal.misc + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * compiler.ciReplay.TestNullStaticField + */ + +package compiler.ciReplay; + +public class TestNullStaticField extends DumpReplayBase { + + public static void main(String[] args) { + new TestNullStaticField().runTest(TIERED_DISABLED_VM_OPTION); + } + + @Override + public void testAction() { + positiveTest(TIERED_DISABLED_VM_OPTION, "-XX:+ReplayIgnoreInitErrors"); + } + + @Override + public String getTestClass() { + return TestClassNullStaticField.class.getName(); + } + +} + +class TestClassNullStaticField { + + static final Object[] staticNullArrayField = null; + static final Object[][] staticNullMultiArrayField = null; + static final Object staticNullObjectField = null; + static final String staticNullStringField = null; + static final int[] staticNullIntArrayField = null; + static final Object[] staticNotNullArrayField = new A[10]; + static final Object[][] staticNotNullMultiArrayField = new A[10][10]; + static final Object staticNotNullObjectField = new A(); + static final String staticNotNullStringField = "Not null"; + static final int[] staticNotNullIntArrayField = new int[10]; + + public static void main(String[] args) { + for (int i = 0; i < 20_000; i++) { + test(); + } + } + public static void test() { + + } + + private static class A { + } +} + From e681b4e9b3ae24f45d8c6adab4105df39e6b8a92 Mon Sep 17 00:00:00 2001 From: nibjen Date: Tue, 18 Jun 2024 13:28:37 +0000 Subject: [PATCH 027/102] 8332524: Instead of printing "TLSv1.3," it is showing "TLS13" Reviewed-by: mullan --- .../share/classes/sun/security/ssl/ClientHello.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/sun/security/ssl/ClientHello.java b/src/java.base/share/classes/sun/security/ssl/ClientHello.java index 091bfa8986ea4..babf2bb452da4 100644 --- a/src/java.base/share/classes/sun/security/ssl/ClientHello.java +++ b/src/java.base/share/classes/sun/security/ssl/ClientHello.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -903,8 +903,8 @@ private ProtocolVersion negotiateProtocol( throw context.conContext.fatal(Alert.PROTOCOL_VERSION, "The client supported protocol versions " + Arrays.toString( ProtocolVersion.toStringArray(clientSupportedVersions)) + - " are not accepted by server preferences " + - context.activeProtocols); + " are not accepted by server preferences " + Arrays.toString( + ProtocolVersion.toStringArray(context.activeProtocols))); } } From 91bd85d65dff9cea91b88da7ef241be5c7b85f94 Mon Sep 17 00:00:00 2001 From: Chen Liang Date: Tue, 18 Jun 2024 13:51:50 +0000 Subject: [PATCH 028/102] 8333854: IllegalAccessError with proxies after JDK-8332457 Reviewed-by: redestad, asotona --- .../java/lang/reflect/ProxyGenerator.java | 248 ++++++++++++------ .../Proxy/NonPublicMethodTypeTest.java | 59 +++++ 2 files changed, 230 insertions(+), 77 deletions(-) create mode 100644 test/jdk/java/lang/reflect/Proxy/NonPublicMethodTypeTest.java diff --git a/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java b/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java index a484c19120662..6c82a6ecb6f61 100644 --- a/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java +++ b/src/java.base/share/classes/java/lang/reflect/ProxyGenerator.java @@ -47,13 +47,10 @@ import static java.lang.classfile.ClassFile.*; import java.lang.classfile.attribute.StackMapFrameInfo; import java.lang.classfile.attribute.StackMapTableAttribute; -import java.lang.constant.ConstantDescs; + import static java.lang.constant.ConstantDescs.*; import static jdk.internal.constant.ConstantUtils.*; -import java.lang.constant.DirectMethodHandleDesc; -import java.lang.constant.DynamicConstantDesc; - /** * ProxyGenerator contains the code to generate a dynamic proxy class * for the java.lang.reflect.Proxy API. @@ -67,7 +64,10 @@ final class ProxyGenerator { ClassFile.of(ClassFile.StackMapsOption.DROP_STACK_MAPS); private static final ClassDesc + CD_ClassLoader = ReferenceClassDescImpl.ofValidated("Ljava/lang/ClassLoader;"), CD_Class_array = ReferenceClassDescImpl.ofValidated("[Ljava/lang/Class;"), + CD_ClassNotFoundException = ReferenceClassDescImpl.ofValidated("Ljava/lang/ClassNotFoundException;"), + CD_NoClassDefFoundError = ReferenceClassDescImpl.ofValidated("Ljava/lang/NoClassDefFoundError;"), CD_IllegalAccessException = ReferenceClassDescImpl.ofValidated("Ljava/lang/IllegalAccessException;"), CD_InvocationHandler = ReferenceClassDescImpl.ofValidated("Ljava/lang/reflect/InvocationHandler;"), CD_Method = ReferenceClassDescImpl.ofValidated("Ljava/lang/reflect/Method;"), @@ -83,8 +83,9 @@ final class ProxyGenerator { MTD_void_String = MethodTypeDescImpl.ofValidated(CD_void, CD_String), MTD_void_Throwable = MethodTypeDescImpl.ofValidated(CD_void, CD_Throwable), MTD_Class = MethodTypeDescImpl.ofValidated(CD_Class), - MTD_Class_array = MethodTypeDescImpl.ofValidated(CD_Class_array), - MTD_Method_String_Class_array = MethodTypeDescImpl.ofValidated(CD_Method, ConstantDescs.CD_String, CD_Class_array), + MTD_Class_String_boolean_ClassLoader = MethodTypeDescImpl.ofValidated(CD_Class, CD_String, CD_boolean, CD_ClassLoader), + MTD_ClassLoader = MethodTypeDescImpl.ofValidated(CD_ClassLoader), + MTD_Method_String_Class_array = MethodTypeDescImpl.ofValidated(CD_Method, CD_String, CD_Class_array), MTD_MethodHandles$Lookup = MethodTypeDescImpl.ofValidated(CD_MethodHandles_Lookup), MTD_MethodHandles$Lookup_MethodHandles$Lookup = MethodTypeDescImpl.ofValidated(CD_MethodHandles_Lookup, CD_MethodHandles_Lookup), MTD_Object_Object_Method_ObjectArray = MethodTypeDescImpl.ofValidated(CD_Object, CD_Object, CD_Method, CD_Object_array), @@ -109,34 +110,33 @@ final class ProxyGenerator { "jdk.proxy.ProxyGenerator.saveGeneratedFiles")); /* Preloaded ProxyMethod objects for methods in java.lang.Object */ - private static final ProxyMethod HASH_CODE_METHOD; - private static final ProxyMethod EQUALS_METHOD; - private static final ProxyMethod TO_STRING_METHOD; + private static final Method OBJECT_HASH_CODE_METHOD; + private static final Method OBJECT_EQUALS_METHOD; + private static final Method OBJECT_TO_STRING_METHOD; static { try { - HASH_CODE_METHOD = new ProxyMethod(Object.class.getMethod("hashCode")); - EQUALS_METHOD = new ProxyMethod(Object.class.getMethod("equals", Object.class)); - TO_STRING_METHOD = new ProxyMethod(Object.class.getMethod("toString")); + OBJECT_HASH_CODE_METHOD = Object.class.getMethod("hashCode"); + OBJECT_EQUALS_METHOD = Object.class.getMethod("equals", Object.class); + OBJECT_TO_STRING_METHOD = Object.class.getMethod("toString"); } catch (NoSuchMethodException e) { throw new NoSuchMethodError(e.getMessage()); } } private final ConstantPoolBuilder cp; - private final List throwableStack; + private final List classLoaderLocal, throwableStack; private final NameAndTypeEntry exInit; - private final ClassEntry object, proxy, ute; + private final ClassEntry objectCE, proxyCE, uteCE, classCE; private final FieldRefEntry handlerField; - private final InterfaceMethodRefEntry invoke; - private final MethodRefEntry uteInit; - private final DirectMethodHandleDesc bsm; + private final InterfaceMethodRefEntry invocationHandlerInvoke; + private final MethodRefEntry uteInit, classGetMethod, classForName, throwableGetMessage; /** - * Name of proxy class + * ClassEntry for this proxy class */ - private final ClassEntry classEntry; + private final ClassEntry thisClassCE; /** * Proxy interfaces @@ -155,6 +155,12 @@ final class ProxyGenerator { */ private final Map> proxyMethods = new LinkedHashMap<>(); + /** + * Ordinal of next ProxyMethod object added to proxyMethods. + * Indexes are reserved for hashcode(0), equals(1), toString(2). + */ + private int proxyMethodCount = 3; + /** * Construct a ProxyGenerator to generate a proxy class with the * specified name and for the given interfaces. @@ -165,18 +171,23 @@ final class ProxyGenerator { private ProxyGenerator(String className, List> interfaces, int accessFlags) { this.cp = ConstantPoolBuilder.of(); - this.classEntry = cp.classEntry(ConstantUtils.binaryNameToDesc(className)); + this.thisClassCE = cp.classEntry(ConstantUtils.binaryNameToDesc(className)); this.interfaces = interfaces; this.accessFlags = accessFlags; - this.throwableStack = List.of(StackMapFrameInfo.ObjectVerificationTypeInfo.of(cp.classEntry(CD_Throwable))); + var throwable = cp.classEntry(CD_Throwable); + this.classLoaderLocal = List.of(StackMapFrameInfo.ObjectVerificationTypeInfo.of(cp.classEntry(CD_ClassLoader))); + this.throwableStack = List.of(StackMapFrameInfo.ObjectVerificationTypeInfo.of(throwable)); this.exInit = cp.nameAndTypeEntry(INIT_NAME, MTD_void_String); - this.object = cp.classEntry(CD_Object); - this.proxy = cp.classEntry(CD_Proxy); - this.handlerField = cp.fieldRefEntry(proxy, cp.nameAndTypeEntry(NAME_HANDLER_FIELD, CD_InvocationHandler)); - this.invoke = cp.interfaceMethodRefEntry(CD_InvocationHandler, "invoke", MTD_Object_Object_Method_ObjectArray); - this.ute = cp.classEntry(CD_UndeclaredThrowableException); - this.uteInit = cp.methodRefEntry(ute, cp.nameAndTypeEntry(INIT_NAME, MTD_void_Throwable)); - this.bsm = ConstantDescs.ofConstantBootstrap(classEntry.asSymbol(), "$getMethod", CD_Method, CD_Class, CD_String, CD_MethodType); + this.objectCE = cp.classEntry(CD_Object); + this.proxyCE = cp.classEntry(CD_Proxy); + this.classCE = cp.classEntry(CD_Class); + this.handlerField = cp.fieldRefEntry(proxyCE, cp.nameAndTypeEntry(NAME_HANDLER_FIELD, CD_InvocationHandler)); + this.invocationHandlerInvoke = cp.interfaceMethodRefEntry(CD_InvocationHandler, "invoke", MTD_Object_Object_Method_ObjectArray); + this.uteCE = cp.classEntry(CD_UndeclaredThrowableException); + this.uteInit = cp.methodRefEntry(uteCE, cp.nameAndTypeEntry(INIT_NAME, MTD_void_Throwable)); + this.classGetMethod = cp.methodRefEntry(classCE, cp.nameAndTypeEntry("getMethod", MTD_Method_String_Class_array)); + this.classForName = cp.methodRefEntry(classCE, cp.nameAndTypeEntry("forName", MTD_Class_String_boolean_ClassLoader)); + this.throwableGetMessage = cp.methodRefEntry(throwable, cp.nameAndTypeEntry("getMessage", MTD_String)); } /** @@ -435,9 +446,9 @@ private byte[] generateClassFile() { * java.lang.Object take precedence over duplicate methods in the * proxy interfaces. */ - addProxyMethod(HASH_CODE_METHOD); - addProxyMethod(EQUALS_METHOD); - addProxyMethod(TO_STRING_METHOD); + addProxyMethod(new ProxyMethod(OBJECT_HASH_CODE_METHOD, "m0")); + addProxyMethod(new ProxyMethod(OBJECT_EQUALS_METHOD, "m1")); + addProxyMethod(new ProxyMethod(OBJECT_TO_STRING_METHOD, "m2")); /* * Accumulate all of the methods from the proxy interfaces. @@ -458,20 +469,23 @@ private byte[] generateClassFile() { checkReturnTypes(sigmethods); } - return CF_CONTEXT.build(classEntry, cp, clb -> { - clb.withSuperclass(proxy); + return CF_CONTEXT.build(thisClassCE, cp, clb -> { + clb.withSuperclass(proxyCE); clb.withFlags(accessFlags); clb.withInterfaces(toClassEntries(cp, interfaces)); generateConstructor(clb); for (List sigmethods : proxyMethods.values()) { for (ProxyMethod pm : sigmethods) { + // add static field for the Method object + clb.withField(pm.methodFieldName, CD_Method, ACC_PRIVATE | ACC_STATIC | ACC_FINAL); + // Generate code for proxy method - pm.generateMethod(this, clb); + pm.generateMethod(clb); } } - generateBootstrapMethod(clb); + generateStaticInitializer(clb); generateLookupAccessor(clb); }); } @@ -514,7 +528,7 @@ private void addProxyMethod(Method m, Class fromClass) { } } sigmethods.add(new ProxyMethod(m, sig, m.getSharedParameterTypes(), returnType, - exceptionTypes, fromClass)); + exceptionTypes, fromClass, "m" + proxyMethodCount++)); } /** @@ -536,32 +550,56 @@ private void generateConstructor(ClassBuilder clb) { clb.withMethodBody(INIT_NAME, MTD_void_InvocationHandler, ACC_PUBLIC, cob -> cob .aload(0) .aload(1) - .invokespecial(cp.methodRefEntry(proxy, cp.nameAndTypeEntry(INIT_NAME, MTD_void_InvocationHandler))) + .invokespecial(cp.methodRefEntry(proxyCE, + cp.nameAndTypeEntry(INIT_NAME, MTD_void_InvocationHandler))) .return_()); } /** - * Generate CONDY bootstrap method for the proxy class to retrieve {@link Method} instances. + * Generate the class initializer. + * Discussion: Currently, for Proxy to work with SecurityManager, + * we rely on the parameter classes of the methods to be computed + * from Proxy instead of via user code paths like bootstrap method + * lazy evaluation. That might change if we can pass in the live + * Method objects directly.. */ - private void generateBootstrapMethod(ClassBuilder clb) { - clb.withMethodBody(bsm.methodName(), bsm.invocationType(), ClassFile.ACC_PRIVATE | ClassFile.ACC_STATIC, cob -> { - cob.aload(3) //interface Class - .aload(4) //interface method name String - .aload(5) //interface MethodType - .invokevirtual(CD_MethodType, "parameterArray", MTD_Class_array) - .invokevirtual(ConstantDescs.CD_Class, "getMethod", MTD_Method_String_Class_array) - .areturn(); - Label failLabel = cob.newBoundLabel(); - ClassEntry nsme = cp.classEntry(CD_NoSuchMethodError); - cob.exceptionCatch(cob.startLabel(), failLabel, failLabel, CD_NoSuchMethodException) - .new_(nsme) + private void generateStaticInitializer(ClassBuilder clb) { + clb.withMethodBody(CLASS_INIT_NAME, MTD_void, ACC_STATIC, cob -> { + // Put ClassLoader at local variable index 0, used by + // Class.forName(String, boolean, ClassLoader) calls + cob.ldc(thisClassCE) + .invokevirtual(cp.methodRefEntry(classCE, + cp.nameAndTypeEntry("getClassLoader", MTD_ClassLoader))) + .astore(0); + var ts = cob.newBoundLabel(); + for (List sigmethods : proxyMethods.values()) { + for (ProxyMethod pm : sigmethods) { + pm.codeFieldInitialization(cob); + } + } + cob.return_(); + var c1 = cob.newBoundLabel(); + var nsmError = cp.classEntry(CD_NoSuchMethodError); + cob.exceptionCatch(ts, c1, c1, CD_NoSuchMethodException) + .new_(nsmError) + .dup_x1() + .swap() + .invokevirtual(throwableGetMessage) + .invokespecial(cp.methodRefEntry(nsmError, exInit)) + .athrow(); + var c2 = cob.newBoundLabel(); + var ncdfError = cp.classEntry(CD_NoClassDefFoundError); + cob.exceptionCatch(ts, c1, c2, CD_ClassNotFoundException) + .new_(ncdfError) .dup_x1() .swap() - .invokevirtual(cp.methodRefEntry(CD_Throwable, "getMessage", MTD_String)) - .invokespecial(cp.methodRefEntry(nsme, exInit)) - .athrow() - .with(StackMapTableAttribute.of(List.of( - StackMapFrameInfo.of(failLabel, List.of(), throwableStack)))); + .invokevirtual(throwableGetMessage) + .invokespecial(cp.methodRefEntry(ncdfError, exInit)) + .athrow(); + cob.with(StackMapTableAttribute.of(List.of( + StackMapFrameInfo.of(c1, classLoaderLocal, throwableStack), + StackMapFrameInfo.of(c2, classLoaderLocal, throwableStack)))); + }); } @@ -581,7 +619,7 @@ private void generateLookupAccessor(ClassBuilder clb) { ClassEntry iae = cp.classEntry(CD_IllegalAccessException); cob.aload(cob.parameterSlot(0)) .invokevirtual(cp.methodRefEntry(mhl, cp.nameAndTypeEntry("lookupClass", MTD_Class))) - .ldc(proxy) + .ldc(proxyCE) .if_acmpne(failLabel) .aload(cob.parameterSlot(0)) .invokevirtual(cp.methodRefEntry(mhl, cp.nameAndTypeEntry("hasFullPrivilegeAccess", MTD_boolean))) @@ -607,24 +645,29 @@ private void generateLookupAccessor(ClassBuilder clb) { * being generated: a method whose implementation will encode and * dispatch invocations to the proxy instance's invocation handler. */ - private static class ProxyMethod { + private class ProxyMethod { private final Method method; private final String shortSignature; private final Class fromClass; private final Class[] parameterTypes; private final Class returnType; + private final String methodFieldName; private Class[] exceptionTypes; + private final FieldRefEntry methodField; private ProxyMethod(Method method, String sig, Class[] parameterTypes, Class returnType, Class[] exceptionTypes, - Class fromClass) { + Class fromClass, String methodFieldName) { this.method = method; this.shortSignature = sig; this.parameterTypes = parameterTypes; this.returnType = returnType; this.exceptionTypes = exceptionTypes; this.fromClass = fromClass; + this.methodFieldName = methodFieldName; + this.methodField = cp.fieldRefEntry(thisClassCE, + cp.nameAndTypeEntry(methodFieldName, CD_Method)); } /** @@ -632,17 +675,16 @@ private ProxyMethod(Method method, String sig, Class[] parameterTypes, * * @param method The method for which to create a proxy */ - private ProxyMethod(Method method) { + private ProxyMethod(Method method, String methodFieldName) { this(method, method.toShortSignature(), method.getSharedParameterTypes(), method.getReturnType(), - method.getSharedExceptionTypes(), method.getDeclaringClass()); + method.getSharedExceptionTypes(), method.getDeclaringClass(), methodFieldName); } /** * Generate this method, including the code and exception table entry. */ - private void generateMethod(ProxyGenerator pg, ClassBuilder clb) { - var cp = pg.cp; + private void generateMethod(ClassBuilder clb) { var desc = methodTypeDesc(returnType, parameterTypes); int accessFlags = (method.isVarArgs()) ? ACC_VARARGS | ACC_PUBLIC | ACC_FINAL : ACC_PUBLIC | ACC_FINAL; @@ -650,17 +692,14 @@ private void generateMethod(ProxyGenerator pg, ClassBuilder clb) { clb.withMethod(method.getName(), desc, accessFlags, mb -> mb.with(ExceptionsAttribute.of(toClassEntries(cp, List.of(exceptionTypes)))) .withCode(cob -> { - cob.aload(0) - .getfield(pg.handlerField) - .aload(0) - .ldc(DynamicConstantDesc.of(pg.bsm, - referenceClassDesc(fromClass), - method.getName(), - desc)); + cob.aload(cob.receiverSlot()) + .getfield(handlerField) + .aload(cob.receiverSlot()) + .getstatic(methodField); if (parameterTypes.length > 0) { // Create an array and fill with the parameters converting primitives to wrappers cob.loadConstant(parameterTypes.length) - .anewarray(pg.object); + .anewarray(objectCE); for (int i = 0; i < parameterTypes.length; i++) { cob.dup() .loadConstant(i); @@ -671,7 +710,7 @@ private void generateMethod(ProxyGenerator pg, ClassBuilder clb) { cob.aconst_null(); } - cob.invokeinterface(pg.invoke); + cob.invokeinterface(invocationHandlerInvoke); if (returnType == void.class) { cob.pop() @@ -687,14 +726,14 @@ private void generateMethod(ProxyGenerator pg, ClassBuilder clb) { cob.athrow(); // just rethrow the exception var c2 = cob.newBoundLabel(); cob.exceptionCatchAll(cob.startLabel(), c1, c2) - .new_(pg.ute) + .new_(uteCE) .dup_x1() .swap() - .invokespecial(pg.uteInit) + .invokespecial(uteInit) .athrow() .with(StackMapTableAttribute.of(List.of( - StackMapFrameInfo.of(c1, List.of(), pg.throwableStack), - StackMapFrameInfo.of(c2, List.of(), pg.throwableStack)))); + StackMapFrameInfo.of(c1, List.of(), throwableStack), + StackMapFrameInfo.of(c2, List.of(), throwableStack)))); } })); } @@ -709,7 +748,7 @@ private void codeWrapArgument(CodeBuilder cob, Class type, int slot) { if (type.isPrimitive()) { cob.loadLocal(TypeKind.from(type).asLoadable(), slot); PrimitiveTypeInfo prim = PrimitiveTypeInfo.get(type); - cob.invokestatic(prim.wrapperMethodRef(cob.constantPool())); + cob.invokestatic(prim.wrapperMethodRef(cp)); } else { cob.aload(slot); } @@ -725,7 +764,7 @@ private void codeUnwrapReturnValue(CodeBuilder cob, Class type) { PrimitiveTypeInfo prim = PrimitiveTypeInfo.get(type); cob.checkcast(prim.wrapperClass) - .invokevirtual(prim.unwrapMethodRef(cob.constantPool())) + .invokevirtual(prim.unwrapMethodRef(cp)) .return_(TypeKind.from(type).asLoadable()); } else { cob.checkcast(referenceClassDesc(type)) @@ -733,6 +772,57 @@ private void codeUnwrapReturnValue(CodeBuilder cob, Class type) { } } + /** + * Generate code for initializing the static field that stores + * the Method object for this proxy method. A class loader is + * anticipated at local variable index 0. + * The generated code must be run in an AccessController.doPrivileged + * block if a SecurityManager is present, as otherwise the code + * cannot pass {@code null} ClassLoader to forName. + */ + private void codeFieldInitialization(CodeBuilder cob) { + var cp = cob.constantPool(); + codeClassForName(cob, fromClass); + + cob.ldc(method.getName()) + .loadConstant(parameterTypes.length) + .anewarray(classCE); + + // Construct an array with the parameter types mapping primitives to Wrapper types + for (int i = 0; i < parameterTypes.length; i++) { + cob.dup() + .loadConstant(i); + if (parameterTypes[i].isPrimitive()) { + PrimitiveTypeInfo prim = PrimitiveTypeInfo.get(parameterTypes[i]); + cob.getstatic(prim.typeFieldRef(cp)); + } else { + codeClassForName(cob, parameterTypes[i]); + } + cob.aastore(); + } + // lookup the method + cob.invokevirtual(classGetMethod) + .putstatic(methodField); + } + + /* + * =============== Code Generation Utility Methods =============== + */ + + /** + * Generate code to invoke the Class.forName with the name of the given + * class to get its Class object at runtime. The code is written to + * the supplied stream. Note that the code generated by this method + * may cause the checked ClassNotFoundException to be thrown. A class + * loader is anticipated at local variable index 0. + */ + private void codeClassForName(CodeBuilder cob, Class cl) { + cob.ldc(cl.getName()) + .iconst_0() // false + .aload(0)// classLoader + .invokestatic(classForName); + } + @Override public String toString() { return method.toShortString(); @@ -799,5 +889,9 @@ public MethodRefEntry wrapperMethodRef(ConstantPoolBuilder cp) { public MethodRefEntry unwrapMethodRef(ConstantPoolBuilder cp) { return cp.methodRefEntry(wrapperClass, unwrapMethodName, unwrapMethodType); } + + public FieldRefEntry typeFieldRef(ConstantPoolBuilder cp) { + return cp.fieldRefEntry(wrapperClass, "TYPE", CD_Class); + } } } diff --git a/test/jdk/java/lang/reflect/Proxy/NonPublicMethodTypeTest.java b/test/jdk/java/lang/reflect/Proxy/NonPublicMethodTypeTest.java new file mode 100644 index 0000000000000..8919dc2f0b2e2 --- /dev/null +++ b/test/jdk/java/lang/reflect/Proxy/NonPublicMethodTypeTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8333854 + * @summary Test invoking a method in a proxy interface with package-private + * classes or interfaces in its method type + * @run junit NonPublicMethodTypeTest + */ + +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Proxy; + +import static org.junit.jupiter.api.Assertions.assertNotSame; + +public final class NonPublicMethodTypeTest { + interface NonPublicWorker { + void work(); + } + + public interface PublicWorkable { + void accept(NonPublicWorker worker); + } + + @Test + public void test() { + PublicWorkable proxy = (PublicWorkable) Proxy.newProxyInstance( + NonPublicMethodTypeTest.class.getClassLoader(), + new Class[] {PublicWorkable.class}, + (_, _, _) -> null); + assertNotSame(NonPublicWorker.class.getPackage(), + proxy.getClass().getPackage(), + "Proxy class should not be able to access method parameter " + + "NonPublic type's package"); + proxy.accept(() -> {}); // Call should not fail + } +} From 8bc2fbe57893b110fdb5fd567df4615e7833e5ae Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles Date: Tue, 18 Jun 2024 14:05:11 +0000 Subject: [PATCH 029/102] 8333769: Pretouching tests dont test pretouching Reviewed-by: stuefe, asmehra --- src/hotspot/os/aix/os_aix.cpp | 2 + src/hotspot/os/bsd/os_bsd.cpp | 16 +++ src/hotspot/os/linux/os_linux.cpp | 9 ++ src/hotspot/os/windows/os_windows.cpp | 13 ++ src/hotspot/share/prims/whitebox.cpp | 6 + src/hotspot/share/runtime/os.hpp | 1 + .../jtreg/gc/TestAlwaysPreTouchBehavior.java | 130 ++++++++++++++++++ .../parallel/TestAlwaysPreTouchBehavior.java | 79 ----------- test/lib/jdk/test/whitebox/WhiteBox.java | 1 + 9 files changed, 178 insertions(+), 79 deletions(-) create mode 100644 test/hotspot/jtreg/gc/TestAlwaysPreTouchBehavior.java delete mode 100644 test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp index f0a984d3d1fe0..39f3e420662f0 100644 --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -287,6 +287,8 @@ julong os::physical_memory() { return Aix::physical_memory(); } +size_t os::rss() { return (size_t)0; } + // Cpu architecture string #if defined(PPC32) static char cpu_arch[] = "ppc"; diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index e5b6c74ce2f1b..fe1e7098fd541 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -210,6 +210,22 @@ julong os::physical_memory() { return Bsd::physical_memory(); } +size_t os::rss() { + size_t rss = 0; +#ifdef __APPLE__ + mach_task_basic_info info; + mach_msg_type_number_t count = MACH_TASK_BASIC_INFO_COUNT; + + kern_return_t ret = task_info(mach_task_self(), MACH_TASK_BASIC_INFO, + (task_info_t)&info, &count); + if (ret == KERN_SUCCESS) { + rss = info.resident_size; + } +#endif // __APPLE__ + + return rss; +} + // Cpu architecture string #if defined(ZERO) static char cpu_arch[] = ZERO_LIBARCH; diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index b56d40823546a..52866a44b26c6 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -359,6 +359,15 @@ julong os::physical_memory() { return phys_mem; } +size_t os::rss() { + size_t size = 0; + os::Linux::meminfo_t info; + if (os::Linux::query_process_memory_info(&info)) { + size = info.vmrss * K; + } + return size; +} + static uint64_t initial_total_ticks = 0; static uint64_t initial_steal_ticks = 0; static bool has_initial_tick_info = false; diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 773bda647e15f..49f05fe94b3f5 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -858,6 +858,19 @@ julong os::physical_memory() { return win32::physical_memory(); } +size_t os::rss() { + size_t rss = 0; + PROCESS_MEMORY_COUNTERS_EX pmex; + ZeroMemory(&pmex, sizeof(PROCESS_MEMORY_COUNTERS_EX)); + pmex.cb = sizeof(pmex); + BOOL ret = GetProcessMemoryInfo( + GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS *)&pmex, sizeof(pmex)); + if (ret) { + rss = pmex.WorkingSetSize; + } + return rss; +} + bool os::has_allocatable_memory_limit(size_t* limit) { MEMORYSTATUSEX ms; ms.dwLength = sizeof(ms); diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index 821444ea38985..5ed593b0d2f8e 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -2657,6 +2657,11 @@ WB_ENTRY(void, WB_CleanMetaspaces(JNIEnv* env, jobject target)) ClassLoaderDataGraph::safepoint_and_clean_metaspaces(); WB_END +// Reports resident set size (RSS) in bytes +WB_ENTRY(jlong, WB_Rss(JNIEnv* env, jobject o)) + return os::rss(); +WB_END + #define CC (char*) static JNINativeMethod methods[] = { @@ -2944,6 +2949,7 @@ static JNINativeMethod methods[] = { {CC"setVirtualThreadsNotifyJvmtiMode", CC"(Z)Z", (void*)&WB_SetVirtualThreadsNotifyJvmtiMode}, {CC"preTouchMemory", CC"(JJ)V", (void*)&WB_PreTouchMemory}, {CC"cleanMetaspaces", CC"()V", (void*)&WB_CleanMetaspaces}, + {CC"rss", CC"()J", (void*)&WB_Rss}, }; diff --git a/src/hotspot/share/runtime/os.hpp b/src/hotspot/share/runtime/os.hpp index a6626c1389fce..ce7a07d4c43a0 100644 --- a/src/hotspot/share/runtime/os.hpp +++ b/src/hotspot/share/runtime/os.hpp @@ -344,6 +344,7 @@ class os: AllStatic { static julong physical_memory(); static bool has_allocatable_memory_limit(size_t* limit); static bool is_server_class_machine(); + static size_t rss(); // Returns the id of the processor on which the calling thread is currently executing. // The returned value is guaranteed to be between 0 and (os::processor_count() - 1). diff --git a/test/hotspot/jtreg/gc/TestAlwaysPreTouchBehavior.java b/test/hotspot/jtreg/gc/TestAlwaysPreTouchBehavior.java new file mode 100644 index 0000000000000..c282c2876eaee --- /dev/null +++ b/test/hotspot/jtreg/gc/TestAlwaysPreTouchBehavior.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2014, 2024, Alibaba Group Holding Limited. All rights reserved. + * Copyright (c) 2024, Red Hat Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package gc; + +/** + * @test id=ParallelCollector + * @summary tests AlwaysPreTouch + * @requires vm.gc.Parallel + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xmx512m -Xms512m -XX:+UseParallelGC -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + + /** + * @test id=SerialCollector + * @summary tests AlwaysPreTouch + * @requires vm.gc.Serial + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xmx512m -Xms512m -XX:+UseSerialGC -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + +/** + * @test id=Shenandoah + * @summary tests AlwaysPreTouch + * @requires vm.gc.Shenandoah + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xmx512m -Xms512m -XX:+UseShenandoahGC -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + +/** + * @test id=G1 + * @summary tests AlwaysPreTouch + * @requires vm.gc.G1 + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xmx512m -Xms512m -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + +/** + * @test id=ZGenerational + * @summary tests AlwaysPreTouch + * @requires vm.gc.ZGenerational + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+UseZGC -XX:+ZGenerational -Xmx512m -Xms512m -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + +/** + * @test id=ZSinglegen + * @summary tests AlwaysPreTouch + * @requires vm.gc.ZSinglegen + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+UseZGC -XX:-ZGenerational -Xmx512m -Xms512m -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + +/** + * @test id=Epsilon + * @summary tests AlwaysPreTouch + * @requires vm.gc.Epsilon + * @requires os.maxMemory > 2G + * @requires os.family != "aix" + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx512m -Xms512m -XX:+AlwaysPreTouch gc.TestAlwaysPreTouchBehavior + */ + + +import jdk.test.lib.Asserts; + +import jdk.test.whitebox.WhiteBox; + +public class TestAlwaysPreTouchBehavior { + + public static void main(String [] args) { + long rss = WhiteBox.getWhiteBox().rss(); + System.out.println("RSS: " + rss); + if (rss == 0) { + System.out.println("cannot get RSS, just skip"); + return; // Did not get available RSS, just ignore this test. + } + Runtime runtime = Runtime.getRuntime(); + long committedMemory = runtime.totalMemory(); + Asserts.assertGreaterThan(rss, committedMemory, "RSS of this process(" + rss + "b) should be bigger than or equal to committed heap mem(" + committedMemory + "b)"); + } +} + diff --git a/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java b/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java deleted file mode 100644 index 3a5b2b557cc92..0000000000000 --- a/test/hotspot/jtreg/gc/parallel/TestAlwaysPreTouchBehavior.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014, 2024, Alibaba Group Holding Limited. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package gc.parallel; - -/** - * @test TestAlwaysPreTouchBehavior - * @summary Tests AlwaysPreTouch Bahavior, pages of java heap should be pretouched with AlwaysPreTouch enabled. This test reads RSS of test process, which should be bigger than heap size(1g) with AlwaysPreTouch enabled. - * @requires vm.gc.Parallel - * @requires vm.debug != true - * @requires os.family == "linux" - * @requires os.maxMemory > 2G - * @library /test/lib - * @run main/othervm -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+AlwaysPreTouch -XX:+UnlockDiagnosticVMOptions -XX:-UseMadvPopulateWrite gc.parallel.TestAlwaysPreTouchBehavior - */ -import java.lang.management.ManagementFactory; -import java.lang.management.ThreadInfo; -import java.lang.management.ThreadMXBean; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.io.IOException; -import java.util.*; -import javax.management.*; -import java.lang.management.*; -import jdk.test.lib.Utils; -import jdk.test.lib.Asserts; -import java.lang.management.*; -import java.util.stream.*; -import java.io.*; - -public class TestAlwaysPreTouchBehavior { - public static long getProcessRssInKb() throws IOException { - String pid = ManagementFactory.getRuntimeMXBean().getName().split("@")[0]; - // Read RSS from /proc/$pid/status. Only available on Linux. - String processStatusFile = "/proc/" + pid + "/status"; - BufferedReader reader = new BufferedReader(new FileReader(processStatusFile)); - String line = null; - while ((line = reader.readLine()) != null) { - if (line.startsWith("VmRSS:")) { - break; - } - } - reader.close(); - return Long.valueOf(line.split("\\s+")[1].trim()); - } - public static void main(String [] args) { - long rss = 0; - Runtime runtime = Runtime.getRuntime(); - long committedMemory = runtime.totalMemory() / 1024; // in kb - try { - rss = getProcessRssInKb(); - } catch (Exception e) { - System.out.println("cannot get RSS, just skip"); - return; // Did not get avaiable RSS, just ignore this test - } - Asserts.assertGreaterThanOrEqual(rss, committedMemory, "RSS of this process(" + rss + "kb) should be bigger than or equal to committed heap mem(" + committedMemory + "kb)"); - } -} diff --git a/test/lib/jdk/test/whitebox/WhiteBox.java b/test/lib/jdk/test/whitebox/WhiteBox.java index 2402e39974e3d..3b930aec16f29 100644 --- a/test/lib/jdk/test/whitebox/WhiteBox.java +++ b/test/lib/jdk/test/whitebox/WhiteBox.java @@ -798,4 +798,5 @@ public native int validateCgroup(String procCgroups, public native boolean setVirtualThreadsNotifyJvmtiMode(boolean enabled); public native void preTouchMemory(long addr, long size); + public native long rss(); } From 6f860f8f6f69369130ed79e71255005b5beed45a Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Tue, 18 Jun 2024 14:48:46 +0000 Subject: [PATCH 030/102] 8334430: Clean up nativeInst_x86.* Reviewed-by: jwaters, jiefu --- src/hotspot/cpu/x86/nativeInst_x86.cpp | 161 +---------------------- src/hotspot/cpu/x86/nativeInst_x86.hpp | 172 +------------------------ 2 files changed, 2 insertions(+), 331 deletions(-) diff --git a/src/hotspot/cpu/x86/nativeInst_x86.cpp b/src/hotspot/cpu/x86/nativeInst_x86.cpp index b59f424625636..0426c0f51741d 100644 --- a/src/hotspot/cpu/x86/nativeInst_x86.cpp +++ b/src/hotspot/cpu/x86/nativeInst_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,143 +41,6 @@ void NativeInstruction::wrote(int offset) { ICache::invalidate_word(addr_at(offset)); } -#ifdef ASSERT -void NativeLoadGot::report_and_fail() const { - tty->print_cr("Addr: " INTPTR_FORMAT " Code: %x %x %x", p2i(instruction_address()), - (has_rex ? ubyte_at(0) : 0), ubyte_at(rex_size), ubyte_at(rex_size + 1)); - fatal("not a indirect rip mov to rbx"); -} - -void NativeLoadGot::verify() const { - if (has_rex) { - int rex = ubyte_at(0); - if (rex != rex_prefix && rex != rex_b_prefix) { - report_and_fail(); - } - } - - int inst = ubyte_at(rex_size); - if (inst != instruction_code) { - report_and_fail(); - } - int modrm = ubyte_at(rex_size + 1); - if (modrm != modrm_rbx_code && modrm != modrm_rax_code) { - report_and_fail(); - } -} -#endif - -intptr_t NativeLoadGot::data() const { - return *(intptr_t *) got_address(); -} - -address NativePltCall::destination() const { - NativeGotJump* jump = nativeGotJump_at(plt_jump()); - return jump->destination(); -} - -address NativePltCall::plt_entry() const { - return return_address() + displacement(); -} - -address NativePltCall::plt_jump() const { - address entry = plt_entry(); - // Virtual PLT code has move instruction first - if (((NativeGotJump*)entry)->is_GotJump()) { - return entry; - } else { - return nativeLoadGot_at(entry)->next_instruction_address(); - } -} - -address NativePltCall::plt_load_got() const { - address entry = plt_entry(); - if (!((NativeGotJump*)entry)->is_GotJump()) { - // Virtual PLT code has move instruction first - return entry; - } else { - // Static PLT code has move instruction second (from c2i stub) - return nativeGotJump_at(entry)->next_instruction_address(); - } -} - -address NativePltCall::plt_c2i_stub() const { - address entry = plt_load_got(); - // This method should be called only for static calls which has C2I stub. - NativeLoadGot* load = nativeLoadGot_at(entry); - return entry; -} - -address NativePltCall::plt_resolve_call() const { - NativeGotJump* jump = nativeGotJump_at(plt_jump()); - address entry = jump->next_instruction_address(); - if (((NativeGotJump*)entry)->is_GotJump()) { - return entry; - } else { - // c2i stub 2 instructions - entry = nativeLoadGot_at(entry)->next_instruction_address(); - return nativeGotJump_at(entry)->next_instruction_address(); - } -} - -void NativePltCall::reset_to_plt_resolve_call() { - set_destination_mt_safe(plt_resolve_call()); -} - -void NativePltCall::set_destination_mt_safe(address dest) { - // rewriting the value in the GOT, it should always be aligned - NativeGotJump* jump = nativeGotJump_at(plt_jump()); - address* got = (address *) jump->got_address(); - *got = dest; -} - -void NativePltCall::set_stub_to_clean() { - NativeLoadGot* method_loader = nativeLoadGot_at(plt_c2i_stub()); - NativeGotJump* jump = nativeGotJump_at(method_loader->next_instruction_address()); - method_loader->set_data(0); - jump->set_jump_destination((address)-1); -} - -void NativePltCall::verify() const { - // Make sure code pattern is actually a call rip+off32 instruction. - int inst = ubyte_at(0); - if (inst != instruction_code) { - tty->print_cr("Addr: " INTPTR_FORMAT " Code: 0x%x", p2i(instruction_address()), - inst); - fatal("not a call rip+off32"); - } -} - -address NativeGotJump::destination() const { - address *got_entry = (address *) got_address(); - return *got_entry; -} - -#ifdef ASSERT -void NativeGotJump::report_and_fail() const { - tty->print_cr("Addr: " INTPTR_FORMAT " Code: %x %x %x", p2i(instruction_address()), - (has_rex() ? ubyte_at(0) : 0), ubyte_at(rex_size()), ubyte_at(rex_size() + 1)); - fatal("not a indirect rip jump"); -} - -void NativeGotJump::verify() const { - if (has_rex()) { - int rex = ubyte_at(0); - if (rex != rex_prefix) { - report_and_fail(); - } - } - int inst = ubyte_at(rex_size()); - if (inst != instruction_code) { - report_and_fail(); - } - int modrm = ubyte_at(rex_size() + 1); - if (modrm != modrm_code) { - report_and_fail(); - } -} -#endif - void NativeCall::verify() { // Make sure code pattern is actually a call imm32 instruction. int inst = ubyte_at(0); @@ -565,28 +428,6 @@ void NativeJump::patch_verified_entry(address entry, address verified_entry, add } -address NativeFarJump::jump_destination() const { - NativeMovConstReg* mov = nativeMovConstReg_at(addr_at(0)); - return (address)mov->data(); -} - -void NativeFarJump::verify() { - if (is_far_jump()) { - NativeMovConstReg* mov = nativeMovConstReg_at(addr_at(0)); - NativeInstruction* jmp = nativeInstruction_at(mov->next_instruction_address()); - if (jmp->is_jump_reg()) return; - } - fatal("not a jump instruction"); -} - -void NativePopReg::insert(address code_pos, Register reg) { - assert(reg->encoding() < 8, "no space for REX"); - assert(NativePopReg::instruction_size == sizeof(char), "right address unit for update"); - *code_pos = (u_char)(instruction_code | reg->encoding()); - ICache::invalidate_range(code_pos, instruction_size); -} - - void NativeIllegalInstruction::insert(address code_pos) { assert(NativeIllegalInstruction::instruction_size == sizeof(short), "right address unit for update"); *(short *)code_pos = instruction_code; diff --git a/src/hotspot/cpu/x86/nativeInst_x86.hpp b/src/hotspot/cpu/x86/nativeInst_x86.hpp index 70cb61793661e..3a30047294429 100644 --- a/src/hotspot/cpu/x86/nativeInst_x86.hpp +++ b/src/hotspot/cpu/x86/nativeInst_x86.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,6 @@ // - - NativeMovRegMem // - - NativeMovRegMemPatching // - - NativeJump -// - - NativeFarJump // - - NativeIllegalOpCode // - - NativeGeneralJump // - - NativeReturn @@ -64,7 +63,6 @@ class NativeInstruction { inline bool is_return(); inline bool is_jump(); inline bool is_jump_reg(); - inline bool is_far_jump(); inline bool is_cond_jump(); inline bool is_safepoint_poll(); inline bool is_mov_literal64(); @@ -104,47 +102,6 @@ inline NativeInstruction* nativeInstruction_at(address address) { return inst; } -class NativePltCall: public NativeInstruction { -public: - enum Intel_specific_constants { - instruction_code = 0xE8, - instruction_size = 5, - instruction_offset = 0, - displacement_offset = 1, - return_address_offset = 5 - }; - address instruction_address() const { return addr_at(instruction_offset); } - address next_instruction_address() const { return addr_at(return_address_offset); } - address displacement_address() const { return addr_at(displacement_offset); } - int displacement() const { return (jint) int_at(displacement_offset); } - address return_address() const { return addr_at(return_address_offset); } - address destination() const; - address plt_entry() const; - address plt_jump() const; - address plt_load_got() const; - address plt_resolve_call() const; - address plt_c2i_stub() const; - void set_stub_to_clean(); - - void reset_to_plt_resolve_call(); - void set_destination_mt_safe(address dest); - - void verify() const; -}; - -inline NativePltCall* nativePltCall_at(address address) { - NativePltCall* call = (NativePltCall*) address; -#ifdef ASSERT - call->verify(); -#endif - return call; -} - -inline NativePltCall* nativePltCall_before(address addr) { - address at = addr - NativePltCall::instruction_size; - return nativePltCall_at(at); -} - class NativeCall; inline NativeCall* nativeCall_at(address address); // The NativeCall is an abstraction for accessing/manipulating native call imm32/rel32off @@ -426,57 +383,6 @@ class NativeLoadAddress: public NativeMovRegMem { } }; -// destination is rbx or rax -// mov rbx, [rip + offset] -class NativeLoadGot: public NativeInstruction { -#ifdef AMD64 - static const bool has_rex = true; - static const int rex_size = 1; -#else - static const bool has_rex = false; - static const int rex_size = 0; -#endif - - enum Intel_specific_constants { - rex_prefix = 0x48, - rex_b_prefix = 0x49, - instruction_code = 0x8b, - modrm_rbx_code = 0x1d, - modrm_rax_code = 0x05, - instruction_length = 6 + rex_size, - offset_offset = 2 + rex_size - }; - - int rip_offset() const { return int_at(offset_offset); } - address return_address() const { return addr_at(instruction_length); } - address got_address() const { return return_address() + rip_offset(); } - -#ifdef ASSERT - void report_and_fail() const; - address instruction_address() const { return addr_at(0); } -#endif - -public: - address next_instruction_address() const { return return_address(); } - intptr_t data() const; - void set_data(intptr_t data) { - intptr_t *addr = (intptr_t *) got_address(); - *addr = data; - } - - DEBUG_ONLY( void verify() const ); -}; - -inline NativeLoadGot* nativeLoadGot_at(address addr) { - NativeLoadGot* load = (NativeLoadGot*) addr; -#ifdef ASSERT - load->verify(); -#endif - return load; -} - -// jump rel32off - class NativeJump: public NativeInstruction { public: enum Intel_specific_constants { @@ -532,26 +438,6 @@ inline NativeJump* nativeJump_at(address address) { return jump; } -// far jump reg -class NativeFarJump: public NativeInstruction { - public: - address jump_destination() const; - - // Creation - inline friend NativeFarJump* nativeFarJump_at(address address); - - void verify(); - -}; - -inline NativeFarJump* nativeFarJump_at(address address) { - NativeFarJump* jump = (NativeFarJump*)(address); -#ifdef ASSERT - jump->verify(); -#endif - return jump; -} - // Handles all kinds of jump on Intel. Long/far, conditional/unconditional class NativeGeneralJump: public NativeInstruction { public: @@ -585,61 +471,6 @@ inline NativeGeneralJump* nativeGeneralJump_at(address address) { return jump; } -class NativeGotJump: public NativeInstruction { - enum Intel_specific_constants { - rex_prefix = 0x41, - instruction_code = 0xff, - modrm_code = 0x25, - instruction_size = 6, - rip_offset = 2 - }; - - bool has_rex() const { return ubyte_at(0) == rex_prefix; } - int rex_size() const { return has_rex() ? 1 : 0; } - - address return_address() const { return addr_at(instruction_size + rex_size()); } - int got_offset() const { return (jint) int_at(rip_offset + rex_size()); } - -#ifdef ASSERT - void report_and_fail() const; - address instruction_address() const { return addr_at(0); } -#endif - -public: - address got_address() const { return return_address() + got_offset(); } - address next_instruction_address() const { return return_address(); } - bool is_GotJump() const { return ubyte_at(rex_size()) == instruction_code; } - - address destination() const; - void set_jump_destination(address dest) { - address *got_entry = (address *) got_address(); - *got_entry = dest; - } - - DEBUG_ONLY( void verify() const; ) -}; - -inline NativeGotJump* nativeGotJump_at(address addr) { - NativeGotJump* jump = (NativeGotJump*)(addr); - debug_only(jump->verify()); - return jump; -} - -class NativePopReg : public NativeInstruction { - public: - enum Intel_specific_constants { - instruction_code = 0x58, - instruction_size = 1, - instruction_offset = 0, - data_offset = 1, - next_instruction_offset = 1 - }; - - // Insert a pop instruction - static void insert(address code_pos, Register reg); -}; - - class NativeIllegalInstruction: public NativeInstruction { public: enum Intel_specific_constants { @@ -702,7 +533,6 @@ inline bool NativeInstruction::is_jump_reg() { if (ubyte_at(0) == Assembler::REX_B) pos = 1; return ubyte_at(pos) == 0xFF && (ubyte_at(pos + 1) & 0xF0) == 0xE0; } -inline bool NativeInstruction::is_far_jump() { return is_mov_literal64(); } inline bool NativeInstruction::is_cond_jump() { return (int_at(0) & 0xF0FF) == 0x800F /* long jump */ || (ubyte_at(0) & 0xF0) == 0x70; /* short jump */ } inline bool NativeInstruction::is_safepoint_poll() { From e965d70a7425bec78620a2ca8bfaca3c392edf6a Mon Sep 17 00:00:00 2001 From: Emanuel Peter Date: Tue, 18 Jun 2024 16:15:09 +0000 Subject: [PATCH 031/102] 8333876: C2 SuperWord: regression after JDK-8325155: failed: internal connection Reviewed-by: kvn, roland --- src/hotspot/share/opto/superword.cpp | 8 +-- .../superword/TestParallelReduction.java | 60 +++++++++++++++++++ 2 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/loopopts/superword/TestParallelReduction.java diff --git a/src/hotspot/share/opto/superword.cpp b/src/hotspot/share/opto/superword.cpp index 5cd4341c42d0d..f78a9b63926fd 100644 --- a/src/hotspot/share/opto/superword.cpp +++ b/src/hotspot/share/opto/superword.cpp @@ -2755,11 +2755,11 @@ bool SuperWord::is_vector_use(Node* use, int u_idx) const { // Reduction: first input is internal connection. if (is_marked_reduction(use) && u_idx == 1) { -#ifdef ASSERT - for (uint i = 1; i < u_pk->size(); i++) { - assert(u_pk->at(i - 1) == u_pk->at(i)->in(1), "internal connection"); + for (uint i = 1; i < u_pk->size(); i++) { + if (u_pk->at(i - 1) != u_pk->at(i)->in(1)) { + return false; // not internally connected } -#endif + } return true; } diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestParallelReduction.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestParallelReduction.java new file mode 100644 index 0000000000000..2062469edb025 --- /dev/null +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestParallelReduction.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package compiler.loopopts.superword; + +/* + * @test + * @bug 8333876 + * @summary Test parallel reductions. + * @run main compiler.loopopts.superword.TestParallelReduction + */ + +public class TestParallelReduction { + static int RANGE = 10_000; + + public static void main(String[] args) { + float[] a = new float[RANGE]; + for (int i = 0; i < a.length; i++) { + a[i] = i; + } + + float gold = test(a); + + for (int i = 0; i < 10_000; i++) { + if (test(a) != gold) { + throw new RuntimeException("wrong value"); + } + } + } + + static float test(float[] a) { + float x = 0; + float y = 0; + for (int i = 0; i < a.length; i+=2) { + x += a[i+0]; + y += a[i+1]; + } + return x+y; + } +} From 2ce85d96352cef4910cb6a5c2d9b174ca9d8a4e4 Mon Sep 17 00:00:00 2001 From: Alisen Chung Date: Tue, 18 Jun 2024 21:31:16 +0000 Subject: [PATCH 032/102] 8291472: [macos] jawt 1.4 lock/unlock not supported Reviewed-by: serb --- src/java.desktop/macosx/native/libjawt/jawt.m | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/java.desktop/macosx/native/libjawt/jawt.m b/src/java.desktop/macosx/native/libjawt/jawt.m index f5dc048a482f6..36d4e897f608d 100644 --- a/src/java.desktop/macosx/native/libjawt/jawt.m +++ b/src/java.desktop/macosx/native/libjawt/jawt.m @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,15 +55,14 @@ awt->GetDrawingSurface = awt_GetDrawingSurface; awt->FreeDrawingSurface = awt_FreeDrawingSurface; - if (awt->version >= JAWT_VERSION_1_4) { - awt->Lock = awt_Lock; - awt->Unlock = awt_Unlock; - awt->GetComponent = awt_GetComponent; - if (awt->version >= JAWT_VERSION_9) { - awt->CreateEmbeddedFrame = awt_CreateEmbeddedFrame; - awt->SetBounds = awt_SetBounds; - awt->SynthesizeWindowActivation = awt_SynthesizeWindowActivation; - } + + awt->Lock = awt_Lock; + awt->Unlock = awt_Unlock; + awt->GetComponent = awt_GetComponent; + if (awt->version >= JAWT_VERSION_9) { + awt->CreateEmbeddedFrame = awt_CreateEmbeddedFrame; + awt->SetBounds = awt_SetBounds; + awt->SynthesizeWindowActivation = awt_SynthesizeWindowActivation; } return JNI_TRUE; From e227c7e37d4de0656f013f3a936b1acfa56cc2e0 Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Tue, 18 Jun 2024 23:23:39 +0000 Subject: [PATCH 033/102] 8334258: Compiler erronousely allows access to instance variable in argument expression of a constructor invocation Reviewed-by: mcimadamore --- .../com/sun/tools/javac/comp/Resolve.java | 23 +++++++++++-------- .../SuperInit/EarlyAssignmentNoPreview1.java | 21 +++++++++++++++++ .../SuperInit/EarlyAssignmentNoPreview1.out | 2 ++ .../SuperInit/EarlyAssignmentNoPreview2.java | 21 +++++++++++++++++ .../SuperInit/EarlyAssignmentNoPreview2.out | 2 ++ .../SuperInit/EarlyAssignmentNoPreview3.java | 21 +++++++++++++++++ .../SuperInit/EarlyAssignmentNoPreview3.out | 2 ++ 7 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.java create mode 100644 test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.out create mode 100644 test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.java create mode 100644 test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.out create mode 100644 test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.java create mode 100644 test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.out diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java index 3dcac0b26461f..079a0bc5c6a46 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -100,6 +100,7 @@ public class Resolve { DeferredAttr deferredAttr; Check chk; Infer infer; + Preview preview; ClassFinder finder; ModuleFinder moduleFinder; Types types; @@ -135,7 +136,7 @@ protected Resolve(Context context) { moduleFinder = ModuleFinder.instance(context); types = Types.instance(context); diags = JCDiagnostic.Factory.instance(context); - Preview preview = Preview.instance(context); + preview = Preview.instance(context); Source source = Source.instance(context); Options options = Options.instance(context); compactMethodDiags = options.isSet(Option.XDIAGS, "compact") || @@ -1480,10 +1481,11 @@ else throw new FatalError( /** Find unqualified variable or field with given name. * Synthetic fields always skipped. + * @param pos The position to use for error reporting. * @param env The current environment. * @param name The name of the variable or field. */ - Symbol findVar(Env env, Name name) { + Symbol findVar(DiagnosticPosition pos, Env env, Name name) { Symbol bestSoFar = varNotFound; Env env1 = env; boolean staticOnly = false; @@ -1508,7 +1510,7 @@ Symbol findVar(Env env, Name name) { (sym.flags() & STATIC) == 0) { if (staticOnly) return new StaticError(sym); - if (env1.info.ctorPrologue && !isAllowedEarlyReference(env1, (VarSymbol)sym)) + if (env1.info.ctorPrologue && !isAllowedEarlyReference(pos, env1, (VarSymbol)sym)) return new RefBeforeCtorCalledError(sym); } return sym; @@ -2421,15 +2423,15 @@ Symbol findType(Env env, Name name) { * (a subset of VAL, TYP, PCK). */ Symbol findIdent(DiagnosticPosition pos, Env env, Name name, KindSelector kind) { - return checkNonExistentType(checkRestrictedType(pos, findIdentInternal(env, name, kind), name)); + return checkNonExistentType(checkRestrictedType(pos, findIdentInternal(pos, env, name, kind), name)); } - Symbol findIdentInternal(Env env, Name name, KindSelector kind) { + Symbol findIdentInternal(DiagnosticPosition pos, Env env, Name name, KindSelector kind) { Symbol bestSoFar = typeNotFound; Symbol sym; if (kind.contains(KindSelector.VAL)) { - sym = findVar(env, name); + sym = findVar(pos, env, name); if (sym.exists()) return sym; else bestSoFar = bestOf(bestSoFar, sym); } @@ -3776,7 +3778,7 @@ Symbol resolveSelf(DiagnosticPosition pos, if (sym != null) { if (staticOnly) sym = new StaticError(sym); - else if (env1.info.ctorPrologue && !isAllowedEarlyReference(env1, (VarSymbol)sym)) + else if (env1.info.ctorPrologue && !isAllowedEarlyReference(pos, env1, (VarSymbol)sym)) sym = new RefBeforeCtorCalledError(sym); return accessBase(sym, pos, env.enclClass.sym.type, name, true); @@ -3845,7 +3847,7 @@ private List pruneInterfaces(Type t) { * We also don't verify that the field has no initializer, which is required. * To catch those cases, we rely on similar logic in Attr.checkAssignable(). */ - private boolean isAllowedEarlyReference(Env env, VarSymbol v) { + private boolean isAllowedEarlyReference(DiagnosticPosition pos, Env env, VarSymbol v) { // Check assumptions Assert.check(env.info.ctorPrologue); @@ -3880,6 +3882,9 @@ private boolean isAllowedEarlyReference(Env env, VarSymbol v) { if (isEarlyReference(env, base, v) && v.owner != env.enclClass.sym) return false; + // The flexible constructors feature must be enabled + preview.checkSourceLevel(pos, Feature.FLEXIBLE_CONSTRUCTORS); + // OK return true; } diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.java b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.java new file mode 100644 index 0000000000000..abb6bacbc8fc9 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.java @@ -0,0 +1,21 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8334258 + * @summary Disallow early assignment if FLEXIBLE_CONSTRUCTORS preview feature is not enabled + * @compile/fail/ref=EarlyAssignmentNoPreview1.out -XDrawDiagnostics EarlyAssignmentNoPreview1.java + */ +public class EarlyAssignmentNoPreview1 { + + Runnable r; + + public EarlyAssignmentNoPreview1() { + this(r = () -> System.out.println("hello")); + } + + public EarlyAssignmentNoPreview1(Runnable r) { + } + + public static void main(String[] args) { + new EarlyAssignmentNoPreview1(); + } +} diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.out b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.out new file mode 100644 index 0000000000000..6c5afbbd12bb4 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview1.out @@ -0,0 +1,2 @@ +EarlyAssignmentNoPreview1.java:12:14: compiler.err.preview.feature.disabled: (compiler.misc.feature.flexible.constructors) +1 error diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.java b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.java new file mode 100644 index 0000000000000..3c33734f42a55 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.java @@ -0,0 +1,21 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8334258 + * @summary Disallow early assignment if FLEXIBLE_CONSTRUCTORS preview feature is not enabled + * @compile/fail/ref=EarlyAssignmentNoPreview2.out -XDrawDiagnostics EarlyAssignmentNoPreview2.java + */ +public class EarlyAssignmentNoPreview2 { + + Runnable r; + + public EarlyAssignmentNoPreview2() { + this(this.r = () -> System.out.println("hello")); + } + + public EarlyAssignmentNoPreview2(Runnable r) { + } + + public static void main(String[] args) { + new EarlyAssignmentNoPreview2(); + } +} diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.out b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.out new file mode 100644 index 0000000000000..38fb885684e1d --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview2.out @@ -0,0 +1,2 @@ +EarlyAssignmentNoPreview2.java:12:14: compiler.err.preview.feature.disabled: (compiler.misc.feature.flexible.constructors) +1 error diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.java b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.java new file mode 100644 index 0000000000000..f6269f2cb1fdc --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.java @@ -0,0 +1,21 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8334258 + * @summary Disallow early assignment if FLEXIBLE_CONSTRUCTORS preview feature is not enabled + * @compile/fail/ref=EarlyAssignmentNoPreview3.out -XDrawDiagnostics EarlyAssignmentNoPreview3.java + */ +public class EarlyAssignmentNoPreview3 { + + Runnable r; + + public EarlyAssignmentNoPreview3() { + this(EarlyAssignmentNoPreview3.this.r = () -> System.out.println("hello")); + } + + public EarlyAssignmentNoPreview3(Runnable r) { + } + + public static void main(String[] args) { + new EarlyAssignmentNoPreview3(); + } +} diff --git a/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.out b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.out new file mode 100644 index 0000000000000..def9f4f3722f1 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyAssignmentNoPreview3.out @@ -0,0 +1,2 @@ +EarlyAssignmentNoPreview3.java:12:39: compiler.err.preview.feature.disabled: (compiler.misc.feature.flexible.constructors) +1 error From 48621ae193ef70b2fae4dcb7ddc524f349beb131 Mon Sep 17 00:00:00 2001 From: Christian Hagedorn Date: Wed, 19 Jun 2024 06:45:04 +0000 Subject: [PATCH 034/102] 8331168: Introduce PredicateEntryIterator to iterate through predicate entries Reviewed-by: roland, kvn --- src/hotspot/share/opto/loopnode.cpp | 54 +++++++++++------------- src/hotspot/share/opto/loopnode.hpp | 6 ++- src/hotspot/share/opto/loopopts.cpp | 2 +- src/hotspot/share/opto/predicates.cpp | 59 ++++++++++++++++++++++----- src/hotspot/share/opto/predicates.hpp | 48 ++++++++++++++++++---- 5 files changed, 118 insertions(+), 51 deletions(-) diff --git a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp index d58be5105169a..6c16d7cc6a4e6 100644 --- a/src/hotspot/share/opto/loopnode.cpp +++ b/src/hotspot/share/opto/loopnode.cpp @@ -169,10 +169,10 @@ Node *PhaseIdealLoop::get_early_ctrl_for_expensive(Node *n, Node* earliest) { return earliest; } - while (1) { - Node *next = ctl; - // Moving the node out of a loop on the projection of a If - // confuses loop predication. So once we hit a Loop in a If branch + while (true) { + Node* next = ctl; + // Moving the node out of a loop on the projection of an If + // confuses Loop Predication. So, once we hit a loop in an If branch // that doesn't branch to an UNC, we stop. The code that process // expensive nodes will notice the loop and skip over it to try to // move the node further up. @@ -6081,20 +6081,27 @@ Node* PhaseIdealLoop::get_late_ctrl_with_anti_dep(LoadNode* n, Node* early, Node return LCA; } -// true if CFG node d dominates CFG node n -bool PhaseIdealLoop::is_dominator(Node *d, Node *n) { - if (d == n) +// Is CFG node 'dominator' dominating node 'n'? +bool PhaseIdealLoop::is_dominator(Node* dominator, Node* n) { + if (dominator == n) { return true; - assert(d->is_CFG() && n->is_CFG(), "must have CFG nodes"); - uint dd = dom_depth(d); + } + assert(dominator->is_CFG() && n->is_CFG(), "must have CFG nodes"); + uint dd = dom_depth(dominator); while (dom_depth(n) >= dd) { - if (n == d) + if (n == dominator) { return true; + } n = idom(n); } return false; } +// Is CFG node 'dominator' strictly dominating node 'n'? +bool PhaseIdealLoop::is_strict_dominator(Node* dominator, Node* n) { + return dominator != n && is_dominator(dominator, n); +} + //------------------------------dom_lca_for_get_late_ctrl_internal------------- // Pair-wise LCA with tags. // Tag each index with the node 'tag' currently being processed @@ -6377,31 +6384,16 @@ void PhaseIdealLoop::build_loop_late_post_work(Node *n, bool pinned) { if (least != early) { // Move the node above predicates as far up as possible so a - // following pass of loop predication doesn't hoist a predicate + // following pass of Loop Predication doesn't hoist a predicate // that depends on it above that node. - Node* new_ctrl = least; - for (;;) { - if (!new_ctrl->is_Proj()) { - break; - } - CallStaticJavaNode* call = new_ctrl->as_Proj()->is_uncommon_trap_if_pattern(); - if (call == nullptr) { - break; - } - int req = call->uncommon_trap_request(); - Deoptimization::DeoptReason trap_reason = Deoptimization::trap_request_reason(req); - if (trap_reason != Deoptimization::Reason_loop_limit_check && - trap_reason != Deoptimization::Reason_predicate && - trap_reason != Deoptimization::Reason_profile_predicate) { - break; - } - Node* c = new_ctrl->in(0)->in(0); - if (is_dominator(c, early) && c != early) { + PredicateEntryIterator predicate_iterator(least); + while (predicate_iterator.has_next()) { + Node* next_predicate_entry = predicate_iterator.next_entry(); + if (is_strict_dominator(next_predicate_entry, early)) { break; } - new_ctrl = c; + least = next_predicate_entry; } - least = new_ctrl; } // Try not to place code on a loop entry projection // which can inhibit range check elimination. diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp index 90ef4da4f1e0e..8d9d4b3e0e543 100644 --- a/src/hotspot/share/opto/loopnode.hpp +++ b/src/hotspot/share/opto/loopnode.hpp @@ -1011,8 +1011,10 @@ class PhaseIdealLoop : public PhaseTransform { assert(n == find_non_split_ctrl(n), "must return legal ctrl" ); return n; } - // true if CFG node d dominates CFG node n - bool is_dominator(Node *d, Node *n); + + bool is_dominator(Node* dominator, Node* n); + bool is_strict_dominator(Node* dominator, Node* n); + // return get_ctrl for a data node and self(n) for a CFG node Node* ctrl_or_self(Node* n) { if (has_ctrl(n)) diff --git a/src/hotspot/share/opto/loopopts.cpp b/src/hotspot/share/opto/loopopts.cpp index b19c71fdd8689..23b2edce6549a 100644 --- a/src/hotspot/share/opto/loopopts.cpp +++ b/src/hotspot/share/opto/loopopts.cpp @@ -4294,7 +4294,7 @@ bool PhaseIdealLoop::duplicate_loop_backedge(IdealLoopTree *loop, Node_List &old } else { wq.push(c->in(0)); } - assert(!is_dominator(c, region) || c == region, "shouldn't go above region"); + assert(!is_strict_dominator(c, region), "shouldn't go above region"); } Node* region_dom = idom(region); diff --git a/src/hotspot/share/opto/predicates.cpp b/src/hotspot/share/opto/predicates.cpp index 9f782f34bdbb8..5b0de2e02d5f0 100644 --- a/src/hotspot/share/opto/predicates.cpp +++ b/src/hotspot/share/opto/predicates.cpp @@ -32,29 +32,29 @@ // (i.e. not belonging to an Initialized Assertion Predicate anymore) Node* AssertionPredicatesWithHalt::find_entry(Node* start_proj) { Node* entry = start_proj; - while (is_assertion_predicate_success_proj(entry)) { + while (AssertionPredicateWithHalt::is_predicate(entry)) { entry = entry->in(0)->in(0); } return entry; } -bool AssertionPredicatesWithHalt::is_assertion_predicate_success_proj(const Node* predicate_proj) { - if (predicate_proj == nullptr || !predicate_proj->is_IfProj() || !predicate_proj->in(0)->is_If()) { +bool AssertionPredicateWithHalt::is_predicate(const Node* maybe_success_proj) { + if (maybe_success_proj == nullptr || !maybe_success_proj->is_IfProj() || !maybe_success_proj->in(0)->is_If()) { return false; } - return has_assertion_predicate_opaque(predicate_proj) && has_halt(predicate_proj); + return has_assertion_predicate_opaque(maybe_success_proj) && has_halt(maybe_success_proj); } // Check if the If node of `predicate_proj` has an Opaque4 (Template Assertion Predicate) or an // OpaqueInitializedAssertionPredicate (Initialized Assertion Predicate) node as input. -bool AssertionPredicatesWithHalt::has_assertion_predicate_opaque(const Node* predicate_proj) { +bool AssertionPredicateWithHalt::has_assertion_predicate_opaque(const Node* predicate_proj) { IfNode* iff = predicate_proj->in(0)->as_If(); Node* bol = iff->in(1); return bol->is_Opaque4() || bol->is_OpaqueInitializedAssertionPredicate(); } // Check if the other projection (UCT projection) of `success_proj` has a Halt node as output. -bool AssertionPredicatesWithHalt::has_halt(const Node* success_proj) { +bool AssertionPredicateWithHalt::has_halt(const Node* success_proj) { ProjNode* other_proj = success_proj->as_IfProj()->other_if_proj(); return other_proj->outcnt() == 1 && other_proj->unique_out()->Opcode() == Op_Halt; } @@ -72,7 +72,15 @@ ParsePredicateNode* ParsePredicate::init_parse_predicate(Node* parse_predicate_p return nullptr; } -Deoptimization::DeoptReason RuntimePredicate::uncommon_trap_reason(IfProjNode* if_proj) { +bool ParsePredicate::is_predicate(Node* maybe_success_proj) { + if (!maybe_success_proj->is_IfProj()) { + return false; + } + IfNode* if_node = maybe_success_proj->in(0)->as_If(); + return if_node->is_ParsePredicate(); +} + +Deoptimization::DeoptReason RegularPredicateWithUCT::uncommon_trap_reason(IfProjNode* if_proj) { CallStaticJavaNode* uct_call = if_proj->is_uncommon_trap_if_pattern(); if (uct_call == nullptr) { return Deoptimization::Reason_none; @@ -80,8 +88,20 @@ Deoptimization::DeoptReason RuntimePredicate::uncommon_trap_reason(IfProjNode* i return Deoptimization::trap_request_reason(uct_call->uncommon_trap_request()); } -bool RuntimePredicate::is_success_proj(Node* node, Deoptimization::DeoptReason deopt_reason) { - if (may_be_runtime_predicate_if(node)) { +bool RegularPredicateWithUCT::is_predicate(Node* maybe_success_proj) { + if (may_be_predicate_if(maybe_success_proj)) { + IfProjNode* success_proj = maybe_success_proj->as_IfProj(); + const Deoptimization::DeoptReason deopt_reason = uncommon_trap_reason(success_proj); + return (deopt_reason == Deoptimization::Reason_loop_limit_check || + deopt_reason == Deoptimization::Reason_predicate || + deopt_reason == Deoptimization::Reason_profile_predicate); + } else { + return false; + } +} + +bool RegularPredicateWithUCT::is_predicate(Node* node, Deoptimization::DeoptReason deopt_reason) { + if (may_be_predicate_if(node)) { return deopt_reason == uncommon_trap_reason(node->as_IfProj()); } else { return false; @@ -89,7 +109,7 @@ bool RuntimePredicate::is_success_proj(Node* node, Deoptimization::DeoptReason d } // A Runtime Predicate must have an If or a RangeCheck node, while the If should not be a zero trip guard check. -bool RuntimePredicate::may_be_runtime_predicate_if(Node* node) { +bool RegularPredicateWithUCT::may_be_predicate_if(Node* node) { if (node->is_IfProj()) { const IfNode* if_node = node->in(0)->as_If(); const int opcode_if = if_node->Opcode(); @@ -101,6 +121,10 @@ bool RuntimePredicate::may_be_runtime_predicate_if(Node* node) { return false; } +bool RuntimePredicate::is_success_proj(Node* node, Deoptimization::DeoptReason deopt_reason) { + return RegularPredicateWithUCT::is_predicate(node, deopt_reason); +} + ParsePredicateIterator::ParsePredicateIterator(const Predicates& predicates) : _current_index(0) { const PredicateBlock* loop_limit_check_predicate_block = predicates.loop_limit_check_predicate_block(); if (loop_limit_check_predicate_block->has_parse_predicate()) { @@ -356,3 +380,18 @@ bool TemplateAssertionPredicateExpressionNode::is_in_expression(Node* node) { bool TemplateAssertionPredicateExpressionNode::is_template_assertion_predicate(Node* node) { return node->is_If() && node->in(1)->is_Opaque4(); } + +// Is current node pointed to by iterator a predicate? +bool PredicateEntryIterator::has_next() const { + return ParsePredicate::is_predicate(_current) || + RegularPredicateWithUCT::is_predicate(_current) || + AssertionPredicateWithHalt::is_predicate(_current); +} + +// Skip the current predicate pointed to by iterator by returning the input into the predicate. This could possibly be +// a non-predicate node. +Node* PredicateEntryIterator::next_entry() { + assert(has_next(), "current must be predicate"); + _current = _current->in(0)->in(0); + return _current; +} diff --git a/src/hotspot/share/opto/predicates.hpp b/src/hotspot/share/opto/predicates.hpp index bf12aeb6a5163..9cac98eb9936f 100644 --- a/src/hotspot/share/opto/predicates.hpp +++ b/src/hotspot/share/opto/predicates.hpp @@ -26,6 +26,7 @@ #define SHARE_OPTO_PREDICATES_HPP #include "opto/cfgnode.hpp" +#include "opto/connode.hpp" #include "opto/opaquenode.hpp" /* @@ -199,9 +200,6 @@ class AssertionPredicatesWithHalt : public StackObj { Node* _entry; static Node* find_entry(Node* start_proj); - static bool has_assertion_predicate_opaque(const Node* predicate_proj); - static bool has_halt(const Node* success_proj); - static bool is_assertion_predicate_success_proj(const Node* predicate_proj); public: AssertionPredicatesWithHalt(Node* assertion_predicate_proj) : _entry(find_entry(assertion_predicate_proj)) {} @@ -213,13 +211,37 @@ class AssertionPredicatesWithHalt : public StackObj { } }; +// Class to represent a single Assertion Predicate with a HaltNode. This could either be: +// - A Template Assertion Predicate. +// - An Initialized Assertion Predicate. +// Note that all other Regular Predicates have an UCT node. +class AssertionPredicateWithHalt : public StackObj { + static bool has_assertion_predicate_opaque(const Node* predicate_proj); + static bool has_halt(const Node* success_proj); + public: + static bool is_predicate(const Node* maybe_success_proj); +}; + +// Class to represent a single Regular Predicate with an UCT. This could either be: +// - A Runtime Predicate +// - A Template Assertion Predicate +// Note that all other Regular Predicates have a Halt node. +class RegularPredicateWithUCT : public StackObj { + static Deoptimization::DeoptReason uncommon_trap_reason(IfProjNode* if_proj); + static bool may_be_predicate_if(Node* node); + + public: + static bool is_predicate(Node* maybe_success_proj); + static bool is_predicate(Node* node, Deoptimization::DeoptReason deopt_reason); +}; + // Class to represent a Parse Predicate. class ParsePredicate : public StackObj { ParsePredicateSuccessProj* _success_proj; ParsePredicateNode* _parse_predicate_node; Node* _entry; - IfTrueNode* init_success_proj(const Node* parse_predicate_proj) const { + static IfTrueNode* init_success_proj(const Node* parse_predicate_proj) { assert(parse_predicate_proj != nullptr, "must not be null"); return parse_predicate_proj->isa_IfTrue(); } @@ -253,13 +275,12 @@ class ParsePredicate : public StackObj { assert(is_valid(), "must be valid"); return _success_proj; } + + static bool is_predicate(Node* maybe_success_proj); }; // Utility class for queries on Runtime Predicates. class RuntimePredicate : public StackObj { - static Deoptimization::DeoptReason uncommon_trap_reason(IfProjNode* if_proj); - static bool may_be_runtime_predicate_if(Node* node); - public: static bool is_success_proj(Node* node, Deoptimization::DeoptReason deopt_reason); }; @@ -473,4 +494,17 @@ class ParsePredicateIterator : public StackObj { ParsePredicateNode* next(); }; + +// Special predicate iterator that can be used to walk through predicate entries, regardless of whether the predicate +// belongs to the same loop or not (i.e. leftovers from already folded nodes). The iterator returns the next entry +// to a predicate. +class PredicateEntryIterator : public StackObj { + Node* _current; + + public: + explicit PredicateEntryIterator(Node* start) : _current(start) {}; + + bool has_next() const; + Node* next_entry(); +}; #endif // SHARE_OPTO_PREDICATES_HPP From 2165a053e8bf56220af8ef1ef50708364f555931 Mon Sep 17 00:00:00 2001 From: Yudi Zheng Date: Wed, 19 Jun 2024 09:04:12 +0000 Subject: [PATCH 035/102] 8334399: [JVMCI] Implement JVMCICompiler::is_intrinsic_supported Reviewed-by: dnsimon --- src/hotspot/share/jvmci/jvmciCompiler.cpp | 11 +++++++- src/hotspot/share/jvmci/jvmciCompiler.hpp | 4 ++- src/hotspot/share/jvmci/jvmciEnv.cpp | 27 ++++++++++++++++++- src/hotspot/share/jvmci/jvmciEnv.hpp | 4 ++- src/hotspot/share/jvmci/jvmciJavaClasses.hpp | 3 ++- src/hotspot/share/jvmci/jvmciRuntime.cpp | 10 +++++++ src/hotspot/share/jvmci/jvmciRuntime.hpp | 3 +++ src/hotspot/share/jvmci/vmSymbols_jvmci.hpp | 3 ++- .../vm/ci/hotspot/HotSpotJVMCIRuntime.java | 8 +++++- .../vm/ci/hotspot/HotSpotVMConfigStore.java | 23 +++++++++++++++- .../jdk/vm/ci/runtime/JVMCICompiler.java | 13 ++++++++- 11 files changed, 100 insertions(+), 9 deletions(-) diff --git a/src/hotspot/share/jvmci/jvmciCompiler.cpp b/src/hotspot/share/jvmci/jvmciCompiler.cpp index 5be065aadadcc..2b8684f7ab85b 100644 --- a/src/hotspot/share/jvmci/jvmciCompiler.cpp +++ b/src/hotspot/share/jvmci/jvmciCompiler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -200,6 +200,15 @@ void JVMCICompiler::print_timers() { _hosted_code_installs.print_on(tty, " Install Code: "); } +bool JVMCICompiler::is_intrinsic_supported(const methodHandle& method) { + vmIntrinsics::ID id = method->intrinsic_id(); + assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); + JavaThread* thread = JavaThread::current(); + JVMCIEnv jvmciEnv(thread, __FILE__, __LINE__); + JVMCIRuntime* runtime = JVMCI::compiler_runtime(thread, false); + return runtime->is_intrinsic_supported(&jvmciEnv, (jint) id); +} + void JVMCICompiler::CodeInstallStats::print_on(outputStream* st, const char* prefix) const { double time = _timer.seconds(); st->print_cr("%s%7.3f s (installs: %d, CodeBlob total size: %d, CodeBlob code size: %d)", diff --git a/src/hotspot/share/jvmci/jvmciCompiler.hpp b/src/hotspot/share/jvmci/jvmciCompiler.hpp index bdb50cfc26a89..0d03bd08bf65b 100644 --- a/src/hotspot/share/jvmci/jvmciCompiler.hpp +++ b/src/hotspot/share/jvmci/jvmciCompiler.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -136,6 +136,8 @@ class JVMCICompiler : public AbstractCompiler { // Print compilation timers and statistics virtual void print_timers(); + virtual bool is_intrinsic_supported(const methodHandle& method); + // Gets the number of methods that have been successfully compiled by // a call to JVMCICompiler::compile_method(). int methods_compiled() { return _methods_compiled; } diff --git a/src/hotspot/share/jvmci/jvmciEnv.cpp b/src/hotspot/share/jvmci/jvmciEnv.cpp index 624b25b9e2c7b..01b78b45b2a8e 100644 --- a/src/hotspot/share/jvmci/jvmciEnv.cpp +++ b/src/hotspot/share/jvmci/jvmciEnv.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -967,6 +967,31 @@ jboolean JVMCIEnv::call_HotSpotJVMCIRuntime_isGCSupported (JVMCIObject runtime, } } +jboolean JVMCIEnv::call_HotSpotJVMCIRuntime_isIntrinsicSupported (JVMCIObject runtime, jint intrinsicIdentifier) { + JavaThread* THREAD = JavaThread::current(); // For exception macros. + if (is_hotspot()) { + JavaCallArguments jargs; + jargs.push_oop(Handle(THREAD, HotSpotJVMCI::resolve(runtime))); + jargs.push_int(intrinsicIdentifier); + JavaValue result(T_BOOLEAN); + JavaCalls::call_special(&result, + HotSpotJVMCI::HotSpotJVMCIRuntime::klass(), + vmSymbols::isIntrinsicSupported_name(), + vmSymbols::int_bool_signature(), &jargs, CHECK_0); + return result.get_jboolean(); + } else { + JNIAccessMark jni(this, THREAD); + jboolean result = jni()->CallNonvirtualBooleanMethod(runtime.as_jobject(), + JNIJVMCI::HotSpotJVMCIRuntime::clazz(), + JNIJVMCI::HotSpotJVMCIRuntime::isIntrinsicSupported_method(), + intrinsicIdentifier); + if (jni()->ExceptionCheck()) { + return false; + } + return result; + } +} + JVMCIObject JVMCIEnv::call_HotSpotJVMCIRuntime_compileMethod (JVMCIObject runtime, JVMCIObject method, int entry_bci, jlong compile_state, int id) { JavaThread* THREAD = JVMCI::compilation_tick(JavaThread::current()); // For exception macros. diff --git a/src/hotspot/share/jvmci/jvmciEnv.hpp b/src/hotspot/share/jvmci/jvmciEnv.hpp index b3aa487f34c64..69f6647b0d618 100644 --- a/src/hotspot/share/jvmci/jvmciEnv.hpp +++ b/src/hotspot/share/jvmci/jvmciEnv.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -359,6 +359,8 @@ class JVMCIEnv : public ResourceObj { jboolean call_HotSpotJVMCIRuntime_isGCSupported(JVMCIObject runtime, jint gcIdentifier); + jboolean call_HotSpotJVMCIRuntime_isIntrinsicSupported(JVMCIObject runtime, jint intrinsicIdentifier); + void call_HotSpotJVMCIRuntime_postTranslation(JVMCIObject object, JVMCI_TRAPS); // Converts the JavaKind.typeChar value in `ch` to a BasicType diff --git a/src/hotspot/share/jvmci/jvmciJavaClasses.hpp b/src/hotspot/share/jvmci/jvmciJavaClasses.hpp index 3561093caaa25..d5fcd2aaaba30 100644 --- a/src/hotspot/share/jvmci/jvmciJavaClasses.hpp +++ b/src/hotspot/share/jvmci/jvmciJavaClasses.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -202,6 +202,7 @@ objectarray_field(HotSpotJVMCIRuntime, excludeFromJVMCICompilation, "[Ljava/lang/Module;") \ jvmci_method(CallNonvirtualObjectMethod, GetMethodID, call_special, JVMCIObject, HotSpotJVMCIRuntime, compileMethod, compileMethod_signature) \ jvmci_method(CallNonvirtualObjectMethod, GetMethodID, call_special, JVMCIObject, HotSpotJVMCIRuntime, isGCSupported, int_bool_signature) \ + jvmci_method(CallNonvirtualObjectMethod, GetMethodID, call_special, JVMCIObject, HotSpotJVMCIRuntime, isIntrinsicSupported, int_bool_signature) \ jvmci_method(CallNonvirtualVoidMethod, GetMethodID, call_special, void, HotSpotJVMCIRuntime, bootstrapFinished, void_method_signature) \ jvmci_method(CallNonvirtualVoidMethod, GetMethodID, call_special, void, HotSpotJVMCIRuntime, shutdown, void_method_signature) \ jvmci_method(CallStaticObjectMethod, GetStaticMethodID, call_static, JVMCIObject, HotSpotJVMCIRuntime, runtime, runtime_signature) \ diff --git a/src/hotspot/share/jvmci/jvmciRuntime.cpp b/src/hotspot/share/jvmci/jvmciRuntime.cpp index 9dc0e381df937..504fbfcb1b078 100644 --- a/src/hotspot/share/jvmci/jvmciRuntime.cpp +++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp @@ -2050,6 +2050,16 @@ bool JVMCIRuntime::is_gc_supported(JVMCIEnv* JVMCIENV, CollectedHeap::Name name) return JVMCIENV->call_HotSpotJVMCIRuntime_isGCSupported(receiver, (int) name); } +bool JVMCIRuntime::is_intrinsic_supported(JVMCIEnv* JVMCIENV, jint id) { + JVMCI_EXCEPTION_CONTEXT + + JVMCIObject receiver = get_HotSpotJVMCIRuntime(JVMCIENV); + if (JVMCIENV->has_pending_exception()) { + fatal_exception(JVMCIENV, "Exception during HotSpotJVMCIRuntime initialization"); + } + return JVMCIENV->call_HotSpotJVMCIRuntime_isIntrinsicSupported(receiver, id); +} + // ------------------------------------------------------------------ JVMCI::CodeInstallResult JVMCIRuntime::register_method(JVMCIEnv* JVMCIENV, const methodHandle& method, diff --git a/src/hotspot/share/jvmci/jvmciRuntime.hpp b/src/hotspot/share/jvmci/jvmciRuntime.hpp index 123cfde15ac63..bc5bee4edebee 100644 --- a/src/hotspot/share/jvmci/jvmciRuntime.hpp +++ b/src/hotspot/share/jvmci/jvmciRuntime.hpp @@ -431,6 +431,9 @@ class JVMCIRuntime: public CHeapObj { // Determines if the GC identified by `name` is supported by the JVMCI compiler. bool is_gc_supported(JVMCIEnv* JVMCIENV, CollectedHeap::Name name); + // Determines if the intrinsic identified by `id` is supported by the JVMCI compiler. + bool is_intrinsic_supported(JVMCIEnv* JVMCIENV, jint id); + // Register the result of a compilation. JVMCI::CodeInstallResult register_method(JVMCIEnv* JVMCIENV, const methodHandle& target, diff --git a/src/hotspot/share/jvmci/vmSymbols_jvmci.hpp b/src/hotspot/share/jvmci/vmSymbols_jvmci.hpp index 13d81d9f2864f..c0a7afe2b63cf 100644 --- a/src/hotspot/share/jvmci/vmSymbols_jvmci.hpp +++ b/src/hotspot/share/jvmci/vmSymbols_jvmci.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -81,6 +81,7 @@ template(compileMethod_name, "compileMethod") \ template(compileMethod_signature, "(Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethod;IJI)Ljdk/vm/ci/hotspot/HotSpotCompilationRequestResult;") \ template(isGCSupported_name, "isGCSupported") \ + template(isIntrinsicSupported_name, "isIntrinsicSupported") \ template(fromMetaspace_name, "fromMetaspace") \ template(method_fromMetaspace_signature, "(JLjdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl;)Ljdk/vm/ci/hotspot/HotSpotResolvedJavaMethod;") \ template(constantPool_fromMetaspace_signature, "(J)Ljdk/vm/ci/hotspot/HotSpotConstantPool;") \ diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java index 87cd10b400f10..3dcf855ff230f 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotJVMCIRuntime.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -987,6 +987,12 @@ private boolean isGCSupported(int gcIdentifier) { return getCompiler().isGCSupported(gcIdentifier); } + @SuppressWarnings("try") + @VMEntryPoint + private boolean isIntrinsicSupported(int intrinsicIdentifier) { + return getCompiler().isIntrinsicSupported(intrinsicIdentifier); + } + /** * Guard to ensure shut down actions are performed by at most one thread. */ diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfigStore.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfigStore.java index 0ee69f135c942..c6735cef5f64c 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfigStore.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfigStore.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -82,6 +82,27 @@ public List getIntrinsics() { return Collections.unmodifiableList(vmIntrinsics); } + /** + * Gets the VM intrinsic description by its ID. + */ + public VMIntrinsicMethod getIntrinsic(int intrinsicID) { + if (intrinsicID >= 1 && intrinsicID <= vmIntrinsics.size()) { + // valid intrinsicID starts from 1 + VMIntrinsicMethod intrinsic = vmIntrinsics.get(intrinsicID - 1); + // We speculate that vmIntrinsics are sorted by ID + if (intrinsic.id == intrinsicID) { + return intrinsic; + } + } + // Assumption failed, fall back to iteration + for (VMIntrinsicMethod intrinsic : vmIntrinsics) { + if (intrinsic.id == intrinsicID) { + return intrinsic; + } + } + return null; + } + final HashMap vmFields; final HashMap vmConstants; final HashMap vmAddresses; diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/runtime/JVMCICompiler.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/runtime/JVMCICompiler.java index bbb9c79e9f56a..accd9e0149028 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/runtime/JVMCICompiler.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/runtime/JVMCICompiler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,4 +44,15 @@ public interface JVMCICompiler { default boolean isGCSupported(int gcIdentifier) { return true; } + + /** + * Determines if this compiler supports the {@code intrinsicIdentifier} intrinsic. The default + * implementation of this method returns false as that is the effective answer given by a + * {@link JVMCICompiler} before this method was added. + * + * @param intrinsicIdentifier intrinsic identifier defined in vmIntrinsics.hpp. + */ + default boolean isIntrinsicSupported(int intrinsicIdentifier) { + return false; + } } From 07ebda54f290cc17c6682abd26ceca2868488a63 Mon Sep 17 00:00:00 2001 From: Inigo Mediavilla Saiz Date: Wed, 19 Jun 2024 10:35:32 +0000 Subject: [PATCH 036/102] 8334215: serviceability/dcmd/thread/PrintMountedVirtualThread.java failing with JTREG_TEST_THREAD_FACTORY=Virtual Reviewed-by: dholmes --- src/hotspot/share/runtime/threads.cpp | 7 +++++-- .../dcmd/thread/PrintMountedVirtualThread.java | 17 ++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/runtime/threads.cpp b/src/hotspot/share/runtime/threads.cpp index e65470ac52692..9800f85dfe44a 100644 --- a/src/hotspot/share/runtime/threads.cpp +++ b/src/hotspot/share/runtime/threads.cpp @@ -1332,8 +1332,11 @@ void Threads::print_on(outputStream* st, bool print_stacks, if (p->is_vthread_mounted()) { const oop vt = p->vthread(); assert(vt != nullptr, "vthread should not be null when vthread is mounted"); - st->print_cr(" Mounted virtual thread \"%s\" #" INT64_FORMAT, JavaThread::name_for(vt), (int64_t)java_lang_Thread::thread_id(vt)); - p->print_vthread_stack_on(st); + // JavaThread._vthread can refer to the carrier thread. Print only if _vthread refers to a virtual thread. + if (vt != thread_oop) { + st->print_cr(" Mounted virtual thread #" INT64_FORMAT, (int64_t)java_lang_Thread::thread_id(vt)); + p->print_vthread_stack_on(st); + } } } } diff --git a/test/hotspot/jtreg/serviceability/dcmd/thread/PrintMountedVirtualThread.java b/test/hotspot/jtreg/serviceability/dcmd/thread/PrintMountedVirtualThread.java index bffe4c266a478..04163d7536a1c 100644 --- a/test/hotspot/jtreg/serviceability/dcmd/thread/PrintMountedVirtualThread.java +++ b/test/hotspot/jtreg/serviceability/dcmd/thread/PrintMountedVirtualThread.java @@ -26,7 +26,6 @@ import jdk.test.lib.process.OutputAnalyzer; import org.junit.Test; -import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; @@ -41,16 +40,18 @@ public class PrintMountedVirtualThread { public void run(CommandExecutor executor) throws InterruptedException { var shouldFinish = new AtomicBoolean(false); - var started = new CountDownLatch(1); + var started = new AtomicBoolean(); final Runnable runnable = new DummyRunnable(shouldFinish, started); try { Thread vthread = Thread.ofVirtual().name("Dummy Vthread").start(runnable); - started.await(); + while (!started.get()) { + Thread.sleep(10); + } /* Execute */ OutputAnalyzer output = executor.execute("Thread.print"); output.shouldMatch(".*at " + Pattern.quote(DummyRunnable.class.getName()) + "\\.run.*"); output.shouldMatch(".*at " + Pattern.quote(DummyRunnable.class.getName()) + "\\.compute.*"); - output.shouldMatch("Mounted virtual thread " + "\"Dummy Vthread\"" + " #" + vthread.threadId()); + output.shouldMatch("Mounted virtual thread " + "#" + vthread.threadId()); } finally { shouldFinish.set(true); @@ -63,11 +64,10 @@ public void jmx() throws InterruptedException { } static class DummyRunnable implements Runnable { - private final AtomicBoolean shouldFinish; - private final CountDownLatch started; + private final AtomicBoolean started; - public DummyRunnable(AtomicBoolean shouldFinish, CountDownLatch started) { + public DummyRunnable(AtomicBoolean shouldFinish, AtomicBoolean started) { this.shouldFinish = shouldFinish; this.started = started; } @@ -77,12 +77,11 @@ public void run() { } void compute() { - started.countDown(); + started.set(true); while (!shouldFinish.get()) { Thread.onSpinWait(); } } } - } From 7b3a96d57023e8a7cf495e2d7c551976f0e5656b Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Wed, 19 Jun 2024 10:45:34 +0000 Subject: [PATCH 037/102] 8334488: Improve error for illegal early access from nested class Reviewed-by: mcimadamore --- .../classes/com/sun/tools/javac/comp/Attr.java | 3 +-- .../classes/com/sun/tools/javac/comp/Enter.java | 1 + .../AnonymousInSuperCallNegTest.out | 2 +- .../tools/javac/LocalClassCtorPrologue.out | 2 +- .../EarlyInnerAccessErrorMessageTest.java | 16 ++++++++++++++++ .../EarlyInnerAccessErrorMessageTest.out | 4 ++++ .../tools/javac/SuperInit/EarlyLocalClass.out | 2 +- 7 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.java create mode 100644 test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.out diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 533541bd108ee..08c37fc5aa4ba 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -950,7 +950,6 @@ public void visitClassDef(JCClassDecl tree) { Optional.ofNullable(env.info.attributionMode.isSpeculative ? argumentAttr.withLocalCacheContext() : null); boolean ctorProloguePrev = env.info.ctorPrologue; - env.info.ctorPrologue = false; try { // Local and anonymous classes have not been entered yet, so we need to // do it now. @@ -995,7 +994,7 @@ public void visitMethodDef(JCMethodDecl tree) { Lint lint = env.info.lint.augment(m); Lint prevLint = chk.setLint(lint); boolean ctorProloguePrev = env.info.ctorPrologue; - env.info.ctorPrologue = false; + Assert.check(!env.info.ctorPrologue); MethodSymbol prevMethod = chk.setMethod(m); try { deferredLintHandler.flush(tree.pos(), lint); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java index 7478ef1c907c8..926be3b6e267d 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java @@ -209,6 +209,7 @@ public Env classEnv(JCClassDecl tree, Env env) { localEnv.info.lint = null; // leave this to be filled in by Attr, // when annotations have been processed localEnv.info.isAnonymousDiamond = TreeInfo.isDiamond(env.tree); + localEnv.info.ctorPrologue = false; return localEnv; } diff --git a/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out b/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out index 140521689a095..c04b45bce1e7d 100644 --- a/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out +++ b/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out @@ -1,2 +1,2 @@ -AnonymousInSuperCallNegTest.java:23:49: compiler.err.no.encl.instance.of.type.in.scope: AnonymousInSuperCallNegTest.JavacBug +AnonymousInSuperCallNegTest.java:23:49: compiler.err.cant.ref.before.ctor.called: x 1 error diff --git a/test/langtools/tools/javac/LocalClassCtorPrologue.out b/test/langtools/tools/javac/LocalClassCtorPrologue.out index f1a999af491a7..65f3418825d89 100644 --- a/test/langtools/tools/javac/LocalClassCtorPrologue.out +++ b/test/langtools/tools/javac/LocalClassCtorPrologue.out @@ -1,4 +1,4 @@ -LocalClassCtorPrologue.java:16:17: compiler.err.no.encl.instance.of.type.in.scope: LocalClassCtorPrologue +LocalClassCtorPrologue.java:16:17: compiler.err.cant.ref.before.ctor.called: x - compiler.note.preview.filename: LocalClassCtorPrologue.java, DEFAULT - compiler.note.preview.recompile 1 error diff --git a/test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.java b/test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.java new file mode 100644 index 0000000000000..a8ee3a2aea5c2 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.java @@ -0,0 +1,16 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8334488 + * @summary Verify the error message generated for early access from inner class + * @compile/fail/ref=EarlyInnerAccessErrorMessageTest.out -XDrawDiagnostics EarlyInnerAccessErrorMessageTest.java + * @enablePreview + */ +public class EarlyInnerAccessErrorMessageTest { + int x; + EarlyInnerAccessErrorMessageTest() { + class Inner { + { System.out.println(x); } + } + super(); + } +} diff --git a/test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.out b/test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.out new file mode 100644 index 0000000000000..a8d690a4c2361 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/EarlyInnerAccessErrorMessageTest.out @@ -0,0 +1,4 @@ +EarlyInnerAccessErrorMessageTest.java:12:34: compiler.err.cant.ref.before.ctor.called: x +- compiler.note.preview.filename: EarlyInnerAccessErrorMessageTest.java, DEFAULT +- compiler.note.preview.recompile +1 error diff --git a/test/langtools/tools/javac/SuperInit/EarlyLocalClass.out b/test/langtools/tools/javac/SuperInit/EarlyLocalClass.out index 390b68ea2c9af..ee01f9c403d5b 100644 --- a/test/langtools/tools/javac/SuperInit/EarlyLocalClass.out +++ b/test/langtools/tools/javac/SuperInit/EarlyLocalClass.out @@ -1,4 +1,4 @@ -EarlyLocalClass.java:12:32: compiler.err.no.encl.instance.of.type.in.scope: EarlyLocalClass +EarlyLocalClass.java:12:32: compiler.err.cant.ref.before.ctor.called: this - compiler.note.preview.filename: EarlyLocalClass.java, DEFAULT - compiler.note.preview.recompile 1 error From 50bed6c67b1edd7736bdf79308d135a4e1047ff0 Mon Sep 17 00:00:00 2001 From: Daniel Fuchs Date: Wed, 19 Jun 2024 10:54:13 +0000 Subject: [PATCH 038/102] 8334297: (so) java/nio/channels/SocketChannel/OpenLeak.java should not depend on SecurityManager Reviewed-by: alanb --- .../nio/channels/SocketChannel/OpenLeak.java | 104 ++++++++++++++++-- 1 file changed, 93 insertions(+), 11 deletions(-) diff --git a/test/jdk/java/nio/channels/SocketChannel/OpenLeak.java b/test/jdk/java/nio/channels/SocketChannel/OpenLeak.java index 8d8673355efb5..c7eed1f27a052 100644 --- a/test/jdk/java/nio/channels/SocketChannel/OpenLeak.java +++ b/test/jdk/java/nio/channels/SocketChannel/OpenLeak.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,28 +25,110 @@ * @bug 6548464 * @summary SocketChannel.open(SocketAddress) leaks file descriptor if * connection cannot be established + * @requires vm.flagless * @build OpenLeak - * @run main/othervm -Djava.security.manager=allow OpenLeak + * @run junit/othervm OpenLeak */ +import java.io.IOException; +import java.net.ConnectException; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.SocketAddress; import java.nio.channels.SocketChannel; +import java.nio.channels.UnresolvedAddressException; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import static org.junit.jupiter.api.Assertions.assertThrows; + public class OpenLeak { - public static void main(String[] args) throws Exception { - InetAddress lh = InetAddress.getLocalHost(); - InetSocketAddress isa = new InetSocketAddress(lh, 12345); + static final String OS_NAME = System.getProperty("os.name").toLowerCase(Locale.ROOT); + static final boolean IS_WINDOWS_2016 = OS_NAME.contains("windows") && OS_NAME.contains("2016"); + + // On Windows Server 2016 trying to connect to port 47 consumes the + // whole connect timeout - which makes the test fail in timeout. + // We skip this part of the test on Windows Server 2016 + static final boolean TEST_WITH_RESERVED_PORT = !IS_WINDOWS_2016; + + private static final int MAX_LOOP = 250000; - System.setSecurityManager( new SecurityManager() ); - for (int i=0; i<100000; i++) { - try { - SocketChannel.open(isa); - throw new RuntimeException("This should not happen"); - } catch (SecurityException x) { } + + // Try to find a suitable port to provoke a "Connection Refused" + // error. + private static InetSocketAddress findSuitableRefusedAddress(InetSocketAddress isa) + throws IOException { + if (!TEST_WITH_RESERVED_PORT) return null; + var addr = isa.getAddress(); + try (SocketChannel sc1 = SocketChannel.open(isa)) { + // If we manage to connect, let's try to use some other + // port. + // port 51 is reserved too - there should be nothing there... + isa = new InetSocketAddress(addr, 51); + try (SocketChannel sc2 = SocketChannel.open(isa)) { + } + // OK, last attempt... + // port 61 is reserved too - there should be nothing there... + isa = new InetSocketAddress(addr, 61); + try (SocketChannel sc3 = SocketChannel.open(isa)) { + } + System.err.println("Could not find a suitable port"); + return null; + } catch (ConnectException x) { } + return isa; + } + + private static InetSocketAddress createUnresolved(InetSocketAddress isa, InetSocketAddress def) { + var sa = isa == null ? def : isa; + return InetSocketAddress.createUnresolved(sa.getHostString(), sa.getPort()); + } + + // Builds a list of test cases + static List testCases() throws Exception { + InetAddress lo = InetAddress.getLoopbackAddress(); + + // Try to find a suitable port that will cause a + // Connection Refused exception + // port 47 is reserved - there should be nothing there... + InetSocketAddress def = new InetSocketAddress(lo, 47); + InetSocketAddress isa = findSuitableRefusedAddress(def); + InetSocketAddress sa = createUnresolved(isa, def); + + final List cases = new ArrayList<>(); + cases.add(new Object[]{sa, UnresolvedAddressException.class}); + if (isa != null) { + cases.add(new Object[]{isa, ConnectException.class}); + } + return cases; + } + + @ParameterizedTest + @MethodSource("testCases") + public void test(SocketAddress sa, Class expectedException) throws Exception { + System.err.printf("%nExpecting %s for %s%n", expectedException, sa); + + int i = 0; + try { + for (i = 0; i < MAX_LOOP; i++) { + Throwable x = + assertThrows(expectedException, () -> SocketChannel.open(sa)); + if (i < 5 || i >= MAX_LOOP - 5) { + // print a message for the first five and last 5 exceptions + System.err.println(x); + } + } + } catch (Throwable t) { + System.err.println("Failed at " + i + " with " + t); + throw t; + } } } From 01ee4241b76e78ca67803c4b083fcedecef1c96c Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Wed, 19 Jun 2024 15:15:30 +0000 Subject: [PATCH 039/102] 8294960: Convert java.base/java.lang.invoke package to use the Classfile API to generate lambdas and method handles Co-authored-by: Claes Redestad Reviewed-by: redestad, liach --- .../java/lang/invoke/ClassSpecializer.java | 502 +++--- .../lang/invoke/GenerateJLIClassesHelper.java | 30 +- .../invoke/InnerClassLambdaMetafactory.java | 552 +++---- .../lang/invoke/InvokerBytecodeGenerator.java | 1454 +++++++---------- .../classes/java/lang/invoke/LambdaForm.java | 20 +- .../java/lang/invoke/MethodHandleImpl.java | 68 +- .../java/lang/invoke/MethodHandles.java | 28 +- .../classes/java/lang/invoke/MethodType.java | 20 +- .../invoke/TypeConvertingMethodAdapter.java | 296 ++-- .../classfile/impl/StackMapGenerator.java | 43 +- test/hotspot/jtreg/ProblemList.txt | 1 + 11 files changed, 1298 insertions(+), 1716 deletions(-) diff --git a/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java b/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java index a5eb681fb8823..cca05a906ff08 100644 --- a/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java +++ b/src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java @@ -25,13 +25,12 @@ package java.lang.invoke; -import jdk.internal.loader.BootLoader; -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.internal.org.objectweb.asm.FieldVisitor; -import jdk.internal.org.objectweb.asm.MethodVisitor; -import jdk.internal.vm.annotation.Stable; -import sun.invoke.util.BytecodeName; - +import java.lang.classfile.*; +import java.lang.classfile.attribute.ExceptionsAttribute; +import java.lang.classfile.attribute.SourceFileAttribute; +import java.lang.constant.ClassDesc; +import java.lang.constant.MethodTypeDesc; +import java.lang.invoke.LambdaForm.BasicType; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @@ -42,12 +41,19 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; -import static java.lang.invoke.LambdaForm.*; +import jdk.internal.constant.MethodTypeDescImpl; +import jdk.internal.constant.ReferenceClassDescImpl; +import jdk.internal.loader.BootLoader; +import jdk.internal.vm.annotation.Stable; +import sun.invoke.util.BytecodeName; +import sun.invoke.util.Wrapper; + +import static java.lang.classfile.ClassFile.*; +import static java.lang.constant.ConstantDescs.*; import static java.lang.invoke.MethodHandleNatives.Constants.REF_getStatic; import static java.lang.invoke.MethodHandleNatives.Constants.REF_putStatic; import static java.lang.invoke.MethodHandleStatics.*; import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; -import static jdk.internal.org.objectweb.asm.Opcodes.*; /** * Class specialization code. @@ -57,6 +63,10 @@ */ /*non-public*/ abstract class ClassSpecializer.SpeciesData> { + + private static final ClassDesc CD_LambdaForm = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/LambdaForm;"); + private static final ClassDesc CD_BoundMethodHandle = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/BoundMethodHandle;"); + private final Class topClass; private final Class keyType; private final Class metaType; @@ -404,7 +414,7 @@ protected String deriveTypeString() { buf.append(basicType.basicTypeChar()); } else { buf.append('V'); - end.append(classSig(type)); + end.append(type.descriptorString()); } } String typeString; @@ -572,8 +582,9 @@ Class generateConcreteSpeciesCode(String className, ClassSpecialize } // These are named like constants because there is only one per specialization scheme: - private final String SPECIES_DATA = classBCName(metaType); - private final String SPECIES_DATA_SIG = classSig(SPECIES_DATA); + + private final ClassDesc CD_SPECIES_DATA = classDesc(metaType); + private final MethodTypeDesc MTD_SPECIES_DATA = MethodTypeDescImpl.ofValidated(CD_SPECIES_DATA); private final String SPECIES_DATA_NAME = sdAccessor.getName(); private final int SPECIES_DATA_MODS = sdAccessor.getModifiers(); private final List TRANSFORM_NAMES; // derived from transformMethods @@ -595,268 +606,207 @@ Class generateConcreteSpeciesCode(String className, ClassSpecialize TRANSFORM_TYPES = List.of(tts.toArray(new MethodType[0])); TRANSFORM_MODS = List.of(tms.toArray(new Integer[0])); } + private static final MethodTypeDesc MTD_TRANFORM_HELPER = MethodTypeDescImpl.ofValidated(CD_MethodHandle, CD_int); private static final int ACC_PPP = ACC_PUBLIC | ACC_PRIVATE | ACC_PROTECTED; /*non-public*/ byte[] generateConcreteSpeciesCodeFile(String className0, ClassSpecializer.SpeciesData speciesData) { - final String className = classBCName(className0); - final String superClassName = classBCName(speciesData.deriveSuperClass()); - - final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES); - final int NOT_ACC_PUBLIC = 0; // not ACC_PUBLIC - cw.visit(CLASSFILE_VERSION, NOT_ACC_PUBLIC + ACC_FINAL + ACC_SUPER, className, null, superClassName, null); - - final String sourceFile = className.substring(className.lastIndexOf('.')+1); - cw.visitSource(sourceFile, null); - - // emit static types and BMH_SPECIES fields - FieldVisitor fw = cw.visitField(NOT_ACC_PUBLIC + ACC_STATIC, sdFieldName, SPECIES_DATA_SIG, null, null); - fw.visitAnnotation(STABLE_SIG, true); - fw.visitEnd(); - - // handy holder for dealing with groups of typed values (ctor arguments and fields) - class Var { - final int index; - final String name; - final Class type; - final String desc; - final BasicType basicType; - final int slotIndex; - Var(int index, int slotIndex) { - this.index = index; - this.slotIndex = slotIndex; - name = null; type = null; desc = null; - basicType = BasicType.V_TYPE; - } - Var(String name, Class type, Var prev) { - int slotIndex = prev.nextSlotIndex(); - int index = prev.nextIndex(); - if (name == null) name = "x"; - if (name.endsWith("#")) - name = name.substring(0, name.length()-1) + index; - assert(!type.equals(void.class)); - String desc = classSig(type); - BasicType basicType = BasicType.basicType(type); - this.index = index; - this.name = name; - this.type = type; - this.desc = desc; - this.basicType = basicType; - this.slotIndex = slotIndex; - } - Var lastOf(List vars) { - int n = vars.size(); - return (n == 0 ? this : vars.get(n-1)); - } - List fromTypes(List types) { - Var prev = this; - ArrayList result = new ArrayList<>(types.size()); - int i = 0; - for (X x : types) { - String vn = name; - Class vt; - if (x instanceof Class cl) { - vt = cl; - // make the names friendlier if debugging - assert((vn = vn + "_" + (i++)) != null); - } else { - @SuppressWarnings("unchecked") - Var v = (Var) x; - vn = v.name; - vt = v.type; + final ClassDesc classDesc = ClassDesc.of(className0); + final ClassDesc superClassDesc = classDesc(speciesData.deriveSuperClass()); + return ClassFile.of().build(classDesc, clb -> { + clb.withFlags(ACC_FINAL | ACC_SUPER) + .withSuperclass(superClassDesc) + .with(SourceFileAttribute.of(classDesc.displayName())) + + // emit static types and BMH_SPECIES fields + .withField(sdFieldName, CD_SPECIES_DATA, ACC_STATIC); + + // handy holder for dealing with groups of typed values (ctor arguments and fields) + class Var { + final int index; + final String name; + final Class type; + final ClassDesc desc; + final BasicType basicType; + final int slotIndex; + Var(int index, int slotIndex) { + this.index = index; + this.slotIndex = slotIndex; + name = null; type = null; desc = null; + basicType = BasicType.V_TYPE; + } + Var(String name, Class type, Var prev) { + int slotIndex = prev.nextSlotIndex(); + int index = prev.nextIndex(); + if (name == null) name = "x"; + if (name.endsWith("#")) + name = name.substring(0, name.length()-1) + index; + assert(!type.equals(void.class)); + this.index = index; + this.name = name; + this.type = type; + this.desc = classDesc(type); + this.basicType = BasicType.basicType(type); + this.slotIndex = slotIndex; + } + Var lastOf(List vars) { + int n = vars.size(); + return (n == 0 ? this : vars.get(n-1)); + } + List fromTypes(List types) { + Var prev = this; + ArrayList result = new ArrayList<>(types.size()); + int i = 0; + for (X x : types) { + String vn = name; + Class vt; + if (x instanceof Class cl) { + vt = cl; + // make the names friendlier if debugging + assert((vn = vn + "_" + (i++)) != null); + } else { + @SuppressWarnings("unchecked") + Var v = (Var) x; + vn = v.name; + vt = v.type; + } + prev = new Var(vn, vt, prev); + result.add(prev); } - prev = new Var(vn, vt, prev); - result.add(prev); + return result; } - return result; - } - int slotSize() { return basicType.basicTypeSlots(); } - int nextIndex() { return index + (slotSize() == 0 ? 0 : 1); } - int nextSlotIndex() { return slotIndex >= 0 ? slotIndex + slotSize() : slotIndex; } - boolean isInHeap() { return slotIndex < 0; } - void emitVarInstruction(int asmop, MethodVisitor mv) { - if (asmop == ALOAD) - asmop = typeLoadOp(basicType.basicTypeChar()); - else - throw new AssertionError("bad op="+asmop+" for desc="+desc); - mv.visitVarInsn(asmop, slotIndex); - } - public void emitFieldInsn(int asmop, MethodVisitor mv) { - mv.visitFieldInsn(asmop, className, name, desc); - } - } - - final Var NO_THIS = new Var(0, 0), - AFTER_THIS = new Var(0, 1), - IN_HEAP = new Var(0, -1); - - // figure out the field types - final List> fieldTypes = speciesData.fieldTypes(); - final List fields = new ArrayList<>(fieldTypes.size()); - { - Var nextF = IN_HEAP; - for (Class ft : fieldTypes) { - String fn = chooseFieldName(ft, nextF.nextIndex()); - nextF = new Var(fn, ft, nextF); - fields.add(nextF); + int slotSize() { return basicType.basicTypeSlots(); } + int nextIndex() { return index + (slotSize() == 0 ? 0 : 1); } + int nextSlotIndex() { return slotIndex >= 0 ? slotIndex + slotSize() : slotIndex; } + boolean isInHeap() { return slotIndex < 0; } + void emitLoadInstruction(CodeBuilder cob) { + cob.loadLocal(basicType.btKind, slotIndex); + } } - } - // emit bound argument fields - for (Var field : fields) { - cw.visitField(ACC_FINAL, field.name, field.desc, null, null).visitEnd(); - } - - MethodVisitor mv; - - // emit implementation of speciesData() - mv = cw.visitMethod((SPECIES_DATA_MODS & ACC_PPP) + ACC_FINAL, - SPECIES_DATA_NAME, "()" + SPECIES_DATA_SIG, null, null); - mv.visitCode(); - mv.visitFieldInsn(GETSTATIC, className, sdFieldName, SPECIES_DATA_SIG); - mv.visitInsn(ARETURN); - mv.visitMaxs(0, 0); - mv.visitEnd(); - - // figure out the constructor arguments - MethodType superCtorType = ClassSpecializer.this.baseConstructorType(); - MethodType thisCtorType = superCtorType.appendParameterTypes(fieldTypes); - - // emit constructor - { - mv = cw.visitMethod(ACC_PRIVATE, - "", methodSig(thisCtorType), null, null); - mv.visitCode(); - mv.visitVarInsn(ALOAD, 0); // this - - final List ctorArgs = AFTER_THIS.fromTypes(superCtorType.parameterList()); - for (Var ca : ctorArgs) { - ca.emitVarInstruction(ALOAD, mv); + final Var NO_THIS = new Var(0, 0), + AFTER_THIS = new Var(0, 1), + IN_HEAP = new Var(0, -1); + + // figure out the field types + final List> fieldTypes = speciesData.fieldTypes(); + final List fields = new ArrayList<>(fieldTypes.size()); + { + Var nextF = IN_HEAP; + for (Class ft : fieldTypes) { + String fn = chooseFieldName(ft, nextF.nextIndex()); + nextF = new Var(fn, ft, nextF); + fields.add(nextF); + } } - // super(ca...) - mv.visitMethodInsn(INVOKESPECIAL, superClassName, - "", methodSig(superCtorType), false); - - // store down fields - Var lastFV = AFTER_THIS.lastOf(ctorArgs); - for (Var f : fields) { - // this.argL1 = argL1 - mv.visitVarInsn(ALOAD, 0); // this - lastFV = new Var(f.name, f.type, lastFV); - lastFV.emitVarInstruction(ALOAD, mv); - f.emitFieldInsn(PUTFIELD, mv); + // emit bound argument fields + for (Var field : fields) { + clb.withField(field.name, field.desc, ACC_FINAL); } - mv.visitInsn(RETURN); - mv.visitMaxs(0, 0); - mv.visitEnd(); - } + // emit implementation of speciesData() + clb.withMethodBody(SPECIES_DATA_NAME, MTD_SPECIES_DATA, (SPECIES_DATA_MODS & ACC_PPP) | ACC_FINAL, + cob -> cob.getstatic(classDesc, sdFieldName, CD_SPECIES_DATA) + .areturn()); - // emit make() ...factory method wrapping constructor - { - MethodType ftryType = thisCtorType.changeReturnType(topClass()); - mv = cw.visitMethod(NOT_ACC_PUBLIC + ACC_STATIC, - "make", methodSig(ftryType), null, null); - mv.visitCode(); - // make instance - mv.visitTypeInsn(NEW, className); - mv.visitInsn(DUP); - // load factory method arguments: ctarg... and arg... - for (Var v : NO_THIS.fromTypes(ftryType.parameterList())) { - v.emitVarInstruction(ALOAD, mv); - } + // figure out the constructor arguments + MethodType superCtorType = ClassSpecializer.this.baseConstructorType(); + MethodType thisCtorType = superCtorType.appendParameterTypes(fieldTypes); - // finally, invoke the constructor and return - mv.visitMethodInsn(INVOKESPECIAL, className, - "", methodSig(thisCtorType), false); - mv.visitInsn(ARETURN); - mv.visitMaxs(0, 0); - mv.visitEnd(); - } + // emit constructor + clb.withMethodBody(INIT_NAME, methodDesc(thisCtorType), ACC_PRIVATE, cob -> { + cob.aload(0); // this - // For each transform, emit the customized override of the transform method. - // This method mixes together some incoming arguments (from the transform's - // static type signature) with the field types themselves, and passes - // the resulting mish-mosh of values to a method handle produced by - // the species itself. (Typically this method handle is the factory - // method of this species or a related one.) - for (int whichtm = 0; whichtm < TRANSFORM_NAMES.size(); whichtm++) { - final String TNAME = TRANSFORM_NAMES.get(whichtm); - final MethodType TTYPE = TRANSFORM_TYPES.get(whichtm); - final int TMODS = TRANSFORM_MODS.get(whichtm); - mv = cw.visitMethod((TMODS & ACC_PPP) | ACC_FINAL, - TNAME, TTYPE.toMethodDescriptorString(), null, E_THROWABLE); - mv.visitCode(); - // return a call to the corresponding "transform helper", something like this: - // MY_SPECIES.transformHelper(whichtm).invokeBasic(ctarg, ..., argL0, ..., xarg) - mv.visitFieldInsn(GETSTATIC, className, - sdFieldName, SPECIES_DATA_SIG); - emitIntConstant(whichtm, mv); - mv.visitMethodInsn(INVOKEVIRTUAL, SPECIES_DATA, - "transformHelper", "(I)" + MH_SIG, false); - - List targs = AFTER_THIS.fromTypes(TTYPE.parameterList()); - List tfields = new ArrayList<>(fields); - // mix them up and load them for the transform helper: - List helperArgs = speciesData.deriveTransformHelperArguments(transformMethods.get(whichtm), whichtm, targs, tfields); - List> helperTypes = new ArrayList<>(helperArgs.size()); - for (Var ha : helperArgs) { - helperTypes.add(ha.basicType.basicTypeClass()); - if (ha.isInHeap()) { - assert(tfields.contains(ha)); - mv.visitVarInsn(ALOAD, 0); - ha.emitFieldInsn(GETFIELD, mv); - } else { - assert(targs.contains(ha)); - ha.emitVarInstruction(ALOAD, mv); + final List ctorArgs = AFTER_THIS.fromTypes(superCtorType.parameterList()); + for (Var ca : ctorArgs) { + ca.emitLoadInstruction(cob); } - } - - // jump into the helper (which is probably a factory method) - final Class rtype = TTYPE.returnType(); - final BasicType rbt = BasicType.basicType(rtype); - MethodType invokeBasicType = MethodType.methodType(rbt.basicTypeClass(), helperTypes); - mv.visitMethodInsn(INVOKEVIRTUAL, MH, - "invokeBasic", methodSig(invokeBasicType), false); - if (rbt == BasicType.L_TYPE) { - mv.visitTypeInsn(CHECKCAST, classBCName(rtype)); - mv.visitInsn(ARETURN); - } else { - throw newInternalError("NYI: transform of type "+rtype); - } - mv.visitMaxs(0, 0); - mv.visitEnd(); - } - cw.visitEnd(); - - return cw.toByteArray(); - } + // super(ca...) + cob.invokespecial(superClassDesc, INIT_NAME, methodDesc(superCtorType)); + + // store down fields + Var lastFV = AFTER_THIS.lastOf(ctorArgs); + for (Var f : fields) { + // this.argL1 = argL1 + cob.aload(0); // this + lastFV = new Var(f.name, f.type, lastFV); + lastFV.emitLoadInstruction(cob); + cob.putfield(classDesc, f.name, f.desc); + } - private int typeLoadOp(char t) { - return switch (t) { - case 'L' -> ALOAD; - case 'I' -> ILOAD; - case 'J' -> LLOAD; - case 'F' -> FLOAD; - case 'D' -> DLOAD; - default -> throw newInternalError("unrecognized type " + t); - }; - } + cob.return_(); + }); - private void emitIntConstant(int con, MethodVisitor mv) { - if (ICONST_M1 - ICONST_0 <= con && con <= ICONST_5 - ICONST_0) - mv.visitInsn(ICONST_0 + con); - else if (con == (byte) con) - mv.visitIntInsn(BIPUSH, con); - else if (con == (short) con) - mv.visitIntInsn(SIPUSH, con); - else { - mv.visitLdcInsn(con); - } + // emit make() ...factory method wrapping constructor + MethodType ftryType = thisCtorType.changeReturnType(topClass()); + clb.withMethodBody("make", methodDesc(ftryType), ACC_STATIC, cob -> { + // make instance + cob.new_(classDesc) + .dup(); + // load factory method arguments: ctarg... and arg... + for (Var v : NO_THIS.fromTypes(ftryType.parameterList())) { + v.emitLoadInstruction(cob); + } + // finally, invoke the constructor and return + cob.invokespecial(classDesc, INIT_NAME, methodDesc(thisCtorType)) + .areturn(); + }); + + // For each transform, emit the customized override of the transform method. + // This method mixes together some incoming arguments (from the transform's + // static type signature) with the field types themselves, and passes + // the resulting mish-mosh of values to a method handle produced by + // the species itself. (Typically this method handle is the factory + // method of this species or a related one.) + for (int i = 0; i < TRANSFORM_NAMES.size(); i++) { + final int whichtm = i; + final String TNAME = TRANSFORM_NAMES.get(whichtm); + final MethodType TTYPE = TRANSFORM_TYPES.get(whichtm); + final int TMODS = TRANSFORM_MODS.get(whichtm); + clb.withMethod(TNAME, methodDesc(TTYPE), (TMODS & ACC_PPP) | ACC_FINAL, mb -> { + mb.with(ExceptionsAttribute.ofSymbols(CD_Throwable)) + .withCode(cob -> { + // return a call to the corresponding "transform helper", something like this: + // MY_SPECIES.transformHelper(whichtm).invokeBasic(ctarg, ..., argL0, ..., xarg) + cob.getstatic(classDesc, sdFieldName, CD_SPECIES_DATA) + .loadConstant(whichtm) + .invokevirtual(CD_SPECIES_DATA, "transformHelper", MTD_TRANFORM_HELPER); + + List targs = AFTER_THIS.fromTypes(TTYPE.parameterList()); + List tfields = new ArrayList<>(fields); + // mix them up and load them for the transform helper: + List helperArgs = speciesData.deriveTransformHelperArguments(transformMethods.get(whichtm), whichtm, targs, tfields); + ClassDesc[] helperTypes = new ClassDesc[helperArgs.size()]; + for (int hi = 0; hi < helperTypes.length; hi++) { + Var ha = helperArgs.get(hi); + helperTypes[hi] = ha.basicType.basicTypeWrapper().basicClassDescriptor(); + if (ha.isInHeap()) { + assert(tfields.contains(ha)); + cob.aload(0); + cob.getfield(classDesc, ha.name, ha.desc); + } else { + assert(targs.contains(ha)); + ha.emitLoadInstruction(cob); + } + } + + // jump into the helper (which is probably a factory method) + final Class rtype = TTYPE.returnType(); + if (!rtype.isPrimitive()) { + cob.invokevirtual(CD_MethodHandle, "invokeBasic", MethodTypeDescImpl.ofValidated(CD_Object, helperTypes)) + .checkcast(classDesc(rtype)) + .areturn(); + } else { + throw newInternalError("NYI: transform of type "+rtype); + } + }); + }); + } + }); } // @@ -990,39 +940,25 @@ protected Factory makeFactory() { // Other misc helpers: - private static final String MH = "java/lang/invoke/MethodHandle"; - private static final String MH_SIG = "L" + MH + ";"; - private static final String STABLE = "jdk/internal/vm/annotation/Stable"; - private static final String STABLE_SIG = "L" + STABLE + ";"; - private static final String[] E_THROWABLE = new String[] { "java/lang/Throwable" }; - static { - assert(MH_SIG.equals(classSig(MethodHandle.class))); - assert(MH.equals(classBCName(MethodHandle.class))); - } - - static String methodSig(MethodType mt) { - return mt.toMethodDescriptorString(); - } - static String classSig(Class cls) { - if (cls.isPrimitive() || cls.isArray()) - return MethodType.methodType(cls).toMethodDescriptorString().substring(2); - return classSig(classBCName(cls)); - } - static String classSig(String bcName) { - assert(bcName.indexOf('.') < 0); - assert(!bcName.endsWith(";")); - assert(!bcName.startsWith("[")); - return "L" + bcName + ";"; - } - static String classBCName(Class cls) { - return classBCName(className(cls)); - } static String classBCName(String str) { assert(str.indexOf('/') < 0) : str; return str.replace('.', '/'); } - static String className(Class cls) { - assert(!cls.isArray() && !cls.isPrimitive()); - return cls.getName(); + + static ClassDesc classDesc(Class cls) { + return cls.isPrimitive() ? Wrapper.forPrimitiveType(cls).basicClassDescriptor() + : cls == Object.class ? CD_Object + : cls == MethodType.class ? CD_MethodType + : cls == LambdaForm.class ? CD_LambdaForm + : cls == BoundMethodHandle.class ? CD_BoundMethodHandle + : ReferenceClassDescImpl.ofValidated(cls.descriptorString()); + } + + static MethodTypeDesc methodDesc(MethodType mt) { + var params = new ClassDesc[mt.parameterCount()]; + for (int i = 0; i < params.length; i++) { + params[i] = classDesc(mt.parameterType(i)); + } + return MethodTypeDescImpl.ofValidated(classDesc(mt.returnType()), params); } } diff --git a/src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java b/src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java index 46eeb67de54c5..1e3f465f97dbd 100644 --- a/src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java +++ b/src/java.base/share/classes/java/lang/invoke/GenerateJLIClassesHelper.java @@ -25,10 +25,11 @@ package java.lang.invoke; -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.internal.org.objectweb.asm.Opcodes; import sun.invoke.util.Wrapper; +import java.lang.classfile.ClassFile; +import java.lang.classfile.attribute.SourceFileAttribute; +import java.lang.constant.ClassDesc; import java.util.ArrayList; import java.util.HashSet; import java.util.Map; @@ -38,10 +39,10 @@ import java.util.TreeSet; import java.util.stream.Stream; +import static java.lang.classfile.ClassFile.*; import static java.lang.invoke.LambdaForm.BasicType.*; -import static java.lang.invoke.MethodHandleStatics.CLASSFILE_VERSION; -import static java.lang.invoke.MethodTypeForm.*; import static java.lang.invoke.LambdaForm.Kind.*; +import static java.lang.invoke.MethodTypeForm.*; /** * Helper class to assist the GenerateJLIClassesPlugin to get access to @@ -557,19 +558,14 @@ static byte[] generateInvokersHolderClassBytes(String className, * a class with a specified name. */ private static byte[] generateCodeBytesForLFs(String className, String[] names, LambdaForm[] forms) { - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES); - cw.visit(CLASSFILE_VERSION, Opcodes.ACC_PRIVATE + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, - className, null, InvokerBytecodeGenerator.INVOKER_SUPER_NAME, null); - cw.visitSource(className.substring(className.lastIndexOf('/') + 1), null); - - for (int i = 0; i < forms.length; i++) { - InvokerBytecodeGenerator g - = new InvokerBytecodeGenerator(className, names[i], forms[i], forms[i].methodType()); - g.setClassWriter(cw); - g.addMethod(); - } - - return cw.toByteArray(); + return ClassFile.of().build(ClassDesc.ofInternalName(className), clb -> { + clb.withFlags(ACC_PRIVATE | ACC_FINAL | ACC_SUPER) + .withSuperclass(InvokerBytecodeGenerator.INVOKER_SUPER_DESC) + .with(SourceFileAttribute.of(className.substring(className.lastIndexOf('/') + 1))); + for (int i = 0; i < forms.length; i++) { + new InvokerBytecodeGenerator(className, names[i], forms[i], forms[i].methodType()).addMethod(clb); + } + }); } private static LambdaForm makeReinvokerFor(MethodType type) { diff --git a/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java b/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java index b4afbc098c96e..ce2547710a5cb 100644 --- a/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java +++ b/src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java @@ -26,23 +26,40 @@ package java.lang.invoke; import jdk.internal.misc.CDS; -import jdk.internal.org.objectweb.asm.*; import jdk.internal.util.ClassFileDumper; -import sun.invoke.util.BytecodeDescriptor; import sun.invoke.util.VerifyAccess; import sun.security.action.GetBooleanAction; import java.io.Serializable; -import java.lang.constant.ConstantDescs; +import java.lang.classfile.ClassBuilder; +import java.lang.classfile.ClassFile; +import java.lang.classfile.CodeBuilder; +import java.lang.classfile.FieldBuilder; +import java.lang.classfile.MethodBuilder; +import java.lang.classfile.Opcode; +import java.lang.classfile.TypeKind; +import java.lang.constant.ClassDesc; +import java.lang.constant.DynamicConstantDesc; +import java.lang.constant.MethodTypeDesc; import java.lang.reflect.Modifier; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; - -import static java.lang.invoke.MethodHandleStatics.CLASSFILE_VERSION; +import java.util.function.Consumer; + +import static java.lang.classfile.ClassFile.*; +import java.lang.classfile.attribute.ExceptionsAttribute; +import java.lang.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.MethodRefEntry; +import static java.lang.constant.ConstantDescs.*; import static java.lang.invoke.MethodHandles.Lookup.ClassOption.NESTMATE; import static java.lang.invoke.MethodHandles.Lookup.ClassOption.STRONG; import static java.lang.invoke.MethodType.methodType; -import static jdk.internal.org.objectweb.asm.Opcodes.*; +import jdk.internal.constant.ConstantUtils; +import jdk.internal.constant.MethodTypeDescImpl; +import jdk.internal.constant.ReferenceClassDescImpl; +import sun.invoke.util.Wrapper; /** * Lambda metafactory implementation which dynamically creates an @@ -51,42 +68,29 @@ * @see LambdaMetafactory */ /* package */ final class InnerClassLambdaMetafactory extends AbstractValidatingLambdaMetafactory { - private static final String METHOD_DESCRIPTOR_VOID = Type.getMethodDescriptor(Type.VOID_TYPE); - private static final String JAVA_LANG_OBJECT = "java/lang/Object"; - private static final String NAME_CTOR = ""; private static final String LAMBDA_INSTANCE_FIELD = "LAMBDA_INSTANCE$"; - - //Serialization support - private static final String NAME_SERIALIZED_LAMBDA = "java/lang/invoke/SerializedLambda"; - private static final String NAME_NOT_SERIALIZABLE_EXCEPTION = "java/io/NotSerializableException"; - private static final String DESCR_METHOD_WRITE_REPLACE = "()Ljava/lang/Object;"; - private static final String DESCR_METHOD_WRITE_OBJECT = "(Ljava/io/ObjectOutputStream;)V"; - private static final String DESCR_METHOD_READ_OBJECT = "(Ljava/io/ObjectInputStream;)V"; - - private static final String NAME_METHOD_WRITE_REPLACE = "writeReplace"; - private static final String NAME_METHOD_READ_OBJECT = "readObject"; - private static final String NAME_METHOD_WRITE_OBJECT = "writeObject"; - - private static final String DESCR_CLASS = "Ljava/lang/Class;"; - private static final String DESCR_STRING = "Ljava/lang/String;"; - private static final String DESCR_OBJECT = "Ljava/lang/Object;"; - private static final String DESCR_CTOR_SERIALIZED_LAMBDA - = "(" + DESCR_CLASS + DESCR_STRING + DESCR_STRING + DESCR_STRING + "I" - + DESCR_STRING + DESCR_STRING + DESCR_STRING + DESCR_STRING + "[" + DESCR_OBJECT + ")V"; - - private static final String DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION = "(Ljava/lang/String;)V"; - private static final String[] SER_HOSTILE_EXCEPTIONS = new String[] {NAME_NOT_SERIALIZABLE_EXCEPTION}; - private static final String[] EMPTY_STRING_ARRAY = new String[0]; + private static final ClassDesc[] EMPTY_CLASSDESC_ARRAY = ConstantUtils.EMPTY_CLASSDESC; + + // Static builders to avoid lambdas + record FieldFlags(int flags) implements Consumer { + @Override + public void accept(FieldBuilder fb) { + fb.withFlags(flags); + } + }; + record MethodBody(Consumer code) implements Consumer { + @Override + public void accept(MethodBuilder mb) { + mb.withCode(code); + } + }; // For dumping generated classes to disk, for debugging purposes private static final ClassFileDumper lambdaProxyClassFileDumper; private static final boolean disableEagerInitialization; - // condy to load implMethod from class data - private static final ConstantDynamic implMethodCondy; - static { // To dump the lambda proxy classes, set this system property: // -Djdk.invoke.LambdaMetafactory.dumpProxyClassFiles @@ -96,23 +100,18 @@ final String disableEagerInitializationKey = "jdk.internal.lambda.disableEagerInitialization"; disableEagerInitialization = GetBooleanAction.privilegedGetProperty(disableEagerInitializationKey); - - // condy to load implMethod from class data - MethodType classDataMType = methodType(Object.class, MethodHandles.Lookup.class, String.class, Class.class); - Handle classDataBsm = new Handle(H_INVOKESTATIC, Type.getInternalName(MethodHandles.class), "classData", - classDataMType.descriptorString(), false); - implMethodCondy = new ConstantDynamic(ConstantDescs.DEFAULT_NAME, MethodHandle.class.descriptorString(), classDataBsm); } // See context values in AbstractValidatingLambdaMetafactory - private final String implMethodClassName; // Name of type containing implementation "CC" + private final ClassDesc implMethodClassDesc; // Name of type containing implementation "CC" private final String implMethodName; // Name of implementation method "impl" - private final String implMethodDesc; // Type descriptor for implementation methods "(I)Ljava/lang/String;" + private final MethodTypeDesc implMethodDesc; // Type descriptor for implementation methods "(I)Ljava/lang/String;" private final MethodType constructorType; // Generated class constructor type "(CC)void" - private final ClassWriter cw; // ASM class writer + private final MethodTypeDesc constructorTypeDesc;// Type descriptor for the generated class constructor type "(CC)void" private final String[] argNames; // Generated names for the constructor arguments - private final String[] argDescs; // Type descriptors for the constructor arguments - private final String lambdaClassName; // Generated name for the generated class "X$$Lambda" + private final ClassDesc[] argDescs; // Type descriptors for the constructor arguments + private final String lambdaClassName; // Generated name for the generated class "X$$Lambda$1" + private final ClassDesc lambdaClassDesc; // Type descriptor for the generated class "X$$Lambda$1" private final boolean useImplMethodHandle; // use MethodHandle invocation instead of symbolic bytecode invocation /** @@ -168,11 +167,13 @@ public InnerClassLambdaMetafactory(MethodHandles.Lookup caller, super(caller, factoryType, interfaceMethodName, interfaceMethodType, implementation, dynamicMethodType, isSerializable, altInterfaces, altMethods); - implMethodClassName = implClass.getName().replace('.', '/'); + implMethodClassDesc = implClassDesc(implClass); implMethodName = implInfo.getName(); - implMethodDesc = implInfo.getMethodType().toMethodDescriptorString(); + implMethodDesc = methodDesc(implInfo.getMethodType()); constructorType = factoryType.changeReturnType(Void.TYPE); + constructorTypeDesc = methodDesc(constructorType); lambdaClassName = lambdaClassName(targetClass); + lambdaClassDesc = ClassDesc.ofInternalName(lambdaClassName); // If the target class invokes a protected method inherited from a // superclass in a different package, or does 'invokespecial', the // lambda class has no access to the resolved method, or does @@ -182,19 +183,19 @@ public InnerClassLambdaMetafactory(MethodHandles.Lookup caller, // situation by generating bridges in the target class) useImplMethodHandle = (Modifier.isProtected(implInfo.getModifiers()) && !VerifyAccess.isSamePackage(targetClass, implInfo.getDeclaringClass())) || - implKind == H_INVOKESPECIAL || - implKind == H_INVOKESTATIC && implClass.isHidden(); - cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); + implKind == MethodHandleInfo.REF_invokeSpecial || + implKind == MethodHandleInfo.REF_invokeStatic && implClass.isHidden(); int parameterCount = factoryType.parameterCount(); if (parameterCount > 0) { argNames = new String[parameterCount]; - argDescs = new String[parameterCount]; + argDescs = new ClassDesc[parameterCount]; for (int i = 0; i < parameterCount; i++) { argNames[i] = "arg$" + (i + 1); - argDescs[i] = BytecodeDescriptor.unparse(factoryType.parameterType(i)); + argDescs[i] = classDesc(factoryType.parameterType(i)); } } else { - argNames = argDescs = EMPTY_STRING_ARRAY; + argNames = EMPTY_STRING_ARRAY; + argDescs = EMPTY_CLASSDESC_ARRAY; } } @@ -300,65 +301,63 @@ private Class spinInnerClass() throws LambdaConversionException { * is not found */ private Class generateInnerClass() throws LambdaConversionException { - String[] interfaceNames; - String interfaceName = interfaceClass.getName().replace('.', '/'); + List interfaces; + ClassDesc interfaceDesc = classDesc(interfaceClass); boolean accidentallySerializable = !isSerializable && Serializable.class.isAssignableFrom(interfaceClass); if (altInterfaces.length == 0) { - interfaceNames = new String[]{interfaceName}; + interfaces = List.of(interfaceDesc); } else { // Assure no duplicate interfaces (ClassFormatError) - Set itfs = LinkedHashSet.newLinkedHashSet(altInterfaces.length + 1); - itfs.add(interfaceName); + Set itfs = LinkedHashSet.newLinkedHashSet(altInterfaces.length + 1); + itfs.add(interfaceDesc); for (Class i : altInterfaces) { - itfs.add(i.getName().replace('.', '/')); + itfs.add(classDesc(i)); accidentallySerializable |= !isSerializable && Serializable.class.isAssignableFrom(i); } - interfaceNames = itfs.toArray(new String[itfs.size()]); + interfaces = List.copyOf(itfs); } + final boolean finalAccidentallySerializable = accidentallySerializable; + final byte[] classBytes = ClassFile.of().build(lambdaClassDesc, new Consumer() { + @Override + public void accept(ClassBuilder clb) { + clb.withFlags(ACC_SUPER | ACC_FINAL | ACC_SYNTHETIC) + .withInterfaceSymbols(interfaces); + // Generate final fields to be filled in by constructor + for (int i = 0; i < argDescs.length; i++) { + clb.withField(argNames[i], argDescs[i], new FieldFlags(ACC_PRIVATE | ACC_FINAL)); + } - cw.visit(CLASSFILE_VERSION, ACC_SUPER + ACC_FINAL + ACC_SYNTHETIC, - lambdaClassName, null, - JAVA_LANG_OBJECT, interfaceNames); - - // Generate final fields to be filled in by constructor - for (int i = 0; i < argDescs.length; i++) { - FieldVisitor fv = cw.visitField(ACC_PRIVATE + ACC_FINAL, - argNames[i], - argDescs[i], - null, null); - fv.visitEnd(); - } + generateConstructor(clb); - generateConstructor(); + if (factoryType.parameterCount() == 0 && disableEagerInitialization) { + generateClassInitializer(clb); + } - if (factoryType.parameterCount() == 0 && disableEagerInitialization) { - generateClassInitializer(); - } + // Forward the SAM method + clb.withMethod(interfaceMethodName, + methodDesc(interfaceMethodType), + ACC_PUBLIC, + forwardingMethod(interfaceMethodType)); + + // Forward the bridges + if (altMethods != null) { + for (MethodType mt : altMethods) { + clb.withMethod(interfaceMethodName, + methodDesc(mt), + ACC_PUBLIC | ACC_BRIDGE, + forwardingMethod(mt)); + } + } - // Forward the SAM method - MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, interfaceMethodName, - interfaceMethodType.toMethodDescriptorString(), null, null); - new ForwardingMethodGenerator(mv).generate(interfaceMethodType); - - // Forward the altMethods - if (altMethods != null) { - for (MethodType mt : altMethods) { - mv = cw.visitMethod(ACC_PUBLIC, interfaceMethodName, - mt.toMethodDescriptorString(), null, null); - new ForwardingMethodGenerator(mv).generate(mt); + if (isSerializable) + generateSerializationFriendlyMethods(clb); + else if (finalAccidentallySerializable) + generateSerializationHostileMethods(clb); } - } - - if (isSerializable) - generateSerializationFriendlyMethods(); - else if (accidentallySerializable) - generateSerializationHostileMethods(); - - cw.visitEnd(); + }); // Define the generated class in this VM. - final byte[] classBytes = cw.toByteArray(); try { // this class is linked at the indy callsite; so define a hidden nestmate var classdata = useImplMethodHandle? implementation : null; @@ -373,237 +372,214 @@ else if (accidentallySerializable) /** * Generate a static field and a static initializer that sets this field to an instance of the lambda */ - private void generateClassInitializer() { - String lambdaTypeDescriptor = factoryType.returnType().descriptorString(); + private void generateClassInitializer(ClassBuilder clb) { + ClassDesc lambdaTypeDescriptor = classDesc(factoryType.returnType()); // Generate the static final field that holds the lambda singleton - FieldVisitor fv = cw.visitField(ACC_PRIVATE | ACC_STATIC | ACC_FINAL, - LAMBDA_INSTANCE_FIELD, lambdaTypeDescriptor, null, null); - fv.visitEnd(); + clb.withField(LAMBDA_INSTANCE_FIELD, lambdaTypeDescriptor, new FieldFlags(ACC_PRIVATE | ACC_STATIC | ACC_FINAL)); // Instantiate the lambda and store it to the static final field - MethodVisitor clinit = cw.visitMethod(ACC_STATIC, "", "()V", null, null); - clinit.visitCode(); - - clinit.visitTypeInsn(NEW, lambdaClassName); - clinit.visitInsn(Opcodes.DUP); - assert factoryType.parameterCount() == 0; - clinit.visitMethodInsn(INVOKESPECIAL, lambdaClassName, NAME_CTOR, constructorType.toMethodDescriptorString(), false); - clinit.visitFieldInsn(PUTSTATIC, lambdaClassName, LAMBDA_INSTANCE_FIELD, lambdaTypeDescriptor); - - clinit.visitInsn(RETURN); - clinit.visitMaxs(-1, -1); - clinit.visitEnd(); + clb.withMethod(CLASS_INIT_NAME, MTD_void, ACC_STATIC, new MethodBody(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + assert factoryType.parameterCount() == 0; + cob.new_(lambdaClassDesc) + .dup() + .invokespecial(lambdaClassDesc, INIT_NAME, constructorTypeDesc) + .putstatic(lambdaClassDesc, LAMBDA_INSTANCE_FIELD, lambdaTypeDescriptor) + .return_(); + } + })); } /** * Generate the constructor for the class */ - private void generateConstructor() { + private void generateConstructor(ClassBuilder clb) { // Generate constructor - MethodVisitor ctor = cw.visitMethod(ACC_PRIVATE, NAME_CTOR, - constructorType.toMethodDescriptorString(), null, null); - ctor.visitCode(); - ctor.visitVarInsn(ALOAD, 0); - ctor.visitMethodInsn(INVOKESPECIAL, JAVA_LANG_OBJECT, NAME_CTOR, - METHOD_DESCRIPTOR_VOID, false); - int parameterCount = factoryType.parameterCount(); - for (int i = 0, lvIndex = 0; i < parameterCount; i++) { - ctor.visitVarInsn(ALOAD, 0); - Class argType = factoryType.parameterType(i); - ctor.visitVarInsn(getLoadOpcode(argType), lvIndex + 1); - lvIndex += getParameterSize(argType); - ctor.visitFieldInsn(PUTFIELD, lambdaClassName, argNames[i], argDescs[i]); - } - ctor.visitInsn(RETURN); - // Maxs computed by ClassWriter.COMPUTE_MAXS, these arguments ignored - ctor.visitMaxs(-1, -1); - ctor.visitEnd(); + clb.withMethod(INIT_NAME, constructorTypeDesc, ACC_PRIVATE, + new MethodBody(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + cob.aload(0) + .invokespecial(CD_Object, INIT_NAME, MTD_void); + int parameterCount = factoryType.parameterCount(); + for (int i = 0; i < parameterCount; i++) { + cob.aload(0); + Class argType = factoryType.parameterType(i); + cob.loadLocal(TypeKind.from(argType), cob.parameterSlot(i)); + cob.putfield(lambdaClassDesc, argNames[i], argDescs[i]); + } + cob.return_(); + } + })); + } + + private static class SerializationSupport { + // Serialization support + private static final ClassDesc CD_SerializedLambda = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/SerializedLambda;"); + private static final ClassDesc CD_ObjectOutputStream = ReferenceClassDescImpl.ofValidated("Ljava/io/ObjectOutputStream;"); + private static final ClassDesc CD_ObjectInputStream = ReferenceClassDescImpl.ofValidated("Ljava/io/ObjectInputStream;"); + private static final MethodTypeDesc MTD_Object = MethodTypeDescImpl.ofValidated(CD_Object); + private static final MethodTypeDesc MTD_void_ObjectOutputStream = MethodTypeDescImpl.ofValidated(CD_void, CD_ObjectOutputStream); + private static final MethodTypeDesc MTD_void_ObjectInputStream = MethodTypeDescImpl.ofValidated(CD_void, CD_ObjectInputStream); + + private static final String NAME_METHOD_WRITE_REPLACE = "writeReplace"; + private static final String NAME_METHOD_READ_OBJECT = "readObject"; + private static final String NAME_METHOD_WRITE_OBJECT = "writeObject"; + + static final ClassDesc CD_NotSerializableException = ReferenceClassDescImpl.ofValidated("Ljava/io/NotSerializableException;"); + static final MethodTypeDesc MTD_CTOR_NOT_SERIALIZABLE_EXCEPTION = MethodTypeDescImpl.ofValidated(CD_void, CD_String); + static final MethodTypeDesc MTD_CTOR_SERIALIZED_LAMBDA = MethodTypeDescImpl.ofValidated(CD_void, + CD_Class, CD_String, CD_String, CD_String, CD_int, CD_String, CD_String, CD_String, CD_String, ReferenceClassDescImpl.ofValidated("[Ljava/lang/Object;")); + } /** * Generate a writeReplace method that supports serialization */ - private void generateSerializationFriendlyMethods() { - TypeConvertingMethodAdapter mv - = new TypeConvertingMethodAdapter( - cw.visitMethod(ACC_PRIVATE + ACC_FINAL, - NAME_METHOD_WRITE_REPLACE, DESCR_METHOD_WRITE_REPLACE, - null, null)); - - mv.visitCode(); - mv.visitTypeInsn(NEW, NAME_SERIALIZED_LAMBDA); - mv.visitInsn(DUP); - mv.visitLdcInsn(Type.getType(targetClass)); - mv.visitLdcInsn(factoryType.returnType().getName().replace('.', '/')); - mv.visitLdcInsn(interfaceMethodName); - mv.visitLdcInsn(interfaceMethodType.toMethodDescriptorString()); - mv.visitLdcInsn(implInfo.getReferenceKind()); - mv.visitLdcInsn(implInfo.getDeclaringClass().getName().replace('.', '/')); - mv.visitLdcInsn(implInfo.getName()); - mv.visitLdcInsn(implInfo.getMethodType().toMethodDescriptorString()); - mv.visitLdcInsn(dynamicMethodType.toMethodDescriptorString()); - mv.iconst(argDescs.length); - mv.visitTypeInsn(ANEWARRAY, JAVA_LANG_OBJECT); - for (int i = 0; i < argDescs.length; i++) { - mv.visitInsn(DUP); - mv.iconst(i); - mv.visitVarInsn(ALOAD, 0); - mv.visitFieldInsn(GETFIELD, lambdaClassName, argNames[i], argDescs[i]); - mv.boxIfTypePrimitive(Type.getType(argDescs[i])); - mv.visitInsn(AASTORE); - } - mv.visitMethodInsn(INVOKESPECIAL, NAME_SERIALIZED_LAMBDA, NAME_CTOR, - DESCR_CTOR_SERIALIZED_LAMBDA, false); - mv.visitInsn(ARETURN); - // Maxs computed by ClassWriter.COMPUTE_MAXS, these arguments ignored - mv.visitMaxs(-1, -1); - mv.visitEnd(); + private void generateSerializationFriendlyMethods(ClassBuilder clb) { + clb.withMethod(SerializationSupport.NAME_METHOD_WRITE_REPLACE, SerializationSupport.MTD_Object, ACC_PRIVATE | ACC_FINAL, + new MethodBody(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + cob.new_(SerializationSupport.CD_SerializedLambda) + .dup() + .ldc(classDesc(targetClass)) + .ldc(factoryType.returnType().getName().replace('.', '/')) + .ldc(interfaceMethodName) + .ldc(interfaceMethodType.toMethodDescriptorString()) + .ldc(implInfo.getReferenceKind()) + .ldc(implInfo.getDeclaringClass().getName().replace('.', '/')) + .ldc(implInfo.getName()) + .ldc(implInfo.getMethodType().toMethodDescriptorString()) + .ldc(dynamicMethodType.toMethodDescriptorString()) + .loadConstant(argDescs.length) + .anewarray(CD_Object); + for (int i = 0; i < argDescs.length; i++) { + cob.dup() + .loadConstant(i) + .aload(0) + .getfield(lambdaClassDesc, argNames[i], argDescs[i]); + TypeConvertingMethodAdapter.boxIfTypePrimitive(cob, TypeKind.from(argDescs[i])); + cob.aastore(); + } + cob.invokespecial(SerializationSupport.CD_SerializedLambda, INIT_NAME, + SerializationSupport.MTD_CTOR_SERIALIZED_LAMBDA) + .areturn(); + } + })); } /** * Generate a readObject/writeObject method that is hostile to serialization */ - private void generateSerializationHostileMethods() { - MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_FINAL, - NAME_METHOD_WRITE_OBJECT, DESCR_METHOD_WRITE_OBJECT, - null, SER_HOSTILE_EXCEPTIONS); - mv.visitCode(); - mv.visitTypeInsn(NEW, NAME_NOT_SERIALIZABLE_EXCEPTION); - mv.visitInsn(DUP); - mv.visitLdcInsn("Non-serializable lambda"); - mv.visitMethodInsn(INVOKESPECIAL, NAME_NOT_SERIALIZABLE_EXCEPTION, NAME_CTOR, - DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION, false); - mv.visitInsn(ATHROW); - mv.visitMaxs(-1, -1); - mv.visitEnd(); - - mv = cw.visitMethod(ACC_PRIVATE + ACC_FINAL, - NAME_METHOD_READ_OBJECT, DESCR_METHOD_READ_OBJECT, - null, SER_HOSTILE_EXCEPTIONS); - mv.visitCode(); - mv.visitTypeInsn(NEW, NAME_NOT_SERIALIZABLE_EXCEPTION); - mv.visitInsn(DUP); - mv.visitLdcInsn("Non-serializable lambda"); - mv.visitMethodInsn(INVOKESPECIAL, NAME_NOT_SERIALIZABLE_EXCEPTION, NAME_CTOR, - DESCR_CTOR_NOT_SERIALIZABLE_EXCEPTION, false); - mv.visitInsn(ATHROW); - mv.visitMaxs(-1, -1); - mv.visitEnd(); + private void generateSerializationHostileMethods(ClassBuilder clb) { + var hostileMethod = new Consumer() { + @Override + public void accept(MethodBuilder mb) { + ConstantPoolBuilder cp = mb.constantPool(); + ClassEntry nseCE = cp.classEntry(SerializationSupport.CD_NotSerializableException); + mb.with(ExceptionsAttribute.of(nseCE)) + .withCode(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + cob.new_(nseCE) + .dup() + .ldc("Non-serializable lambda") + .invokespecial(cp.methodRefEntry(nseCE, cp.nameAndTypeEntry(INIT_NAME, + SerializationSupport.MTD_CTOR_NOT_SERIALIZABLE_EXCEPTION))) + .athrow(); + } + }); + } + }; + clb.withMethod(SerializationSupport.NAME_METHOD_WRITE_OBJECT, SerializationSupport.MTD_void_ObjectOutputStream, + ACC_PRIVATE + ACC_FINAL, hostileMethod); + clb.withMethod(SerializationSupport.NAME_METHOD_READ_OBJECT, SerializationSupport.MTD_void_ObjectInputStream, + ACC_PRIVATE + ACC_FINAL, hostileMethod); } /** - * This class generates a method body which calls the lambda implementation + * This method generates a method body which calls the lambda implementation * method, converting arguments, as needed. */ - private class ForwardingMethodGenerator extends TypeConvertingMethodAdapter { - - ForwardingMethodGenerator(MethodVisitor mv) { - super(mv); - } - - void generate(MethodType methodType) { - visitCode(); - - if (implKind == MethodHandleInfo.REF_newInvokeSpecial) { - visitTypeInsn(NEW, implMethodClassName); - visitInsn(DUP); - } - if (useImplMethodHandle) { - visitLdcInsn(implMethodCondy); - } - for (int i = 0; i < argNames.length; i++) { - visitVarInsn(ALOAD, 0); - visitFieldInsn(GETFIELD, lambdaClassName, argNames[i], argDescs[i]); - } + Consumer forwardingMethod(MethodType methodType) { + return new MethodBody(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + if (implKind == MethodHandleInfo.REF_newInvokeSpecial) { + cob.new_(implMethodClassDesc) + .dup(); + } + if (useImplMethodHandle) { + ConstantPoolBuilder cp = cob.constantPool(); + cob.ldc(cp.constantDynamicEntry(cp.bsmEntry(cp.methodHandleEntry(BSM_CLASS_DATA), List.of()), + cp.nameAndTypeEntry(DEFAULT_NAME, CD_MethodHandle))); + } + for (int i = 0; i < argNames.length; i++) { + cob.aload(0) + .getfield(lambdaClassDesc, argNames[i], argDescs[i]); + } - convertArgumentTypes(methodType); + convertArgumentTypes(cob, methodType); - if (useImplMethodHandle) { - MethodType mtype = implInfo.getMethodType(); - if (implKind != MethodHandleInfo.REF_invokeStatic) { - mtype = mtype.insertParameterTypes(0, implClass); + if (useImplMethodHandle) { + MethodType mtype = implInfo.getMethodType(); + if (implKind != MethodHandleInfo.REF_invokeStatic) { + mtype = mtype.insertParameterTypes(0, implClass); + } + cob.invokevirtual(CD_MethodHandle, "invokeExact", methodDesc(mtype)); + } else { + // Invoke the method we want to forward to + cob.invoke(invocationOpcode(), implMethodClassDesc, implMethodName, implMethodDesc, implClass.isInterface()); } - visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", - "invokeExact", mtype.descriptorString(), false); - } else { - // Invoke the method we want to forward to - visitMethodInsn(invocationOpcode(), implMethodClassName, - implMethodName, implMethodDesc, - implClass.isInterface()); + // Convert the return value (if any) and return it + // Note: if adapting from non-void to void, the 'return' + // instruction will pop the unneeded result + Class implReturnClass = implMethodType.returnType(); + Class samReturnClass = methodType.returnType(); + TypeConvertingMethodAdapter.convertType(cob, implReturnClass, samReturnClass, samReturnClass); + cob.return_(TypeKind.from(samReturnClass)); } - // Convert the return value (if any) and return it - // Note: if adapting from non-void to void, the 'return' - // instruction will pop the unneeded result - Class implReturnClass = implMethodType.returnType(); - Class samReturnClass = methodType.returnType(); - convertType(implReturnClass, samReturnClass, samReturnClass); - visitInsn(getReturnOpcode(samReturnClass)); - // Maxs computed by ClassWriter.COMPUTE_MAXS,these arguments ignored - visitMaxs(-1, -1); - visitEnd(); - } - - private void convertArgumentTypes(MethodType samType) { - int lvIndex = 0; - int samParametersLength = samType.parameterCount(); - int captureArity = factoryType.parameterCount(); - for (int i = 0; i < samParametersLength; i++) { - Class argType = samType.parameterType(i); - visitVarInsn(getLoadOpcode(argType), lvIndex + 1); - lvIndex += getParameterSize(argType); - convertType(argType, implMethodType.parameterType(captureArity + i), dynamicMethodType.parameterType(i)); - } - } + }); + } - private int invocationOpcode() throws InternalError { - return switch (implKind) { - case MethodHandleInfo.REF_invokeStatic -> INVOKESTATIC; - case MethodHandleInfo.REF_newInvokeSpecial -> INVOKESPECIAL; - case MethodHandleInfo.REF_invokeVirtual -> INVOKEVIRTUAL; - case MethodHandleInfo.REF_invokeInterface -> INVOKEINTERFACE; - case MethodHandleInfo.REF_invokeSpecial -> INVOKESPECIAL; - default -> throw new InternalError("Unexpected invocation kind: " + implKind); - }; + private void convertArgumentTypes(CodeBuilder cob, MethodType samType) { + int samParametersLength = samType.parameterCount(); + int captureArity = factoryType.parameterCount(); + for (int i = 0; i < samParametersLength; i++) { + Class argType = samType.parameterType(i); + cob.loadLocal(TypeKind.from(argType), cob.parameterSlot(i)); + TypeConvertingMethodAdapter.convertType(cob, argType, implMethodType.parameterType(captureArity + i), dynamicMethodType.parameterType(i)); } } - static int getParameterSize(Class c) { - if (c == Void.TYPE) { - return 0; - } else if (c == Long.TYPE || c == Double.TYPE) { - return 2; - } - return 1; + private Opcode invocationOpcode() throws InternalError { + return switch (implKind) { + case MethodHandleInfo.REF_invokeStatic -> Opcode.INVOKESTATIC; + case MethodHandleInfo.REF_newInvokeSpecial -> Opcode.INVOKESPECIAL; + case MethodHandleInfo.REF_invokeVirtual -> Opcode.INVOKEVIRTUAL; + case MethodHandleInfo.REF_invokeInterface -> Opcode.INVOKEINTERFACE; + case MethodHandleInfo.REF_invokeSpecial -> Opcode.INVOKESPECIAL; + default -> throw new InternalError("Unexpected invocation kind: " + implKind); + }; } - static int getLoadOpcode(Class c) { - if(c == Void.TYPE) { - throw new InternalError("Unexpected void type of load opcode"); - } - return ILOAD + getOpcodeOffset(c); + static ClassDesc implClassDesc(Class cls) { + return cls.isHidden() ? null : ReferenceClassDescImpl.ofValidated(cls.descriptorString()); } - static int getReturnOpcode(Class c) { - if(c == Void.TYPE) { - return RETURN; - } - return IRETURN + getOpcodeOffset(c); + static ClassDesc classDesc(Class cls) { + return cls.isPrimitive() ? Wrapper.forPrimitiveType(cls).basicClassDescriptor() + : ReferenceClassDescImpl.ofValidated(cls.descriptorString()); } - private static int getOpcodeOffset(Class c) { - if (c.isPrimitive()) { - if (c == Long.TYPE) { - return 1; - } else if (c == Float.TYPE) { - return 2; - } else if (c == Double.TYPE) { - return 3; - } - return 0; - } else { - return 4; + static MethodTypeDesc methodDesc(MethodType mt) { + var params = new ClassDesc[mt.parameterCount()]; + for (int i = 0; i < params.length; i++) { + params[i] = classDesc(mt.parameterType(i)); } + return MethodTypeDescImpl.ofValidated(classDesc(mt.returnType()), params); } - } diff --git a/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java b/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java index 4e3ebb3834d91..6d71296c13426 100644 --- a/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java +++ b/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java @@ -25,30 +25,38 @@ package java.lang.invoke; -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.internal.org.objectweb.asm.FieldVisitor; -import jdk.internal.org.objectweb.asm.Label; -import jdk.internal.org.objectweb.asm.MethodVisitor; -import jdk.internal.org.objectweb.asm.Opcodes; -import jdk.internal.org.objectweb.asm.Type; import sun.invoke.util.VerifyAccess; import sun.invoke.util.VerifyType; import sun.invoke.util.Wrapper; +import java.lang.classfile.*; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.SourceFileAttribute; +import java.lang.classfile.instruction.SwitchCase; +import java.lang.constant.ClassDesc; +import java.lang.constant.ConstantDesc; +import java.lang.constant.MethodTypeDesc; +import java.lang.invoke.LambdaForm.BasicType; +import java.lang.invoke.LambdaForm.Name; +import java.lang.invoke.LambdaForm.NamedFunction; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.stream.Stream; +import jdk.internal.constant.MethodTypeDescImpl; +import jdk.internal.constant.ReferenceClassDescImpl; -import static java.lang.invoke.LambdaForm.BasicType; -import static java.lang.invoke.LambdaForm.BasicType.*; +import static java.lang.classfile.ClassFile.*; +import static java.lang.constant.ConstantDescs.*; import static java.lang.invoke.LambdaForm.*; +import static java.lang.invoke.LambdaForm.BasicType.*; import static java.lang.invoke.MethodHandleNatives.Constants.*; import static java.lang.invoke.MethodHandleStatics.*; -import static java.lang.invoke.MethodHandles.Lookup.*; +import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; /** * Code generation backend for LambdaForm. @@ -57,32 +65,46 @@ */ class InvokerBytecodeGenerator { /** Define class names for convenience. */ - private static final String MH = "java/lang/invoke/MethodHandle"; - private static final String MHI = "java/lang/invoke/MethodHandleImpl"; - private static final String LF = "java/lang/invoke/LambdaForm"; - private static final String LFN = "java/lang/invoke/LambdaForm$Name"; - private static final String CLS = "java/lang/Class"; - private static final String OBJ = "java/lang/Object"; - private static final String OBJARY = "[Ljava/lang/Object;"; - - private static final String LOOP_CLAUSES = MHI + "$LoopClauses"; - private static final String MHARY2 = "[[L" + MH + ";"; - private static final String MH_SIG = "L" + MH + ";"; - - - private static final String LF_SIG = "L" + LF + ";"; - private static final String LFN_SIG = "L" + LFN + ";"; - private static final String LL_SIG = "(L" + OBJ + ";)L" + OBJ + ";"; - private static final String LLV_SIG = "(L" + OBJ + ";L" + OBJ + ";)V"; - private static final String CLASS_PREFIX = LF + "$"; + private static final ClassDesc CD_CasesHolder = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/MethodHandleImpl$CasesHolder;"); + private static final ClassDesc CD_DirectMethodHandle = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/DirectMethodHandle;"); + private static final ClassDesc CD_MethodHandleImpl = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/MethodHandleImpl;"); + private static final ClassDesc CD_LambdaForm = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/LambdaForm;"); + private static final ClassDesc CD_LambdaForm_Name = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/LambdaForm$Name;"); + private static final ClassDesc CD_LoopClauses = ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/MethodHandleImpl$LoopClauses;"); + private static final ClassDesc CD_Object_array = ReferenceClassDescImpl.ofValidated("[Ljava/lang/Object;"); + private static final ClassDesc CD_MethodHandle_array = ReferenceClassDescImpl.ofValidated("[Ljava/lang/invoke/MethodHandle;"); + private static final ClassDesc CD_MethodHandle_array2 = ReferenceClassDescImpl.ofValidated("[[Ljava/lang/invoke/MethodHandle;"); + + private static final MethodTypeDesc MTD_boolean_Object = MethodTypeDescImpl.ofValidated(CD_boolean, CD_Object); + private static final MethodTypeDesc MTD_Object_int = MethodTypeDescImpl.ofValidated(CD_Object, CD_int); + private static final MethodTypeDesc MTD_Object_Class = MethodTypeDescImpl.ofValidated(CD_Object, CD_Class); + private static final MethodTypeDesc MTD_Object_Object = MethodTypeDescImpl.ofValidated(CD_Object, CD_Object); + + private static final String CLASS_PREFIX = "java/lang/invoke/LambdaForm$"; private static final String SOURCE_PREFIX = "LambdaForm$"; + // Static builders to avoid lambdas + private static final Consumer STATIC_FINAL_FIELD = new Consumer() { + @Override + public void accept(FieldBuilder fb) { + fb.withFlags(ACC_STATIC | ACC_FINAL); + } + }; + + record MethodBody(Consumer code) implements Consumer { + @Override + public void accept(MethodBuilder mb) { + mb.withCode(code); + } + }; + /** Name of its super class*/ - static final String INVOKER_SUPER_NAME = OBJ; + static final ClassDesc INVOKER_SUPER_DESC = CD_Object; /** Name of new class */ private final String name; private final String className; + private final ClassDesc classDesc; private final LambdaForm lambdaForm; private final String invokerName; @@ -92,15 +114,8 @@ class InvokerBytecodeGenerator { private int[] localsMap; // index private Class[] localClasses; // type - /** ASM bytecode generation. */ - private ClassWriter cw; - private MethodVisitor mv; private final List classData = new ArrayList<>(); - /** Single element internal class name lookup cache. */ - private Class lastClass; - private String lastInternalName; - private static final MemberName.Factory MEMBERNAME_FACTORY = MemberName.getFactory(); private static final Class HOST_CLASS = LambdaForm.class; private static final MethodHandles.Lookup LOOKUP = lookup(); @@ -126,6 +141,7 @@ private InvokerBytecodeGenerator(LambdaForm lambdaForm, int localsMapSize, } this.name = name; this.className = CLASS_PREFIX + name; + this.classDesc = ClassDesc.ofInternalName(className); this.lambdaForm = lambdaForm; this.invokerName = invokerName; this.invokerType = invokerType; @@ -188,10 +204,10 @@ private static String makeDumpableClassName(String className) { static class ClassData { final String name; - final String desc; + final ClassDesc desc; final Object value; - ClassData(String name, String desc, Object value) { + ClassData(String name, ClassDesc desc, Object value) { this.name = name; this.desc = desc; this.value = value; @@ -204,15 +220,15 @@ public String toString() { } String classData(Object arg) { - String desc; + ClassDesc desc; if (arg instanceof Class) { - desc = "Ljava/lang/Class;"; + desc = CD_Class; } else if (arg instanceof MethodHandle) { - desc = MH_SIG; + desc = CD_MethodHandle; } else if (arg instanceof LambdaForm) { - desc = LF_SIG; + desc = CD_LambdaForm; } else { - desc = "Ljava/lang/Object;"; + desc = CD_Object; } // unique static variable name @@ -231,16 +247,6 @@ String classData(Object arg) { return name; } - private static String debugString(Object arg) { - if (arg instanceof MethodHandle mh) { - MemberName member = mh.internalMemberName(); - if (member != null) - return member.toString(); - return mh.debugString(); - } - return arg.toString(); - } - /** * Extract the MemberName of a newly-defined method. */ @@ -265,27 +271,25 @@ private static MemberName resolveInvokerMember(Class invokerClass, String nam /** * Set up class file generation. */ - private ClassWriter classFilePrologue() { - final int NOT_ACC_PUBLIC = 0; // not ACC_PUBLIC - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES); - setClassWriter(cw); - cw.visit(CLASSFILE_VERSION, NOT_ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_SUPER, - className, null, INVOKER_SUPER_NAME, null); - cw.visitSource(SOURCE_PREFIX + name, null); - return cw; - } - - private void methodPrologue() { - String invokerDesc = invokerType.toMethodDescriptorString(); - mv = cw.visitMethod(Opcodes.ACC_STATIC, invokerName, invokerDesc, null, null); + private byte[] classFileSetup(Consumer config) { + try { + return ClassFile.of().build(classDesc, new Consumer<>() { + @Override + public void accept(ClassBuilder clb) { + clb.withFlags(ACC_FINAL | ACC_SUPER) + .withSuperclass(INVOKER_SUPER_DESC) + .with(SourceFileAttribute.of(clb.constantPool().utf8Entry(SOURCE_PREFIX + name))); + config.accept(clb); + } + }); + } catch (RuntimeException e) { + throw new BytecodeGenerationException(e); + } } - /** - * Tear down class file generation. - */ - private void methodEpilogue() { - mv.visitMaxs(0, 0); - mv.visitEnd(); + private void methodSetup(ClassBuilder clb, Consumer config) { + var invokerDesc = methodDesc(invokerType); + clb.withMethod(invokerName, invokerDesc, ACC_STATIC, config); } /** @@ -318,202 +322,49 @@ private Object classDataValues() { * to initialize the static final fields with the live class data * LambdaForms can't use condy due to bootstrapping issue. */ - static void clinit(ClassWriter cw, String className, List classData) { + static void clinit(ClassBuilder clb, ClassDesc classDesc, List classData) { if (classData.isEmpty()) return; for (ClassData p : classData) { // add the static field - FieldVisitor fv = cw.visitField(Opcodes.ACC_STATIC|Opcodes.ACC_FINAL, p.name, p.desc, null, null); - fv.visitEnd(); - } - - MethodVisitor mv = cw.visitMethod(Opcodes.ACC_STATIC, "", "()V", null, null); - mv.visitCode(); - mv.visitLdcInsn(Type.getType("L" + className + ";")); - mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/invoke/MethodHandles", - "classData", "(Ljava/lang/Class;)Ljava/lang/Object;", false); - if (classData.size() == 1) { - ClassData p = classData.get(0); - mv.visitTypeInsn(Opcodes.CHECKCAST, p.desc.substring(1, p.desc.length()-1)); - mv.visitFieldInsn(Opcodes.PUTSTATIC, className, p.name, p.desc); - } else { - mv.visitTypeInsn(Opcodes.CHECKCAST, "java/util/List"); - mv.visitVarInsn(Opcodes.ASTORE, 0); - int index = 0; - for (ClassData p : classData) { - // initialize the static field - mv.visitVarInsn(Opcodes.ALOAD, 0); - emitIconstInsn(mv, index++); - mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "java/util/List", - "get", "(I)Ljava/lang/Object;", true); - mv.visitTypeInsn(Opcodes.CHECKCAST, p.desc.substring(1, p.desc.length()-1)); - mv.visitFieldInsn(Opcodes.PUTSTATIC, className, p.name, p.desc); - } - } - mv.visitInsn(Opcodes.RETURN); - mv.visitMaxs(2, 1); - mv.visitEnd(); - } - - /* - * Low-level emit helpers. - */ - private void emitConst(Object con) { - if (con == null) { - mv.visitInsn(Opcodes.ACONST_NULL); - return; - } - if (con instanceof Integer) { - emitIconstInsn((int) con); - return; - } - if (con instanceof Byte) { - emitIconstInsn((byte)con); - return; - } - if (con instanceof Short) { - emitIconstInsn((short)con); - return; - } - if (con instanceof Character) { - emitIconstInsn((char)con); - return; - } - if (con instanceof Long) { - long x = (long) con; - short sx = (short)x; - if (x == sx) { - if (sx >= 0 && sx <= 1) { - mv.visitInsn(Opcodes.LCONST_0 + (int) sx); - } else { - emitIconstInsn((int) x); - mv.visitInsn(Opcodes.I2L); - } - return; - } - } - if (con instanceof Float) { - float x = (float) con; - short sx = (short)x; - if (x == sx) { - if (sx >= 0 && sx <= 2) { - mv.visitInsn(Opcodes.FCONST_0 + (int) sx); + clb.withField(p.name, p.desc, STATIC_FINAL_FIELD); + } + + clb.withMethod(CLASS_INIT_NAME, MTD_void, ACC_STATIC, new MethodBody(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + cob.loadConstant(classDesc) + .invokestatic(CD_MethodHandles, "classData", MTD_Object_Class); + if (classData.size() == 1) { + ClassData p = classData.get(0); + cob.checkcast(p.desc) + .putstatic(classDesc, p.name, p.desc); } else { - emitIconstInsn((int) x); - mv.visitInsn(Opcodes.I2F); - } - return; - } - } - if (con instanceof Double) { - double x = (double) con; - short sx = (short)x; - if (x == sx) { - if (sx >= 0 && sx <= 1) { - mv.visitInsn(Opcodes.DCONST_0 + (int) sx); - } else { - emitIconstInsn((int) x); - mv.visitInsn(Opcodes.I2D); + cob.checkcast(CD_List) + .astore(0); + int index = 0; + var listGet = cob.constantPool().interfaceMethodRefEntry(CD_List, "get", MTD_Object_int); + for (ClassData p : classData) { + // initialize the static field + cob.aload(0) + .loadConstant(index++) + .invokeinterface(listGet) + .checkcast(p.desc) + .putstatic(classDesc, p.name, p.desc); + } } - return; + cob.return_(); } - } - if (con instanceof Boolean) { - emitIconstInsn((boolean) con ? 1 : 0); - return; - } - // fall through: - mv.visitLdcInsn(con); - } - - private void emitIconstInsn(final int cst) { - emitIconstInsn(mv, cst); - } - - private static void emitIconstInsn(MethodVisitor mv, int cst) { - if (cst >= -1 && cst <= 5) { - mv.visitInsn(Opcodes.ICONST_0 + cst); - } else if (cst >= Byte.MIN_VALUE && cst <= Byte.MAX_VALUE) { - mv.visitIntInsn(Opcodes.BIPUSH, cst); - } else if (cst >= Short.MIN_VALUE && cst <= Short.MAX_VALUE) { - mv.visitIntInsn(Opcodes.SIPUSH, cst); - } else { - mv.visitLdcInsn(cst); - } - } - - /* - * NOTE: These load/store methods use the localsMap to find the correct index! - */ - private void emitLoadInsn(BasicType type, int index) { - int opcode = loadInsnOpcode(type); - mv.visitVarInsn(opcode, localsMap[index]); + })); } - private int loadInsnOpcode(BasicType type) throws InternalError { - return switch (type) { - case I_TYPE -> Opcodes.ILOAD; - case J_TYPE -> Opcodes.LLOAD; - case F_TYPE -> Opcodes.FLOAD; - case D_TYPE -> Opcodes.DLOAD; - case L_TYPE -> Opcodes.ALOAD; - default -> throw new InternalError("unknown type: " + type); - }; - } - private void emitAloadInsn(int index) { - emitLoadInsn(L_TYPE, index); + private void emitLoadInsn(CodeBuilder cob, TypeKind type, int index) { + cob.loadLocal(type, localsMap[index]); } - private void emitStoreInsn(BasicType type, int index) { - int opcode = storeInsnOpcode(type); - mv.visitVarInsn(opcode, localsMap[index]); - } - - private int storeInsnOpcode(BasicType type) throws InternalError { - return switch (type) { - case I_TYPE -> Opcodes.ISTORE; - case J_TYPE -> Opcodes.LSTORE; - case F_TYPE -> Opcodes.FSTORE; - case D_TYPE -> Opcodes.DSTORE; - case L_TYPE -> Opcodes.ASTORE; - default -> throw new InternalError("unknown type: " + type); - }; - } - private void emitAstoreInsn(int index) { - emitStoreInsn(L_TYPE, index); - } - - private byte arrayTypeCode(Wrapper elementType) { - return (byte) switch (elementType) { - case BOOLEAN -> Opcodes.T_BOOLEAN; - case BYTE -> Opcodes.T_BYTE; - case CHAR -> Opcodes.T_CHAR; - case SHORT -> Opcodes.T_SHORT; - case INT -> Opcodes.T_INT; - case LONG -> Opcodes.T_LONG; - case FLOAT -> Opcodes.T_FLOAT; - case DOUBLE -> Opcodes.T_DOUBLE; - case OBJECT -> 0; // in place of Opcodes.T_OBJECT - default -> throw new InternalError(); - }; - } - - private int arrayInsnOpcode(byte tcode, int aaop) throws InternalError { - assert(aaop == Opcodes.AASTORE || aaop == Opcodes.AALOAD); - int xas = switch (tcode) { - case Opcodes.T_BOOLEAN -> Opcodes.BASTORE; - case Opcodes.T_BYTE -> Opcodes.BASTORE; - case Opcodes.T_CHAR -> Opcodes.CASTORE; - case Opcodes.T_SHORT -> Opcodes.SASTORE; - case Opcodes.T_INT -> Opcodes.IASTORE; - case Opcodes.T_LONG -> Opcodes.LASTORE; - case Opcodes.T_FLOAT -> Opcodes.FASTORE; - case Opcodes.T_DOUBLE -> Opcodes.DASTORE; - case 0 -> Opcodes.AASTORE; - default -> throw new InternalError(); - }; - return xas - Opcodes.AASTORE + aaop; + private void emitStoreInsn(CodeBuilder cob, TypeKind type, int index) { + cob.storeLocal(type, localsMap[index]); } /** @@ -521,11 +372,8 @@ private int arrayInsnOpcode(byte tcode, int aaop) throws InternalError { * * @param wrapper primitive type class to box. */ - private void emitBoxing(Wrapper wrapper) { - String owner = "java/lang/" + wrapper.wrapperType().getSimpleName(); - String name = "valueOf"; - String desc = "(" + wrapper.basicTypeChar() + ")L" + owner + ";"; - mv.visitMethodInsn(Opcodes.INVOKESTATIC, owner, name, desc, false); + private void emitBoxing(CodeBuilder cob, TypeKind tk) { + TypeConvertingMethodAdapter.box(cob, tk); } /** @@ -533,12 +381,15 @@ private void emitBoxing(Wrapper wrapper) { * * @param wrapper wrapper type class to unbox. */ - private void emitUnboxing(Wrapper wrapper) { - String owner = "java/lang/" + wrapper.wrapperType().getSimpleName(); - String name = wrapper.primitiveSimpleName() + "Value"; - String desc = "()" + wrapper.basicTypeChar(); - emitReferenceCast(wrapper.wrapperType(), null); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, owner, name, desc, false); + private void emitUnboxing(CodeBuilder cob, TypeKind target) { + switch (target) { + case BooleanType -> emitReferenceCast(cob, Boolean.class, null); + case CharType -> emitReferenceCast(cob, Character.class, null); + case ByteType, DoubleType, FloatType, IntType, LongType, ShortType -> + emitReferenceCast(cob, Number.class, null); + default -> {} + } + TypeConvertingMethodAdapter.unbox(cob, target); } /** @@ -549,7 +400,7 @@ private void emitUnboxing(Wrapper wrapper) { * @param pclass type of value required on stack * @param arg compile-time representation of value on stack (Node, constant) or null if none */ - private void emitImplicitConversion(BasicType ptype, Class pclass, Object arg) { + private void emitImplicitConversion(CodeBuilder cob, BasicType ptype, Class pclass, Object arg) { assert(basicType(pclass) == ptype); // boxing/unboxing handled by caller if (pclass == ptype.basicTypeClass() && ptype != L_TYPE) return; // nothing to do @@ -557,14 +408,14 @@ private void emitImplicitConversion(BasicType ptype, Class pclass, Object arg case L_TYPE: if (VerifyType.isNullConversion(Object.class, pclass, false)) { if (PROFILE_LEVEL > 0) - emitReferenceCast(Object.class, arg); + emitReferenceCast(cob, Object.class, arg); return; } - emitReferenceCast(pclass, arg); + emitReferenceCast(cob, pclass, arg); return; case I_TYPE: if (!VerifyType.isNullConversion(int.class, pclass, false)) - emitPrimCast(ptype.basicTypeWrapper(), Wrapper.forPrimitiveType(pclass)); + emitPrimCast(cob, ptype.basicTypeKind(), TypeKind.from(pclass)); return; } throw newInternalError("bad implicit conversion: tc="+ptype+": "+pclass); @@ -582,7 +433,7 @@ private boolean assertStaticType(Class cls, Name n) { return false; } - private void emitReferenceCast(Class cls, Object arg) { + private void emitReferenceCast(CodeBuilder cob, Class cls, Object arg) { Name writeBack = null; // local to write back result if (arg instanceof Name n) { if (lambdaForm.useCount(n) > 1) { @@ -594,53 +445,23 @@ private void emitReferenceCast(Class cls, Object arg) { } } if (isStaticallyNameable(cls)) { - String sig = getInternalName(cls); - mv.visitTypeInsn(Opcodes.CHECKCAST, sig); + ClassDesc sig = classDesc(cls); + cob.checkcast(sig); } else { - mv.visitFieldInsn(Opcodes.GETSTATIC, className, classData(cls), "Ljava/lang/Class;"); - mv.visitInsn(Opcodes.SWAP); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, CLS, "cast", LL_SIG, false); + cob.getstatic(classDesc, classData(cls), CD_Class) + .swap() + .invokevirtual(CD_Class, "cast", MTD_Object_Object); if (Object[].class.isAssignableFrom(cls)) - mv.visitTypeInsn(Opcodes.CHECKCAST, OBJARY); + cob.checkcast(CD_Object_array); else if (PROFILE_LEVEL > 0) - mv.visitTypeInsn(Opcodes.CHECKCAST, OBJ); + cob.checkcast(CD_Object); } if (writeBack != null) { - mv.visitInsn(Opcodes.DUP); - emitAstoreInsn(writeBack.index()); + cob.dup(); + emitStoreInsn(cob, TypeKind.ReferenceType, writeBack.index()); } } - /** - * Emits an actual return instruction conforming to the given return type. - */ - private void emitReturnInsn(BasicType type) { - int opcode = switch (type) { - case I_TYPE -> Opcodes.IRETURN; - case J_TYPE -> Opcodes.LRETURN; - case F_TYPE -> Opcodes.FRETURN; - case D_TYPE -> Opcodes.DRETURN; - case L_TYPE -> Opcodes.ARETURN; - case V_TYPE -> Opcodes.RETURN; - default -> throw new InternalError("unknown return type: " + type); - }; - mv.visitInsn(opcode); - } - - private String getInternalName(Class c) { - if (c == Object.class) return OBJ; - else if (c == Object[].class) return OBJARY; - else if (c == Class.class) return CLS; - else if (c == MethodHandle.class) return MH; - assert(VerifyAccess.ensureTypeVisible(c, Object.class)) : c.getName(); - - if (c == lastClass) { - return lastInternalName; - } - lastClass = c; - return lastInternalName = c.getName().replace('.', '/'); - } - private static MemberName resolveFrom(String name, MethodType type, Class holder) { assert(!UNSAFE.shouldBeInitialized(holder)) : holder + "not initialized"; MemberName member = new MemberName(holder, name, type, REF_invokeStatic); @@ -713,173 +534,151 @@ static MemberName generateCustomizedCode(LambdaForm form, MethodType invokerType } /** Generates code to check that actual receiver and LambdaForm matches */ - private boolean checkActualReceiver() { + private boolean checkActualReceiver(CodeBuilder cob) { // Expects MethodHandle on the stack and actual receiver MethodHandle in slot #0 - mv.visitInsn(Opcodes.DUP); - mv.visitVarInsn(Opcodes.ALOAD, localsMap[0]); - mv.visitMethodInsn(Opcodes.INVOKESTATIC, MHI, "assertSame", LLV_SIG, false); + cob.dup() + .aload(0) + .invokestatic(CD_MethodHandleImpl, "assertSame", MethodTypeDescImpl.ofValidated(CD_void, CD_Object, CD_Object)); return true; } - static String className(String cn) { - assert checkClassName(cn): "Class not found: " + cn; - return cn; - } - - static boolean checkClassName(String cn) { - Type tp = Type.getType(cn); - // additional sanity so only valid "L;" descriptors work - if (tp.getSort() != Type.OBJECT) { - return false; - } - try { - Class c = Class.forName(tp.getClassName(), false, null); - return true; - } catch (ClassNotFoundException e) { - return false; - } - } - - static final String DONTINLINE_SIG = className("Ljdk/internal/vm/annotation/DontInline;"); - static final String FORCEINLINE_SIG = className("Ljdk/internal/vm/annotation/ForceInline;"); - static final String HIDDEN_SIG = className("Ljdk/internal/vm/annotation/Hidden;"); - static final String INJECTEDPROFILE_SIG = className("Ljava/lang/invoke/InjectedProfile;"); - static final String LF_COMPILED_SIG = className("Ljava/lang/invoke/LambdaForm$Compiled;"); + static final Annotation DONTINLINE = Annotation.of(ReferenceClassDescImpl.ofValidated("Ljdk/internal/vm/annotation/DontInline;")); + static final Annotation FORCEINLINE = Annotation.of(ReferenceClassDescImpl.ofValidated("Ljdk/internal/vm/annotation/ForceInline;")); + static final Annotation HIDDEN = Annotation.of(ReferenceClassDescImpl.ofValidated("Ljdk/internal/vm/annotation/Hidden;")); + static final Annotation INJECTEDPROFILE = Annotation.of(ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/InjectedProfile;")); + static final Annotation LF_COMPILED = Annotation.of(ReferenceClassDescImpl.ofValidated("Ljava/lang/invoke/LambdaForm$Compiled;")); /** * Generate an invoker method for the passed {@link LambdaForm}. */ private byte[] generateCustomizedCodeBytes() { - classFilePrologue(); - addMethod(); - clinit(cw, className, classData); - bogusMethod(lambdaForm); - - return toByteArray(); + final byte[] classFile = classFileSetup(new Consumer() { + @Override + public void accept(ClassBuilder clb) { + addMethod(clb); + clinit(clb, classDesc, classData); + bogusMethod(clb, lambdaForm); + } + }); + return classFile; } - void setClassWriter(ClassWriter cw) { - this.cw = cw; - } + void addMethod(ClassBuilder clb) { + methodSetup(clb, new Consumer() { + @Override + public void accept(MethodBuilder mb) { - void addMethod() { - methodPrologue(); + List annotations = new ArrayList<>(3); - // Suppress this method in backtraces displayed to the user. - mv.visitAnnotation(HIDDEN_SIG, true); + // Suppress this method in backtraces displayed to the user. + annotations.add(HIDDEN); - // Mark this method as a compiled LambdaForm - mv.visitAnnotation(LF_COMPILED_SIG, true); + // Mark this method as a compiled LambdaForm + annotations.add(LF_COMPILED); - if (lambdaForm.forceInline) { - // Force inlining of this invoker method. - mv.visitAnnotation(FORCEINLINE_SIG, true); - } else { - mv.visitAnnotation(DONTINLINE_SIG, true); - } + if (lambdaForm.forceInline) { + // Force inlining of this invoker method. + annotations.add(FORCEINLINE); + } else { + annotations.add(DONTINLINE); + } + mb.accept(RuntimeVisibleAnnotationsAttribute.of(annotations)); + + classData(lambdaForm); // keep LambdaForm instance & its compiled form lifetime tightly coupled. + + mb.withCode(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + if (lambdaForm.customized != null) { + // Since LambdaForm is customized for a particular MethodHandle, it's safe to substitute + // receiver MethodHandle (at slot #0) with an embedded constant and use it instead. + // It enables more efficient code generation in some situations, since embedded constants + // are compile-time constants for JIT compiler. + cob.getstatic(classDesc, classData(lambdaForm.customized), CD_MethodHandle) + .checkcast(CD_MethodHandle); + assert(checkActualReceiver(cob)); // expects MethodHandle on top of the stack + cob.astore(0); + } - classData(lambdaForm); // keep LambdaForm instance & its compiled form lifetime tightly coupled. - - if (lambdaForm.customized != null) { - // Since LambdaForm is customized for a particular MethodHandle, it's safe to substitute - // receiver MethodHandle (at slot #0) with an embedded constant and use it instead. - // It enables more efficient code generation in some situations, since embedded constants - // are compile-time constants for JIT compiler. - mv.visitFieldInsn(Opcodes.GETSTATIC, className, classData(lambdaForm.customized), MH_SIG); - mv.visitTypeInsn(Opcodes.CHECKCAST, MH); - assert(checkActualReceiver()); // expects MethodHandle on top of the stack - mv.visitVarInsn(Opcodes.ASTORE, localsMap[0]); - } + // iterate over the form's names, generating bytecode instructions for each + // start iterating at the first name following the arguments + Name onStack = null; + for (int i = lambdaForm.arity; i < lambdaForm.names.length; i++) { + Name name = lambdaForm.names[i]; + + emitStoreResult(cob, onStack); + onStack = name; // unless otherwise modified below + MethodHandleImpl.Intrinsic intr = name.function.intrinsicName(); + switch (intr) { + case SELECT_ALTERNATIVE: + assert lambdaForm.isSelectAlternative(i); + if (PROFILE_GWT) { + assert(name.arguments[0] instanceof Name n && + n.refersTo(MethodHandleImpl.class, "profileBoolean")); + mb.with(RuntimeVisibleAnnotationsAttribute.of(List.of(INJECTEDPROFILE))); + } + onStack = emitSelectAlternative(cob, name, lambdaForm.names[i+1]); + i++; // skip MH.invokeBasic of the selectAlternative result + continue; + case GUARD_WITH_CATCH: + assert lambdaForm.isGuardWithCatch(i); + onStack = emitGuardWithCatch(cob, i); + i += 2; // jump to the end of GWC idiom + continue; + case TRY_FINALLY: + assert lambdaForm.isTryFinally(i); + onStack = emitTryFinally(cob, i); + i += 2; // jump to the end of the TF idiom + continue; + case TABLE_SWITCH: + assert lambdaForm.isTableSwitch(i); + int numCases = (Integer) name.function.intrinsicData(); + onStack = emitTableSwitch(cob, i, numCases); + i += 2; // jump to the end of the TS idiom + continue; + case LOOP: + assert lambdaForm.isLoop(i); + onStack = emitLoop(cob, i); + i += 2; // jump to the end of the LOOP idiom + continue; + case ARRAY_LOAD: + emitArrayLoad(cob, name); + continue; + case ARRAY_STORE: + emitArrayStore(cob, name); + continue; + case ARRAY_LENGTH: + emitArrayLength(cob, name); + continue; + case IDENTITY: + assert(name.arguments.length == 1); + emitPushArguments(cob, name, 0); + continue; + case ZERO: + assert(name.arguments.length == 0); + cob.loadConstant((ConstantDesc)name.type.basicTypeWrapper().zero()); + continue; + case NONE: + // no intrinsic associated + break; + default: + throw newInternalError("Unknown intrinsic: "+intr); + } + + MemberName member = name.function.member(); + if (isStaticallyInvocable(member)) { + emitStaticInvoke(cob, member, name); + } else { + emitInvoke(cob, name); + } + } - // iterate over the form's names, generating bytecode instructions for each - // start iterating at the first name following the arguments - Name onStack = null; - for (int i = lambdaForm.arity; i < lambdaForm.names.length; i++) { - Name name = lambdaForm.names[i]; - - emitStoreResult(onStack); - onStack = name; // unless otherwise modified below - MethodHandleImpl.Intrinsic intr = name.function.intrinsicName(); - switch (intr) { - case SELECT_ALTERNATIVE: - assert lambdaForm.isSelectAlternative(i); - if (PROFILE_GWT) { - assert(name.arguments[0] instanceof Name n && - n.refersTo(MethodHandleImpl.class, "profileBoolean")); - mv.visitAnnotation(INJECTEDPROFILE_SIG, true); + // return statement + emitReturn(cob, onStack); } - onStack = emitSelectAlternative(name, lambdaForm.names[i+1]); - i++; // skip MH.invokeBasic of the selectAlternative result - continue; - case GUARD_WITH_CATCH: - assert lambdaForm.isGuardWithCatch(i); - onStack = emitGuardWithCatch(i); - i += 2; // jump to the end of GWC idiom - continue; - case TRY_FINALLY: - assert lambdaForm.isTryFinally(i); - onStack = emitTryFinally(i); - i += 2; // jump to the end of the TF idiom - continue; - case TABLE_SWITCH: - assert lambdaForm.isTableSwitch(i); - int numCases = (Integer) name.function.intrinsicData(); - onStack = emitTableSwitch(i, numCases); - i += 2; // jump to the end of the TS idiom - continue; - case LOOP: - assert lambdaForm.isLoop(i); - onStack = emitLoop(i); - i += 2; // jump to the end of the LOOP idiom - continue; - case ARRAY_LOAD: - emitArrayLoad(name); - continue; - case ARRAY_STORE: - emitArrayStore(name); - continue; - case ARRAY_LENGTH: - emitArrayLength(name); - continue; - case IDENTITY: - assert(name.arguments.length == 1); - emitPushArguments(name, 0); - continue; - case ZERO: - assert(name.arguments.length == 0); - emitConst(name.type.basicTypeWrapper().zero()); - continue; - case NONE: - // no intrinsic associated - break; - default: - throw newInternalError("Unknown intrinsic: "+intr); - } - - MemberName member = name.function.member(); - if (isStaticallyInvocable(member)) { - emitStaticInvoke(member, name); - } else { - emitInvoke(name); + }); } - } - - // return statement - emitReturn(onStack); - - methodEpilogue(); - } - - /* - * @throws BytecodeGenerationException if something goes wrong when - * generating the byte code - */ - private byte[] toByteArray() { - try { - return cw.toByteArray(); - } catch (RuntimeException e) { - throw new BytecodeGenerationException(e); - } + }); } /** @@ -892,48 +691,60 @@ static final class BytecodeGenerationException extends RuntimeException { } } - void emitArrayLoad(Name name) { emitArrayOp(name, Opcodes.AALOAD); } - void emitArrayStore(Name name) { emitArrayOp(name, Opcodes.AASTORE); } - void emitArrayLength(Name name) { emitArrayOp(name, Opcodes.ARRAYLENGTH); } + void emitArrayLoad(CodeBuilder cob, Name name) { + Class elementType = name.function.methodType().parameterType(0).getComponentType(); + assert elementType != null; + emitPushArguments(cob, name, 0); + if (elementType.isPrimitive()) { + cob.arrayLoad(TypeKind.from(elementType)); + } else { + cob.aaload(); + } + } - void emitArrayOp(Name name, int arrayOpcode) { - assert arrayOpcode == Opcodes.AALOAD || arrayOpcode == Opcodes.AASTORE || arrayOpcode == Opcodes.ARRAYLENGTH; + void emitArrayStore(CodeBuilder cob, Name name) { Class elementType = name.function.methodType().parameterType(0).getComponentType(); assert elementType != null; - emitPushArguments(name, 0); - if (arrayOpcode != Opcodes.ARRAYLENGTH && elementType.isPrimitive()) { - Wrapper w = Wrapper.forPrimitiveType(elementType); - arrayOpcode = arrayInsnOpcode(arrayTypeCode(w), arrayOpcode); + emitPushArguments(cob, name, 0); + if (elementType.isPrimitive()) { + cob.arrayStore(TypeKind.from(elementType)); + } else { + cob.aastore(); } - mv.visitInsn(arrayOpcode); + } + + void emitArrayLength(CodeBuilder cob, Name name) { + assert name.function.methodType().parameterType(0).isArray(); + emitPushArguments(cob, name, 0); + cob.arraylength(); } /** * Emit an invoke for the given name. */ - void emitInvoke(Name name) { + void emitInvoke(CodeBuilder cob, Name name) { assert(!name.isLinkerMethodInvoke()); // should use the static path for these if (true) { // push receiver MethodHandle target = name.function.resolvedHandle(); assert(target != null) : name.exprString(); - mv.visitFieldInsn(Opcodes.GETSTATIC, className, classData(target), MH_SIG); - emitReferenceCast(MethodHandle.class, target); + cob.getstatic(classDesc, classData(target), CD_MethodHandle); + emitReferenceCast(cob, MethodHandle.class, target); } else { // load receiver - emitAloadInsn(0); - emitReferenceCast(MethodHandle.class, null); - mv.visitFieldInsn(Opcodes.GETFIELD, MH, "form", LF_SIG); - mv.visitFieldInsn(Opcodes.GETFIELD, LF, "names", LFN_SIG); + cob.aload(0); + emitReferenceCast(cob, MethodHandle.class, null); + cob.getfield(CD_MethodHandle, "form", CD_LambdaForm) + .getfield(CD_LambdaForm, "names", CD_LambdaForm_Name); // TODO more to come } // push arguments - emitPushArguments(name, 0); + emitPushArguments(cob, name, 0); // invocation MethodType type = name.function.methodType(); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.basicType().toMethodDescriptorString(), false); + cob.invokevirtual(CD_MethodHandle, "invokeBasic", methodDesc(type.basicType())); } private static final Class[] STATICALLY_INVOCABLE_PACKAGES = { @@ -1020,19 +831,18 @@ static boolean isStaticallyNameable(Class cls) { return false; } - void emitStaticInvoke(Name name) { - emitStaticInvoke(name.function.member(), name); + void emitStaticInvoke(CodeBuilder cob, Name name) { + emitStaticInvoke(cob, name.function.member(), name); } /** * Emit an invoke for the given name, using the MemberName directly. */ - void emitStaticInvoke(MemberName member, Name name) { + void emitStaticInvoke(CodeBuilder cob, MemberName member, Name name) { assert(member.equals(name.function.member())); Class defc = member.getDeclaringClass(); - String cname = getInternalName(defc); + ClassDesc cdesc = classDesc(defc); String mname = member.getName(); - String mtype; byte refKind = member.getReferenceKind(); if (refKind == REF_invokeSpecial) { // in order to pass the verifier, we need to convert this to invokevirtual in all cases @@ -1043,16 +853,16 @@ void emitStaticInvoke(MemberName member, Name name) { assert(!(member.getDeclaringClass().isInterface() && refKind == REF_invokeVirtual)); // push arguments - emitPushArguments(name, 0); + emitPushArguments(cob, name, 0); // invocation if (member.isMethod()) { - mtype = member.getMethodType().toMethodDescriptorString(); - mv.visitMethodInsn(refKindOpcode(refKind), cname, mname, mtype, - member.getDeclaringClass().isInterface()); + var methodTypeDesc = methodDesc(member.getMethodType()); + cob.invoke(refKindOpcode(refKind), cdesc, mname, methodTypeDesc, + member.getDeclaringClass().isInterface()); } else { - mtype = MethodType.toFieldDescriptorString(member.getFieldType()); - mv.visitFieldInsn(refKindOpcode(refKind), cname, mname, mtype); + var fieldTypeDesc = classDesc(member.getFieldType()); + cob.fieldAccess(refKindOpcode(refKind), cdesc, mname, fieldTypeDesc); } // Issue a type assertion for the result, so we can avoid casts later. if (name.type == L_TYPE) { @@ -1064,16 +874,16 @@ void emitStaticInvoke(MemberName member, Name name) { } } - int refKindOpcode(byte refKind) { + Opcode refKindOpcode(byte refKind) { switch (refKind) { - case REF_invokeVirtual: return Opcodes.INVOKEVIRTUAL; - case REF_invokeStatic: return Opcodes.INVOKESTATIC; - case REF_invokeSpecial: return Opcodes.INVOKESPECIAL; - case REF_invokeInterface: return Opcodes.INVOKEINTERFACE; - case REF_getField: return Opcodes.GETFIELD; - case REF_putField: return Opcodes.PUTFIELD; - case REF_getStatic: return Opcodes.GETSTATIC; - case REF_putStatic: return Opcodes.PUTSTATIC; + case REF_invokeVirtual: return Opcode.INVOKEVIRTUAL; + case REF_invokeStatic: return Opcode.INVOKESTATIC; + case REF_invokeSpecial: return Opcode.INVOKESPECIAL; + case REF_invokeInterface: return Opcode.INVOKEINTERFACE; + case REF_getField: return Opcode.GETFIELD; + case REF_putField: return Opcode.PUTFIELD; + case REF_getStatic: return Opcode.GETSTATIC; + case REF_putStatic: return Opcode.PUTSTATIC; } throw new InternalError("refKind="+refKind); } @@ -1089,40 +899,40 @@ int refKindOpcode(byte refKind) { * t4:I=MethodHandle.invokeBasic(t3:L,a1:I);t4:I} * } */ - private Name emitSelectAlternative(Name selectAlternativeName, Name invokeBasicName) { + private Name emitSelectAlternative(CodeBuilder cob, Name selectAlternativeName, Name invokeBasicName) { assert isStaticallyInvocable(invokeBasicName); Name receiver = (Name) invokeBasicName.arguments[0]; - Label L_fallback = new Label(); - Label L_done = new Label(); + Label L_fallback = cob.newLabel(); + Label L_done = cob.newLabel(); // load test result - emitPushArgument(selectAlternativeName, 0); + emitPushArgument(cob, selectAlternativeName, 0); // if_icmpne L_fallback - mv.visitJumpInsn(Opcodes.IFEQ, L_fallback); + cob.ifeq(L_fallback); // invoke selectAlternativeName.arguments[1] Class[] preForkClasses = localClasses.clone(); - emitPushArgument(selectAlternativeName, 1); // get 2nd argument of selectAlternative - emitAstoreInsn(receiver.index()); // store the MH in the receiver slot - emitStaticInvoke(invokeBasicName); + emitPushArgument(cob, selectAlternativeName, 1); // get 2nd argument of selectAlternative + emitStoreInsn(cob, TypeKind.ReferenceType, receiver.index()); // store the MH in the receiver slot + emitStaticInvoke(cob, invokeBasicName); // goto L_done - mv.visitJumpInsn(Opcodes.GOTO, L_done); + cob.goto_w(L_done); // L_fallback: - mv.visitLabel(L_fallback); + cob.labelBinding(L_fallback); // invoke selectAlternativeName.arguments[2] System.arraycopy(preForkClasses, 0, localClasses, 0, preForkClasses.length); - emitPushArgument(selectAlternativeName, 2); // get 3rd argument of selectAlternative - emitAstoreInsn(receiver.index()); // store the MH in the receiver slot - emitStaticInvoke(invokeBasicName); + emitPushArgument(cob, selectAlternativeName, 2); // get 3rd argument of selectAlternative + emitStoreInsn(cob, TypeKind.ReferenceType, receiver.index()); // store the MH in the receiver slot + emitStaticInvoke(cob, invokeBasicName); // L_done: - mv.visitLabel(L_done); + cob.labelBinding(L_done); // for now do not bother to merge typestate; just reset to the dominator state System.arraycopy(preForkClasses, 0, localClasses, 0, preForkClasses.length); @@ -1149,57 +959,57 @@ private Name emitSelectAlternative(Name selectAlternativeName, Name invokeBasicN * return a3.invokeBasic(ex, a6, a7); * }} */ - private Name emitGuardWithCatch(int pos) { + private Name emitGuardWithCatch(CodeBuilder cob, int pos) { Name args = lambdaForm.names[pos]; Name invoker = lambdaForm.names[pos+1]; Name result = lambdaForm.names[pos+2]; - Label L_startBlock = new Label(); - Label L_endBlock = new Label(); - Label L_handler = new Label(); - Label L_done = new Label(); + Label L_startBlock = cob.newLabel(); + Label L_endBlock = cob.newLabel(); + Label L_handler = cob.newLabel(); + Label L_done = cob.newLabel(); Class returnType = result.function.resolvedHandle().type().returnType(); MethodType type = args.function.resolvedHandle().type() .dropParameterTypes(0,1) .changeReturnType(returnType); - mv.visitTryCatchBlock(L_startBlock, L_endBlock, L_handler, "java/lang/Throwable"); + cob.exceptionCatch(L_startBlock, L_endBlock, L_handler, CD_Throwable); // Normal case - mv.visitLabel(L_startBlock); + cob.labelBinding(L_startBlock); // load target - emitPushArgument(invoker, 0); - emitPushArguments(args, 1); // skip 1st argument: method handle - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.basicType().toMethodDescriptorString(), false); - mv.visitLabel(L_endBlock); - mv.visitJumpInsn(Opcodes.GOTO, L_done); + emitPushArgument(cob, invoker, 0); + emitPushArguments(cob, args, 1); // skip 1st argument: method handle + cob.invokevirtual(CD_MethodHandle, "invokeBasic", methodDesc(type.basicType())); + cob.labelBinding(L_endBlock); + cob.goto_w(L_done); // Exceptional case - mv.visitLabel(L_handler); + cob.labelBinding(L_handler); // Check exception's type - mv.visitInsn(Opcodes.DUP); + cob.dup(); // load exception class - emitPushArgument(invoker, 1); - mv.visitInsn(Opcodes.SWAP); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Class", "isInstance", "(Ljava/lang/Object;)Z", false); - Label L_rethrow = new Label(); - mv.visitJumpInsn(Opcodes.IFEQ, L_rethrow); + emitPushArgument(cob, invoker, 1); + cob.swap(); + cob.invokevirtual(CD_Class, "isInstance", MTD_boolean_Object); + Label L_rethrow = cob.newLabel(); + cob.ifeq(L_rethrow); // Invoke catcher // load catcher - emitPushArgument(invoker, 2); - mv.visitInsn(Opcodes.SWAP); - emitPushArguments(args, 1); // skip 1st argument: method handle + emitPushArgument(cob, invoker, 2); + cob.swap(); + emitPushArguments(cob, args, 1); // skip 1st argument: method handle MethodType catcherType = type.insertParameterTypes(0, Throwable.class); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", catcherType.basicType().toMethodDescriptorString(), false); - mv.visitJumpInsn(Opcodes.GOTO, L_done); + cob.invokevirtual(CD_MethodHandle, "invokeBasic", methodDesc(catcherType.basicType())); + cob.goto_w(L_done); - mv.visitLabel(L_rethrow); - mv.visitInsn(Opcodes.ATHROW); + cob.labelBinding(L_rethrow); + cob.athrow(); - mv.visitLabel(L_done); + cob.labelBinding(L_done); return result; } @@ -1264,15 +1074,15 @@ private Name emitGuardWithCatch(int pos) { * } * * = depends on whether the return type takes up 2 stack slots. */ - private Name emitTryFinally(int pos) { + private Name emitTryFinally(CodeBuilder cob, int pos) { Name args = lambdaForm.names[pos]; Name invoker = lambdaForm.names[pos+1]; Name result = lambdaForm.names[pos+2]; - Label lFrom = new Label(); - Label lTo = new Label(); - Label lCatch = new Label(); - Label lDone = new Label(); + Label lFrom = cob.newLabel(); + Label lTo = cob.newLabel(); + Label lCatch = cob.newLabel(); + Label lDone = cob.newLabel(); Class returnType = result.function.resolvedHandle().type().returnType(); BasicType basicReturnType = BasicType.basicType(returnType); @@ -1285,68 +1095,64 @@ private Name emitTryFinally(int pos) { if (isNonVoid) { cleanupType = cleanupType.insertParameterTypes(1, returnType); } - String cleanupDesc = cleanupType.basicType().toMethodDescriptorString(); + MethodTypeDesc cleanupDesc = methodDesc(cleanupType.basicType()); // exception handler table - mv.visitTryCatchBlock(lFrom, lTo, lCatch, "java/lang/Throwable"); + cob.exceptionCatch(lFrom, lTo, lCatch, CD_Throwable); // TRY: - mv.visitLabel(lFrom); - emitPushArgument(invoker, 0); // load target - emitPushArguments(args, 1); // load args (skip 0: method handle) - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.basicType().toMethodDescriptorString(), false); - mv.visitLabel(lTo); + cob.labelBinding(lFrom); + emitPushArgument(cob, invoker, 0); // load target + emitPushArguments(cob, args, 1); // load args (skip 0: method handle) + cob.invokevirtual(CD_MethodHandle, "invokeBasic", methodDesc(type.basicType())); + cob.labelBinding(lTo); // FINALLY_NORMAL: int index = extendLocalsMap(new Class[]{ returnType }); if (isNonVoid) { - emitStoreInsn(basicReturnType, index); + emitStoreInsn(cob, basicReturnType.basicTypeKind(), index); } - emitPushArgument(invoker, 1); // load cleanup - mv.visitInsn(Opcodes.ACONST_NULL); + emitPushArgument(cob, invoker, 1); // load cleanup + cob.loadConstant(null); if (isNonVoid) { - emitLoadInsn(basicReturnType, index); + emitLoadInsn(cob, basicReturnType.basicTypeKind(), index); } - emitPushArguments(args, 1); // load args (skip 0: method handle) - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", cleanupDesc, false); - mv.visitJumpInsn(Opcodes.GOTO, lDone); + emitPushArguments(cob, args, 1); // load args (skip 0: method handle) + cob.invokevirtual(CD_MethodHandle, "invokeBasic", cleanupDesc); + cob.goto_w(lDone); // CATCH: - mv.visitLabel(lCatch); - mv.visitInsn(Opcodes.DUP); + cob.labelBinding(lCatch); + cob.dup(); // FINALLY_EXCEPTIONAL: - emitPushArgument(invoker, 1); // load cleanup - mv.visitInsn(Opcodes.SWAP); + emitPushArgument(cob, invoker, 1); // load cleanup + cob.swap(); if (isNonVoid) { - emitZero(BasicType.basicType(returnType)); // load default for result + emitZero(cob, BasicType.basicType(returnType)); // load default for result } - emitPushArguments(args, 1); // load args (skip 0: method handle) - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", cleanupDesc, false); + emitPushArguments(cob, args, 1); // load args (skip 0: method handle) + cob.invokevirtual(CD_MethodHandle, "invokeBasic", cleanupDesc); if (isNonVoid) { - emitPopInsn(basicReturnType); + emitPopInsn(cob, basicReturnType); } - mv.visitInsn(Opcodes.ATHROW); + cob.athrow(); // DONE: - mv.visitLabel(lDone); + cob.labelBinding(lDone); return result; } - private void emitPopInsn(BasicType type) { - mv.visitInsn(popInsnOpcode(type)); - } - - private static int popInsnOpcode(BasicType type) { - return switch (type) { - case I_TYPE, F_TYPE, L_TYPE -> Opcodes.POP; - case J_TYPE, D_TYPE -> Opcodes.POP2; + private void emitPopInsn(CodeBuilder cob, BasicType type) { + switch (type) { + case I_TYPE, F_TYPE, L_TYPE -> cob.pop(); + case J_TYPE, D_TYPE -> cob.pop2(); default -> throw new InternalError("unknown type: " + type); - }; + } } - private Name emitTableSwitch(int pos, int numCases) { + private Name emitTableSwitch(CodeBuilder cob, int pos, int numCases) { Name args = lambdaForm.names[pos]; Name invoker = lambdaForm.names[pos + 1]; Name result = lambdaForm.names[pos + 2]; @@ -1355,45 +1161,44 @@ private Name emitTableSwitch(int pos, int numCases) { MethodType caseType = args.function.resolvedHandle().type() .dropParameterTypes(0, 1) // drop collector .changeReturnType(returnType); - String caseDescriptor = caseType.basicType().toMethodDescriptorString(); + MethodTypeDesc caseDescriptor = methodDesc(caseType.basicType()); - emitPushArgument(invoker, 2); // push cases - mv.visitFieldInsn(Opcodes.GETFIELD, "java/lang/invoke/MethodHandleImpl$CasesHolder", "cases", - "[Ljava/lang/invoke/MethodHandle;"); + emitPushArgument(cob, invoker, 2); // push cases + cob.getfield(CD_CasesHolder, "cases", CD_MethodHandle_array); int casesLocal = extendLocalsMap(new Class[] { MethodHandle[].class }); - emitStoreInsn(L_TYPE, casesLocal); + emitStoreInsn(cob, TypeKind.ReferenceType, casesLocal); - Label endLabel = new Label(); - Label defaultLabel = new Label(); - Label[] caseLabels = new Label[numCases]; - for (int i = 0; i < caseLabels.length; i++) { - caseLabels[i] = new Label(); + Label endLabel = cob.newLabel(); + Label defaultLabel = cob.newLabel(); + List cases = new ArrayList<>(numCases); + for (int i = 0; i < numCases; i++) { + cases.add(SwitchCase.of(i, cob.newLabel())); } - emitPushArgument(invoker, 0); // push switch input - mv.visitTableSwitchInsn(0, numCases - 1, defaultLabel, caseLabels); + emitPushArgument(cob, invoker, 0); // push switch input + cob.tableswitch(0, numCases - 1, defaultLabel, cases); - mv.visitLabel(defaultLabel); - emitPushArgument(invoker, 1); // push default handle - emitPushArguments(args, 1); // again, skip collector - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", caseDescriptor, false); - mv.visitJumpInsn(Opcodes.GOTO, endLabel); + cob.labelBinding(defaultLabel); + emitPushArgument(cob, invoker, 1); // push default handle + emitPushArguments(cob, args, 1); // again, skip collector + cob.invokevirtual(CD_MethodHandle, "invokeBasic", caseDescriptor); + cob.goto_(endLabel); for (int i = 0; i < numCases; i++) { - mv.visitLabel(caseLabels[i]); + cob.labelBinding(cases.get(i).target()); // Load the particular case: - emitLoadInsn(L_TYPE, casesLocal); - emitIconstInsn(i); - mv.visitInsn(Opcodes.AALOAD); + emitLoadInsn(cob, TypeKind.ReferenceType, casesLocal); + cob.loadConstant(i); + cob.aaload(); // invoke it: - emitPushArguments(args, 1); // again, skip collector - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", caseDescriptor, false); + emitPushArguments(cob, args, 1); // again, skip collector + cob.invokevirtual(CD_MethodHandle, "invokeBasic", caseDescriptor); - mv.visitJumpInsn(Opcodes.GOTO, endLabel); + cob.goto_(endLabel); } - mv.visitLabel(endLabel); + cob.labelBinding(endLabel); return result; } @@ -1480,7 +1285,7 @@ private Name emitTableSwitch(int pos, int numCases) { * GOTO DONE // jump beyond end of clauses to return from loop * } */ - private Name emitLoop(int pos) { + private Name emitLoop(CodeBuilder cob, int pos) { Name args = lambdaForm.names[pos]; Name invoker = lambdaForm.names[pos+1]; Name result = lambdaForm.names[pos+2]; @@ -1488,8 +1293,9 @@ private Name emitLoop(int pos) { // extract clause and loop-local state types // find the type info in the loop invocation BasicType[] loopClauseTypes = (BasicType[]) invoker.arguments[0]; - Class[] loopLocalStateTypes = Stream.of(loopClauseTypes). - filter(bt -> bt != BasicType.V_TYPE).map(BasicType::basicTypeClass).toArray(Class[]::new); + Class[] loopLocalStateTypes = Stream.of(loopClauseTypes) + .filter(bt -> bt != BasicType.V_TYPE) + .map(BasicType::basicTypeClass).toArray(Class[]::new); Class[] localTypes = new Class[loopLocalStateTypes.length + 1]; localTypes[0] = MethodHandleImpl.LoopClauses.class; System.arraycopy(loopLocalStateTypes, 0, localTypes, 1, loopLocalStateTypes.length); @@ -1513,61 +1319,61 @@ private Name emitLoop(int pos) { final int preds = 3; final int finis = 4; - Label lLoop = new Label(); - Label lDone = new Label(); + Label lLoop = cob.newLabel(); + Label lDone = cob.newLabel(); Label lNext; // PREINIT: - emitPushArgument(MethodHandleImpl.LoopClauses.class, invoker.arguments[1]); - mv.visitFieldInsn(Opcodes.GETFIELD, LOOP_CLAUSES, "clauses", MHARY2); - emitAstoreInsn(clauseDataIndex); + emitPushArgument(cob, MethodHandleImpl.LoopClauses.class, invoker.arguments[1]); + cob.getfield(CD_LoopClauses, "clauses", CD_MethodHandle_array2); + emitStoreInsn(cob, TypeKind.ReferenceType, clauseDataIndex); // INIT: for (int c = 0, state = 0; c < nClauses; ++c) { MethodType cInitType = loopType.changeReturnType(loopClauseTypes[c].basicTypeClass()); - emitLoopHandleInvoke(invoker, inits, c, args, false, cInitType, loopLocalStateTypes, clauseDataIndex, + emitLoopHandleInvoke(cob, invoker, inits, c, args, false, cInitType, loopLocalStateTypes, clauseDataIndex, firstLoopStateIndex); if (cInitType.returnType() != void.class) { - emitStoreInsn(BasicType.basicType(cInitType.returnType()), firstLoopStateIndex + state); + emitStoreInsn(cob, BasicType.basicType(cInitType.returnType()).basicTypeKind(), firstLoopStateIndex + state); ++state; } } // LOOP: - mv.visitLabel(lLoop); + cob.labelBinding(lLoop); for (int c = 0, state = 0; c < nClauses; ++c) { - lNext = new Label(); + lNext = cob.newLabel(); MethodType stepType = loopHandleType.changeReturnType(loopClauseTypes[c].basicTypeClass()); boolean isVoid = stepType.returnType() == void.class; // invoke loop step - emitLoopHandleInvoke(invoker, steps, c, args, true, stepType, loopLocalStateTypes, clauseDataIndex, + emitLoopHandleInvoke(cob, invoker, steps, c, args, true, stepType, loopLocalStateTypes, clauseDataIndex, firstLoopStateIndex); if (!isVoid) { - emitStoreInsn(BasicType.basicType(stepType.returnType()), firstLoopStateIndex + state); + emitStoreInsn(cob, BasicType.basicType(stepType.returnType()).basicTypeKind(), firstLoopStateIndex + state); ++state; } // invoke loop predicate - emitLoopHandleInvoke(invoker, preds, c, args, true, predType, loopLocalStateTypes, clauseDataIndex, + emitLoopHandleInvoke(cob, invoker, preds, c, args, true, predType, loopLocalStateTypes, clauseDataIndex, firstLoopStateIndex); - mv.visitJumpInsn(Opcodes.IFNE, lNext); + cob.ifne(lNext); // invoke fini - emitLoopHandleInvoke(invoker, finis, c, args, true, finiType, loopLocalStateTypes, clauseDataIndex, + emitLoopHandleInvoke(cob, invoker, finis, c, args, true, finiType, loopLocalStateTypes, clauseDataIndex, firstLoopStateIndex); - mv.visitJumpInsn(Opcodes.GOTO, lDone); + cob.goto_w(lDone); // this is the beginning of the next loop clause - mv.visitLabel(lNext); + cob.labelBinding(lNext); } - mv.visitJumpInsn(Opcodes.GOTO, lLoop); + cob.goto_w(lLoop); // DONE: - mv.visitLabel(lDone); + cob.labelBinding(lDone); return result; } @@ -1588,69 +1394,67 @@ private int extendLocalsMap(Class[] types) { return firstSlot; } - private void emitLoopHandleInvoke(Name holder, int handles, int clause, Name args, boolean pushLocalState, + private void emitLoopHandleInvoke(CodeBuilder cob, Name holder, int handles, int clause, Name args, boolean pushLocalState, MethodType type, Class[] loopLocalStateTypes, int clauseDataSlot, int firstLoopStateSlot) { // load handle for clause - emitPushClauseArray(clauseDataSlot, handles); - emitIconstInsn(clause); - mv.visitInsn(Opcodes.AALOAD); + emitPushClauseArray(cob, clauseDataSlot, handles); + cob.loadConstant(clause); + cob.aaload(); // load loop state (preceding the other arguments) if (pushLocalState) { for (int s = 0; s < loopLocalStateTypes.length; ++s) { - emitLoadInsn(BasicType.basicType(loopLocalStateTypes[s]), firstLoopStateSlot + s); + emitLoadInsn(cob, BasicType.basicType(loopLocalStateTypes[s]).basicTypeKind(), firstLoopStateSlot + s); } } // load loop args (skip 0: method handle) - emitPushArguments(args, 1); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", type.toMethodDescriptorString(), false); + emitPushArguments(cob, args, 1); + cob.invokevirtual(CD_MethodHandle, "invokeBasic", methodDesc(type)); } - private void emitPushClauseArray(int clauseDataSlot, int which) { - emitAloadInsn(clauseDataSlot); - emitIconstInsn(which - 1); - mv.visitInsn(Opcodes.AALOAD); + private void emitPushClauseArray(CodeBuilder cob, int clauseDataSlot, int which) { + emitLoadInsn(cob, TypeKind.ReferenceType, clauseDataSlot); + cob.loadConstant(which - 1); + cob.aaload(); } - private void emitZero(BasicType type) { - mv.visitInsn(switch (type) { - case I_TYPE -> Opcodes.ICONST_0; - case J_TYPE -> Opcodes.LCONST_0; - case F_TYPE -> Opcodes.FCONST_0; - case D_TYPE -> Opcodes.DCONST_0; - case L_TYPE -> Opcodes.ACONST_NULL; + private void emitZero(CodeBuilder cob, BasicType type) { + switch (type) { + case I_TYPE -> cob.iconst_0(); + case J_TYPE -> cob.lconst_0(); + case F_TYPE -> cob.fconst_0(); + case D_TYPE -> cob.dconst_0(); + case L_TYPE -> cob.aconst_null(); default -> throw new InternalError("unknown type: " + type); - }); + }; } - private void emitPushArguments(Name args, int start) { + private void emitPushArguments(CodeBuilder cob, Name args, int start) { MethodType type = args.function.methodType(); for (int i = start; i < args.arguments.length; i++) { - emitPushArgument(type.parameterType(i), args.arguments[i]); + emitPushArgument(cob, type.parameterType(i), args.arguments[i]); } } - private void emitPushArgument(Name name, int paramIndex) { + private void emitPushArgument(CodeBuilder cob, Name name, int paramIndex) { Object arg = name.arguments[paramIndex]; Class ptype = name.function.methodType().parameterType(paramIndex); - emitPushArgument(ptype, arg); + emitPushArgument(cob, ptype, arg); } - private void emitPushArgument(Class ptype, Object arg) { + private void emitPushArgument(CodeBuilder cob, Class ptype, Object arg) { BasicType bptype = basicType(ptype); if (arg instanceof Name n) { - emitLoadInsn(n.type, n.index()); - emitImplicitConversion(n.type, ptype, n); - } else if (arg == null && bptype == L_TYPE) { - mv.visitInsn(Opcodes.ACONST_NULL); - } else if (arg instanceof String && bptype == L_TYPE) { - mv.visitLdcInsn(arg); + emitLoadInsn(cob, n.type.basicTypeKind(), n.index()); + emitImplicitConversion(cob, n.type, ptype, n); + } else if ((arg == null || arg instanceof String) && bptype == L_TYPE) { + cob.loadConstant((ConstantDesc)arg); } else { if (Wrapper.isWrapperType(arg.getClass()) && bptype != L_TYPE) { - emitConst(arg); + cob.loadConstant((ConstantDesc)arg); } else { - mv.visitFieldInsn(Opcodes.GETSTATIC, className, classData(arg), "Ljava/lang/Object;"); - emitImplicitConversion(L_TYPE, ptype, arg); + cob.getstatic(classDesc, classData(arg), CD_Object); + emitImplicitConversion(cob, L_TYPE, ptype, arg); } } } @@ -1658,44 +1462,44 @@ private void emitPushArgument(Class ptype, Object arg) { /** * Store the name to its local, if necessary. */ - private void emitStoreResult(Name name) { + private void emitStoreResult(CodeBuilder cob, Name name) { if (name != null && name.type != V_TYPE) { // non-void: actually assign - emitStoreInsn(name.type, name.index()); + emitStoreInsn(cob, name.type.basicTypeKind(), name.index()); } } /** * Emits a return statement from a LF invoker. If required, the result type is cast to the correct return type. */ - private void emitReturn(Name onStack) { + private void emitReturn(CodeBuilder cob, Name onStack) { // return statement Class rclass = invokerType.returnType(); BasicType rtype = lambdaForm.returnType(); assert(rtype == basicType(rclass)); // must agree if (rtype == V_TYPE) { // void - mv.visitInsn(Opcodes.RETURN); + cob.return_(); // it doesn't matter what rclass is; the JVM will discard any value } else { LambdaForm.Name rn = lambdaForm.names[lambdaForm.result]; // put return value on the stack if it is not already there if (rn != onStack) { - emitLoadInsn(rtype, lambdaForm.result); + emitLoadInsn(cob, rtype.basicTypeKind(), lambdaForm.result); } - emitImplicitConversion(rtype, rclass, rn); + emitImplicitConversion(cob, rtype, rclass, rn); // generate actual return statement - emitReturnInsn(rtype); + cob.return_(rtype.basicTypeKind()); } } /** * Emit a type conversion bytecode casting from "from" to "to". */ - private void emitPrimCast(Wrapper from, Wrapper to) { + private void emitPrimCast(CodeBuilder cob, TypeKind from, TypeKind to) { // Here's how. // - indicates forbidden // <-> indicates implicit @@ -1708,80 +1512,10 @@ private void emitPrimCast(Wrapper from, Wrapper to) { // long - l2i,i2b l2i,i2s l2i,i2c l2i <-> l2f l2d // float - f2i,i2b f2i,i2s f2i,i2c f2i f2l <-> f2d // double - d2i,i2b d2i,i2s d2i,i2c d2i d2l d2f <-> - if (from == to) { - // no cast required, should be dead code anyway - return; - } - if (from.isSubwordOrInt()) { - // cast from {byte,short,char,int} to anything - emitI2X(to); - } else { - // cast from {long,float,double} to anything - if (to.isSubwordOrInt()) { - // cast to {byte,short,char,int} - emitX2I(from); - if (to.bitWidth() < 32) { - // targets other than int require another conversion - emitI2X(to); - } - } else { - // cast to {long,float,double} - this is verbose - boolean error = false; - switch (from) { - case LONG -> { - switch (to) { - case FLOAT -> mv.visitInsn(Opcodes.L2F); - case DOUBLE -> mv.visitInsn(Opcodes.L2D); - default -> error = true; - } - } - case FLOAT -> { - switch (to) { - case LONG -> mv.visitInsn(Opcodes.F2L); - case DOUBLE -> mv.visitInsn(Opcodes.F2D); - default -> error = true; - } - } - case DOUBLE -> { - switch (to) { - case LONG -> mv.visitInsn(Opcodes.D2L); - case FLOAT -> mv.visitInsn(Opcodes.D2F); - default -> error = true; - } - } - default -> error = true; - } - if (error) { - throw new IllegalStateException("unhandled prim cast: " + from + "2" + to); - } - } - } - } - - private void emitI2X(Wrapper type) { - switch (type) { - case BYTE: mv.visitInsn(Opcodes.I2B); break; - case SHORT: mv.visitInsn(Opcodes.I2S); break; - case CHAR: mv.visitInsn(Opcodes.I2C); break; - case INT: /* naught */ break; - case LONG: mv.visitInsn(Opcodes.I2L); break; - case FLOAT: mv.visitInsn(Opcodes.I2F); break; - case DOUBLE: mv.visitInsn(Opcodes.I2D); break; - case BOOLEAN: - // For compatibility with ValueConversions and explicitCastArguments: - mv.visitInsn(Opcodes.ICONST_1); - mv.visitInsn(Opcodes.IAND); - break; - default: throw new InternalError("unknown type: " + type); - } - } - - private void emitX2I(Wrapper type) { - switch (type) { - case LONG -> mv.visitInsn(Opcodes.L2I); - case FLOAT -> mv.visitInsn(Opcodes.F2I); - case DOUBLE -> mv.visitInsn(Opcodes.D2I); - default -> throw new InternalError("unknown type: " + type); + if (from != to && from != TypeKind.BooleanType) try { + cob.conversion(from, to); + } catch (IllegalArgumentException e) { + throw new IllegalStateException("unhandled prim cast: " + from + "2" + to); } } @@ -1798,51 +1532,61 @@ static MemberName generateLambdaFormInterpreterEntryPoint(MethodType mt) { } private byte[] generateLambdaFormInterpreterEntryPointBytes() { - classFilePrologue(); - methodPrologue(); - - // Suppress this method in backtraces displayed to the user. - mv.visitAnnotation(HIDDEN_SIG, true); - - // Don't inline the interpreter entry. - mv.visitAnnotation(DONTINLINE_SIG, true); - - // create parameter array - emitIconstInsn(invokerType.parameterCount()); - mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object"); - - // fill parameter array - for (int i = 0; i < invokerType.parameterCount(); i++) { - Class ptype = invokerType.parameterType(i); - mv.visitInsn(Opcodes.DUP); - emitIconstInsn(i); - emitLoadInsn(basicType(ptype), i); - // box if primitive type - if (ptype.isPrimitive()) { - emitBoxing(Wrapper.forPrimitiveType(ptype)); + final byte[] classFile = classFileSetup(new Consumer() { + @Override + public void accept(ClassBuilder clb) { + methodSetup(clb, new Consumer() { + @Override + public void accept(MethodBuilder mb) { + + mb.with(RuntimeVisibleAnnotationsAttribute.of(List.of( + HIDDEN, // Suppress this method in backtraces displayed to the user. + DONTINLINE // Don't inline the interpreter entry. + ))); + + mb.withCode(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + // create parameter array + cob.loadConstant(invokerType.parameterCount()); + cob.anewarray(CD_Object); + + // fill parameter array + for (int i = 0; i < invokerType.parameterCount(); i++) { + Class ptype = invokerType.parameterType(i); + cob.dup(); + cob.loadConstant(i); + emitLoadInsn(cob, basicType(ptype).basicTypeKind(), i); + // box if primitive type + if (ptype.isPrimitive()) { + emitBoxing(cob, TypeKind.from(ptype)); + } + cob.aastore(); + } + // invoke + cob.aload(0); + cob.getfield(CD_MethodHandle, "form", CD_LambdaForm); + cob.swap(); // swap form and array; avoid local variable + cob.invokevirtual(CD_LambdaForm, "interpretWithArguments", MethodTypeDescImpl.ofValidated(CD_Object, CD_Object_array)); + + // maybe unbox + Class rtype = invokerType.returnType(); + TypeKind rtypeK = TypeKind.from(rtype); + if (rtype.isPrimitive() && rtype != void.class) { + emitUnboxing(cob, rtypeK); + } + + // return statement + cob.return_(rtypeK); + } + }); + } + }); + clinit(clb, classDesc, classData); + bogusMethod(clb, invokerType); } - mv.visitInsn(Opcodes.AASTORE); - } - // invoke - emitAloadInsn(0); - mv.visitFieldInsn(Opcodes.GETFIELD, MH, "form", "Ljava/lang/invoke/LambdaForm;"); - mv.visitInsn(Opcodes.SWAP); // swap form and array; avoid local variable - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LF, "interpretWithArguments", "([Ljava/lang/Object;)Ljava/lang/Object;", false); - - // maybe unbox - Class rtype = invokerType.returnType(); - if (rtype.isPrimitive() && rtype != void.class) { - emitUnboxing(Wrapper.forPrimitiveType(rtype)); - } - - // return statement - emitReturnInsn(basicType(rtype)); - - methodEpilogue(); - clinit(cw, className, classData); - bogusMethod(invokerType); - - return cw.toByteArray(); + }); + return classFile; } /** @@ -1857,73 +1601,101 @@ static MemberName generateNamedFunctionInvoker(MethodTypeForm typeForm) { private byte[] generateNamedFunctionInvokerImpl(MethodTypeForm typeForm) { MethodType dstType = typeForm.erasedType(); - classFilePrologue(); - methodPrologue(); - - // Suppress this method in backtraces displayed to the user. - mv.visitAnnotation(HIDDEN_SIG, true); - - // Force inlining of this invoker method. - mv.visitAnnotation(FORCEINLINE_SIG, true); - - // Load receiver - emitAloadInsn(0); - - // Load arguments from array - for (int i = 0; i < dstType.parameterCount(); i++) { - emitAloadInsn(1); - emitIconstInsn(i); - mv.visitInsn(Opcodes.AALOAD); - - // Maybe unbox - Class dptype = dstType.parameterType(i); - if (dptype.isPrimitive()) { - Wrapper dstWrapper = Wrapper.forBasicType(dptype); - Wrapper srcWrapper = dstWrapper.isSubwordOrInt() ? Wrapper.INT : dstWrapper; // narrow subword from int - emitUnboxing(srcWrapper); - emitPrimCast(srcWrapper, dstWrapper); + final byte[] classFile = classFileSetup(new Consumer() { + @Override + public void accept(ClassBuilder clb) { + methodSetup(clb, new Consumer() { + @Override + public void accept(MethodBuilder mb) { + + mb.with(RuntimeVisibleAnnotationsAttribute.of(List.of( + HIDDEN, // Suppress this method in backtraces displayed to the user. + FORCEINLINE // Force inlining of this invoker method. + ))); + + mb.withCode(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + // Load receiver + cob.aload(0); + + // Load arguments from array + for (int i = 0; i < dstType.parameterCount(); i++) { + cob.aload(1); + cob.loadConstant(i); + cob.aaload(); + + // Maybe unbox + Class dptype = dstType.parameterType(i); + if (dptype.isPrimitive()) { + TypeKind dstTK = TypeKind.from(dptype); + TypeKind srcTK = dstTK.asLoadable(); + emitUnboxing(cob, srcTK); + emitPrimCast(cob, srcTK, dstTK); + } + } + + // Invoke + MethodTypeDesc targetDesc = methodDesc(dstType.basicType()); + cob.invokevirtual(CD_MethodHandle, "invokeBasic", targetDesc); + + // Box primitive types + Class rtype = dstType.returnType(); + if (rtype != void.class && rtype.isPrimitive()) { + TypeKind srcTK = TypeKind.from(rtype); + TypeKind dstTK = srcTK.asLoadable(); + // boolean casts not allowed + emitPrimCast(cob, srcTK, dstTK); + emitBoxing(cob, dstTK); + } + + // If the return type is void we return a null reference. + if (rtype == void.class) { + cob.aconst_null(); + } + cob.areturn(); // NOTE: NamedFunction invokers always return a reference value. + } + }); + } + }); + clinit(clb, classDesc, classData); + bogusMethod(clb, dstType); } - } - - // Invoke - String targetDesc = dstType.basicType().toMethodDescriptorString(); - mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, MH, "invokeBasic", targetDesc, false); - - // Box primitive types - Class rtype = dstType.returnType(); - if (rtype != void.class && rtype.isPrimitive()) { - Wrapper srcWrapper = Wrapper.forBasicType(rtype); - Wrapper dstWrapper = srcWrapper.isSubwordOrInt() ? Wrapper.INT : srcWrapper; // widen subword to int - // boolean casts not allowed - emitPrimCast(srcWrapper, dstWrapper); - emitBoxing(dstWrapper); - } - - // If the return type is void we return a null reference. - if (rtype == void.class) { - mv.visitInsn(Opcodes.ACONST_NULL); - } - emitReturnInsn(L_TYPE); // NOTE: NamedFunction invokers always return a reference value. - - methodEpilogue(); - clinit(cw, className, classData); - bogusMethod(dstType); - - return cw.toByteArray(); + }); + return classFile; } /** * Emit a bogus method that just loads some string constants. This is to get the constants into the constant pool * for debugging purposes. */ - private void bogusMethod(Object os) { + private void bogusMethod(ClassBuilder clb, Object os) { if (dumper().isEnabled()) { - mv = cw.visitMethod(Opcodes.ACC_STATIC, "dummy", "()V", null, null); - mv.visitLdcInsn(os.toString()); - mv.visitInsn(Opcodes.POP); - mv.visitInsn(Opcodes.RETURN); - mv.visitMaxs(0, 0); - mv.visitEnd(); + clb.withMethod("dummy", MTD_void, ACC_STATIC, new MethodBody(new Consumer() { + @Override + public void accept(CodeBuilder cob) { + cob.loadConstant(os.toString()); + cob.pop(); + cob.return_(); + } + })); + } + } + + static ClassDesc classDesc(Class cls) { +// assert(VerifyAccess.isTypeVisible(cls, Object.class)) : cls.getName(); + return cls.isPrimitive() ? Wrapper.forPrimitiveType(cls).basicClassDescriptor() + : cls == MethodHandle.class ? CD_MethodHandle + : cls == DirectMethodHandle.class ? CD_DirectMethodHandle + : cls == Object.class ? CD_Object + : ReferenceClassDescImpl.ofValidated(cls.descriptorString()); + } + + static MethodTypeDesc methodDesc(MethodType mt) { + var params = new ClassDesc[mt.parameterCount()]; + for (int i = 0; i < params.length; i++) { + params[i] = classDesc(mt.parameterType(i)); } + return MethodTypeDescImpl.ofValidated(classDesc(mt.returnType()), params); } } diff --git a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java index 823f527b6c43a..09ea5df4a235f 100644 --- a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java +++ b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java @@ -25,6 +25,7 @@ package java.lang.invoke; +import java.lang.classfile.TypeKind; import jdk.internal.perf.PerfCounter; import jdk.internal.vm.annotation.DontInline; import jdk.internal.vm.annotation.Hidden; @@ -137,12 +138,12 @@ class LambdaForm { public static final int VOID_RESULT = -1, LAST_RESULT = -2; enum BasicType { - L_TYPE('L', Object.class, Wrapper.OBJECT), // all reference types - I_TYPE('I', int.class, Wrapper.INT), - J_TYPE('J', long.class, Wrapper.LONG), - F_TYPE('F', float.class, Wrapper.FLOAT), - D_TYPE('D', double.class, Wrapper.DOUBLE), // all primitive types - V_TYPE('V', void.class, Wrapper.VOID); // not valid in all contexts + L_TYPE('L', Object.class, Wrapper.OBJECT, TypeKind.ReferenceType), // all reference types + I_TYPE('I', int.class, Wrapper.INT, TypeKind.IntType), + J_TYPE('J', long.class, Wrapper.LONG, TypeKind.LongType), + F_TYPE('F', float.class, Wrapper.FLOAT, TypeKind.FloatType), + D_TYPE('D', double.class, Wrapper.DOUBLE, TypeKind.DoubleType), // all primitive types + V_TYPE('V', void.class, Wrapper.VOID, TypeKind.VoidType); // not valid in all contexts static final @Stable BasicType[] ALL_TYPES = BasicType.values(); static final @Stable BasicType[] ARG_TYPES = Arrays.copyOf(ALL_TYPES, ALL_TYPES.length-1); @@ -153,11 +154,13 @@ enum BasicType { final char btChar; final Class btClass; final Wrapper btWrapper; + final TypeKind btKind; - private BasicType(char btChar, Class btClass, Wrapper wrapper) { + private BasicType(char btChar, Class btClass, Wrapper wrapper, TypeKind typeKind) { this.btChar = btChar; this.btClass = btClass; this.btWrapper = wrapper; + this.btKind = typeKind; } char basicTypeChar() { @@ -169,6 +172,9 @@ Class basicTypeClass() { Wrapper basicTypeWrapper() { return btWrapper; } + TypeKind basicTypeKind() { + return btKind; + } int basicTypeSlots() { return btWrapper.stackSlots(); } diff --git a/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java b/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java index e79c8463d30b2..57446c9b2fdf0 100644 --- a/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java +++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java @@ -27,8 +27,9 @@ import jdk.internal.access.JavaLangInvokeAccess; import jdk.internal.access.SharedSecrets; +import jdk.internal.constant.MethodTypeDescImpl; +import jdk.internal.constant.ReferenceClassDescImpl; import jdk.internal.foreign.abi.NativeEntryPoint; -import jdk.internal.org.objectweb.asm.ClassWriter; import jdk.internal.reflect.CallerSensitive; import jdk.internal.reflect.Reflection; import jdk.internal.vm.annotation.ForceInline; @@ -39,6 +40,8 @@ import sun.invoke.util.VerifyType; import sun.invoke.util.Wrapper; +import java.lang.classfile.ClassFile; +import java.lang.constant.ClassDesc; import java.lang.invoke.MethodHandles.Lookup; import java.lang.reflect.Array; import java.lang.reflect.Constructor; @@ -56,13 +59,14 @@ import java.util.function.Function; import java.util.stream.Stream; +import static java.lang.classfile.ClassFile.*; +import static java.lang.constant.ConstantDescs.*; import static java.lang.invoke.LambdaForm.*; import static java.lang.invoke.MethodHandleNatives.Constants.MN_CALLER_SENSITIVE; import static java.lang.invoke.MethodHandleNatives.Constants.MN_HIDDEN_MEMBER; import static java.lang.invoke.MethodHandleStatics.*; import static java.lang.invoke.MethodHandles.Lookup.IMPL_LOOKUP; import static java.lang.invoke.MethodHandles.Lookup.ClassOption.NESTMATE; -import static jdk.internal.org.objectweb.asm.Opcodes.*; /** * Trusted implementation code for MethodHandle. @@ -1035,8 +1039,10 @@ static MethodHandle bindCaller(MethodHandle mh, Class hostClass) { // Put the whole mess into its own nested class. // That way we can lazily load the code and set up the constants. private static class BindCaller { - private static MethodType INVOKER_MT = MethodType.methodType(Object.class, MethodHandle.class, Object[].class); - private static MethodType REFLECT_INVOKER_MT = MethodType.methodType(Object.class, MethodHandle.class, Object.class, Object[].class); + + private static final ClassDesc CD_Object_array = ReferenceClassDescImpl.ofValidated("[Ljava/lang/Object;"); + private static final MethodType INVOKER_MT = MethodType.methodType(Object.class, MethodHandle.class, Object[].class); + private static final MethodType REFLECT_INVOKER_MT = MethodType.methodType(Object.class, MethodHandle.class, Object.class, Object[].class); static MethodHandle bindCaller(MethodHandle mh, Class hostClass) { // Code in the boot layer should now be careful while creating method handles or @@ -1250,8 +1256,6 @@ private static boolean checkCallerClass(Class expected) { /** Produces byte code for a class that is used as an injected invoker. */ private static byte[] generateInvokerTemplate() { - ClassWriter cw = new ClassWriter(0); - // private static class InjectedInvoker { // /* this is used to wrap DMH(s) of caller-sensitive methods */ // @Hidden @@ -1265,39 +1269,25 @@ private static byte[] generateInvokerTemplate() { // } // } // } - cw.visit(CLASSFILE_VERSION, ACC_PRIVATE | ACC_SUPER, "InjectedInvoker", null, "java/lang/Object", null); - { - var mv = cw.visitMethod(ACC_STATIC, "invoke_V", - "(Ljava/lang/invoke/MethodHandle;[Ljava/lang/Object;)Ljava/lang/Object;", - null, null); - - mv.visitCode(); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", - "([Ljava/lang/Object;)Ljava/lang/Object;", false); - mv.visitInsn(ARETURN); - mv.visitMaxs(2, 2); - mv.visitEnd(); - - cw.visitEnd(); - } - - { - var mv = cw.visitMethod(ACC_STATIC, "reflect_invoke_V", - "(Ljava/lang/invoke/MethodHandle;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", - null, null); - mv.visitCode(); - mv.visitVarInsn(ALOAD, 0); - mv.visitVarInsn(ALOAD, 1); - mv.visitVarInsn(ALOAD, 2); - mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", - "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); - mv.visitInsn(ARETURN); - mv.visitMaxs(3, 3); - mv.visitEnd(); - } - return cw.toByteArray(); + return ClassFile.of().build(ReferenceClassDescImpl.ofValidated("LInjectedInvoker;"), clb -> clb + .withFlags(ACC_PRIVATE | ACC_SUPER) + .withMethodBody( + "invoke_V", + MethodTypeDescImpl.ofValidated(CD_Object, CD_MethodHandle, CD_Object_array), + ACC_STATIC, + cob -> cob.aload(0) + .aload(1) + .invokevirtual(CD_MethodHandle, "invokeExact", MethodTypeDescImpl.ofValidated(CD_Object, CD_Object_array)) + .areturn()) + .withMethodBody( + "reflect_invoke_V", + MethodTypeDescImpl.ofValidated(CD_Object, CD_MethodHandle, CD_Object, CD_Object_array), + ACC_STATIC, + cob -> cob.aload(0) + .aload(1) + .aload(2) + .invokevirtual(CD_MethodHandle, "invokeExact", MethodTypeDescImpl.ofValidated(CD_Object, CD_Object, CD_Object_array)) + .areturn())); } } diff --git a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java index 9ac8e42a2f0c2..0cb77f632b334 100644 --- a/src/java.base/share/classes/java/lang/invoke/MethodHandles.java +++ b/src/java.base/share/classes/java/lang/invoke/MethodHandles.java @@ -28,9 +28,6 @@ import jdk.internal.access.SharedSecrets; import jdk.internal.misc.Unsafe; import jdk.internal.misc.VM; -import jdk.internal.org.objectweb.asm.ClassReader; -import jdk.internal.org.objectweb.asm.Opcodes; -import jdk.internal.org.objectweb.asm.Type; import jdk.internal.reflect.CallerSensitive; import jdk.internal.reflect.CallerSensitiveAdapter; import jdk.internal.reflect.Reflection; @@ -42,8 +39,10 @@ import sun.reflect.misc.ReflectUtil; import sun.security.util.SecurityConstants; +import java.lang.classfile.ClassModel; import java.lang.constant.ConstantDescs; import java.lang.invoke.LambdaForm.BasicType; +import java.lang.invoke.MethodHandleImpl.Intrinsic; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Member; @@ -62,8 +61,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Stream; +import static java.lang.classfile.ClassFile.*; import static java.lang.invoke.LambdaForm.BasicType.V_TYPE; -import static java.lang.invoke.MethodHandleImpl.Intrinsic; import static java.lang.invoke.MethodHandleNatives.Constants.*; import static java.lang.invoke.MethodHandleStatics.UNSAFE; import static java.lang.invoke.MethodHandleStatics.newIllegalArgumentException; @@ -2288,27 +2287,16 @@ private static ClassFile readClassFile(byte[] bytes) { String name; int accessFlags; try { - ClassReader reader = new ClassReader(bytes); - // ClassReader does not check if `this_class` is CONSTANT_Class_info - // workaround to read `this_class` using readConst and validate the value - int thisClass = reader.readUnsignedShort(reader.header + 2); - Object constant = reader.readConst(thisClass, new char[reader.getMaxStringLength()]); - if (!(constant instanceof Type type)) { - throw new ClassFormatError("this_class item: #" + thisClass + " not a CONSTANT_Class_info"); - } - if (!type.getDescriptor().startsWith("L")) { - throw new ClassFormatError("this_class item: #" + thisClass + " not a CONSTANT_Class_info"); - } - name = type.getInternalName(); - accessFlags = reader.readUnsignedShort(reader.header); - } catch (RuntimeException e) { - // ASM exceptions are poorly specified + ClassModel cm = java.lang.classfile.ClassFile.of().parse(bytes); + name = cm.thisClass().asInternalName(); + accessFlags = cm.flags().flagsMask(); + } catch (IllegalArgumentException e) { ClassFormatError cfe = new ClassFormatError(); cfe.initCause(e); throw cfe; } // must be a class or interface - if ((accessFlags & Opcodes.ACC_MODULE) != 0) { + if ((accessFlags & ACC_MODULE) != 0) { throw newIllegalArgumentException("Not a class or interface: ACC_MODULE flag is set"); } return new ClassFile(name, accessFlags, bytes); diff --git a/src/java.base/share/classes/java/lang/invoke/MethodType.java b/src/java.base/share/classes/java/lang/invoke/MethodType.java index 29a338261e905..faf8302206ede 100644 --- a/src/java.base/share/classes/java/lang/invoke/MethodType.java +++ b/src/java.base/share/classes/java/lang/invoke/MethodType.java @@ -1291,15 +1291,21 @@ static String toFieldDescriptorString(Class cls) { */ @Override public Optional describeConstable() { - try { - return Optional.of(MethodTypeDesc.of(returnType().describeConstable().orElseThrow(), - Stream.of(parameterArray()) - .map(p -> p.describeConstable().orElseThrow()) - .toArray(ClassDesc[]::new))); - } - catch (NoSuchElementException e) { + var retDesc = returnType().describeConstable(); + if (retDesc.isEmpty()) return Optional.empty(); + + if (parameterCount() == 0) + return Optional.of(MethodTypeDesc.of(retDesc.get())); + + var params = new ClassDesc[parameterCount()]; + for (int i = 0; i < params.length; i++) { + var paramDesc = parameterType(i).describeConstable(); + if (paramDesc.isEmpty()) + return Optional.empty(); + params[i] = paramDesc.get(); } + return Optional.of(MethodTypeDesc.of(retDesc.get(), params)); } //--- Serialization. diff --git a/src/java.base/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java b/src/java.base/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java index e49094073c3ca..e35271dc8b42c 100644 --- a/src/java.base/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java +++ b/src/java.base/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java @@ -25,176 +25,103 @@ package java.lang.invoke; -import jdk.internal.org.objectweb.asm.MethodVisitor; -import jdk.internal.org.objectweb.asm.Opcodes; -import jdk.internal.org.objectweb.asm.Type; -import sun.invoke.util.BytecodeDescriptor; +import java.lang.constant.ClassDesc; +import java.lang.classfile.CodeBuilder; +import java.lang.classfile.TypeKind; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.MethodRefEntry; +import jdk.internal.constant.MethodTypeDescImpl; +import jdk.internal.constant.ReferenceClassDescImpl; import sun.invoke.util.Wrapper; -import static sun.invoke.util.Wrapper.*; -class TypeConvertingMethodAdapter extends MethodVisitor { +import static java.lang.constant.ConstantDescs.*; - TypeConvertingMethodAdapter(MethodVisitor mv) { - super(Opcodes.ASM7, mv); - } - - private static final int NUM_WRAPPERS = Wrapper.COUNT; - - private static final String NAME_OBJECT = "java/lang/Object"; - private static final String WRAPPER_PREFIX = "Ljava/lang/"; - - // Same for all primitives; name of the boxing method - private static final String NAME_BOX_METHOD = "valueOf"; - - // Table of opcodes for widening primitive conversions; NOP = no conversion - private static final int[][] wideningOpcodes = new int[NUM_WRAPPERS][NUM_WRAPPERS]; - - private static final Wrapper[] FROM_WRAPPER_NAME = new Wrapper[16]; - - // Table of wrappers for primitives, indexed by ASM type sorts - private static final Wrapper[] FROM_TYPE_SORT = new Wrapper[12]; - - static { - for (Wrapper w : Wrapper.values()) { - if (w.basicTypeChar() != 'L') { - int wi = hashWrapperName(w.wrapperSimpleName()); - assert (FROM_WRAPPER_NAME[wi] == null); - FROM_WRAPPER_NAME[wi] = w; - } - } - - // wideningOpcodes[][] will be NOP-initialized by default - assert(Opcodes.NOP == 0); +class TypeConvertingMethodAdapter { - initWidening(LONG, Opcodes.I2L, BYTE, SHORT, INT, CHAR); - initWidening(LONG, Opcodes.F2L, FLOAT); - initWidening(FLOAT, Opcodes.I2F, BYTE, SHORT, INT, CHAR); - initWidening(FLOAT, Opcodes.L2F, LONG); - initWidening(DOUBLE, Opcodes.I2D, BYTE, SHORT, INT, CHAR); - initWidening(DOUBLE, Opcodes.F2D, FLOAT); - initWidening(DOUBLE, Opcodes.L2D, LONG); + private static class BoxHolder { + private static final ConstantPoolBuilder CP = ConstantPoolBuilder.of(); - FROM_TYPE_SORT[Type.BYTE] = Wrapper.BYTE; - FROM_TYPE_SORT[Type.SHORT] = Wrapper.SHORT; - FROM_TYPE_SORT[Type.INT] = Wrapper.INT; - FROM_TYPE_SORT[Type.LONG] = Wrapper.LONG; - FROM_TYPE_SORT[Type.CHAR] = Wrapper.CHAR; - FROM_TYPE_SORT[Type.FLOAT] = Wrapper.FLOAT; - FROM_TYPE_SORT[Type.DOUBLE] = Wrapper.DOUBLE; - FROM_TYPE_SORT[Type.BOOLEAN] = Wrapper.BOOLEAN; - } - - private static void initWidening(Wrapper to, int opcode, Wrapper... from) { - for (Wrapper f : from) { - wideningOpcodes[f.ordinal()][to.ordinal()] = opcode; + private static MethodRefEntry box(ClassDesc primitive, ClassDesc target) { + return CP.methodRefEntry(target, "valueOf", MethodTypeDescImpl.ofValidated(target, primitive)); } - } - /** - * Class name to Wrapper hash, derived from Wrapper.hashWrap() - * @param xn - * @return The hash code 0-15 - */ - private static int hashWrapperName(String xn) { - if (xn.length() < 3) { - return 0; + private static final MethodRefEntry BOX_BOOLEAN = box(CD_boolean, CD_Boolean), + BOX_BYTE = box(CD_byte, CD_Byte), + BOX_SHORT = box(CD_short, CD_Short), + BOX_CHAR = box(CD_char, CD_Character), + BOX_INT = box(CD_int, CD_Integer), + BOX_LONG = box(CD_long, CD_Long), + BOX_FLOAT = box(CD_float, CD_Float), + BOX_DOUBLE = box(CD_double, CD_Double); + + private static MethodRefEntry unbox(ClassDesc owner, String methodName, ClassDesc primitiveTarget) { + return CP.methodRefEntry(owner, methodName, MethodTypeDescImpl.ofValidated(primitiveTarget)); } - return (3 * xn.charAt(1) + xn.charAt(2)) % 16; - } - - private Wrapper wrapperOrNullFromDescriptor(String desc) { - if (!desc.startsWith(WRAPPER_PREFIX)) { - // Not a class type (array or method), so not a boxed type - // or not in the right package - return null; - } - // Pare it down to the simple class name - String cname = desc.substring(WRAPPER_PREFIX.length(), desc.length() - 1); - // Hash to a Wrapper - Wrapper w = FROM_WRAPPER_NAME[hashWrapperName(cname)]; - if (w == null || w.wrapperSimpleName().equals(cname)) { - return w; - } else { - return null; - } - } - private static String wrapperName(Wrapper w) { - return "java/lang/" + w.wrapperSimpleName(); + private static final MethodRefEntry UNBOX_BOOLEAN = unbox(CD_Boolean, "booleanValue", CD_boolean), + UNBOX_BYTE = unbox(CD_Number, "byteValue", CD_byte), + UNBOX_SHORT = unbox(CD_Number, "shortValue", CD_short), + UNBOX_CHAR = unbox(CD_Character, "charValue", CD_char), + UNBOX_INT = unbox(CD_Number, "intValue", CD_int), + UNBOX_LONG = unbox(CD_Number, "longValue", CD_long), + UNBOX_FLOAT = unbox(CD_Number, "floatValue", CD_float), + UNBOX_DOUBLE = unbox(CD_Number, "doubleValue", CD_double); } - private static String unboxMethod(Wrapper w) { - return w.primitiveSimpleName() + "Value"; + private static TypeKind primitiveTypeKindFromClass(Class type) { + if (type == int.class) return TypeKind.IntType; + if (type == long.class) return TypeKind.LongType; + if (type == boolean.class) return TypeKind.BooleanType; + if (type == short.class) return TypeKind.ShortType; + if (type == byte.class) return TypeKind.ByteType; + if (type == char.class) return TypeKind.CharType; + if (type == float.class) return TypeKind.FloatType; + if (type == double.class) return TypeKind.DoubleType; + return null; } - private static String boxingDescriptor(Wrapper w) { - return "(" + w.basicTypeChar() + ")L" + wrapperName(w) + ";"; + static void boxIfTypePrimitive(CodeBuilder cob, TypeKind tk) { + box(cob, tk); } - private static String unboxingDescriptor(Wrapper w) { - return "()" + w.basicTypeChar(); - } - - void boxIfTypePrimitive(Type t) { - Wrapper w = FROM_TYPE_SORT[t.getSort()]; - if (w != null) { - box(w); - } - } - - void widen(Wrapper ws, Wrapper wt) { + static void widen(CodeBuilder cob, TypeKind ws, TypeKind wt) { + ws = ws.asLoadable(); + wt = wt.asLoadable(); if (ws != wt) { - int opcode = wideningOpcodes[ws.ordinal()][wt.ordinal()]; - if (opcode != Opcodes.NOP) { - visitInsn(opcode); - } + cob.conversion(ws, wt); } } - void box(Wrapper w) { - visitMethodInsn(Opcodes.INVOKESTATIC, - wrapperName(w), - NAME_BOX_METHOD, - boxingDescriptor(w), false); - } - - /** - * Convert types by unboxing. The source type is known to be a primitive wrapper. - * @param sname A primitive wrapper corresponding to wrapped reference source type - * @param wt A primitive wrapper being converted to - */ - void unbox(String sname, Wrapper wt) { - visitMethodInsn(Opcodes.INVOKEVIRTUAL, - sname, - unboxMethod(wt), - unboxingDescriptor(wt), false); - } - - private String descriptorToName(String desc) { - int last = desc.length() - 1; - if (desc.charAt(0) == 'L' && desc.charAt(last) == ';') { - // In descriptor form - return desc.substring(1, last); - } else { - // Already in internal name form - return desc; + static void box(CodeBuilder cob, TypeKind tk) { + switch (tk) { + case BooleanType -> cob.invokestatic(BoxHolder.BOX_BOOLEAN); + case ByteType -> cob.invokestatic(BoxHolder.BOX_BYTE); + case CharType -> cob.invokestatic(BoxHolder.BOX_CHAR); + case DoubleType -> cob.invokestatic(BoxHolder.BOX_DOUBLE); + case FloatType -> cob.invokestatic(BoxHolder.BOX_FLOAT); + case IntType -> cob.invokestatic(BoxHolder.BOX_INT); + case LongType -> cob.invokestatic(BoxHolder.BOX_LONG); + case ShortType -> cob.invokestatic(BoxHolder.BOX_SHORT); } } - void cast(String ds, String dt) { - String ns = descriptorToName(ds); - String nt = descriptorToName(dt); - if (!nt.equals(ns) && !nt.equals(NAME_OBJECT)) { - visitTypeInsn(Opcodes.CHECKCAST, nt); + static void unbox(CodeBuilder cob, TypeKind to) { + switch (to) { + case BooleanType -> cob.invokevirtual(BoxHolder.UNBOX_BOOLEAN); + case ByteType -> cob.invokevirtual(BoxHolder.UNBOX_BYTE); + case CharType -> cob.invokevirtual(BoxHolder.UNBOX_CHAR); + case DoubleType -> cob.invokevirtual(BoxHolder.UNBOX_DOUBLE); + case FloatType -> cob.invokevirtual(BoxHolder.UNBOX_FLOAT); + case IntType -> cob.invokevirtual(BoxHolder.UNBOX_INT); + case LongType -> cob.invokevirtual(BoxHolder.UNBOX_LONG); + case ShortType -> cob.invokevirtual(BoxHolder.UNBOX_SHORT); } } - private Wrapper toWrapper(String desc) { - char first = desc.charAt(0); - if (first == '[' || first == '(') { - first = 'L'; + static void cast(CodeBuilder cob, ClassDesc dt) { + if (!dt.equals(CD_Object)) { + cob.checkcast(dt); } - return Wrapper.forBasicType(first); } /** @@ -204,7 +131,7 @@ private Wrapper toWrapper(String desc) { * @param target * @param functional */ - void convertType(Class arg, Class target, Class functional) { + static void convertType(CodeBuilder cob, Class arg, Class target, Class functional) { if (arg.equals(target) && arg.equals(functional)) { return; } @@ -212,84 +139,69 @@ void convertType(Class arg, Class target, Class functional) { return; } if (arg.isPrimitive()) { - Wrapper wArg = Wrapper.forPrimitiveType(arg); if (target.isPrimitive()) { // Both primitives: widening - widen(wArg, Wrapper.forPrimitiveType(target)); + widen(cob, TypeKind.from(arg), TypeKind.from(target)); } else { // Primitive argument to reference target - String dTarget = BytecodeDescriptor.unparse(target); - Wrapper wPrimTarget = wrapperOrNullFromDescriptor(dTarget); - if (wPrimTarget != null) { + TypeKind wPrimTk = primitiveTypeKindFromClass(target); + if (wPrimTk != null) { // The target is a boxed primitive type, widen to get there before boxing - widen(wArg, wPrimTarget); - box(wPrimTarget); + widen(cob, TypeKind.from(arg), wPrimTk); + box(cob, wPrimTk); } else { // Otherwise, box and cast - box(wArg); - cast(wrapperName(wArg), dTarget); + box(cob, TypeKind.from(arg)); + cast(cob, classDesc(target)); } } } else { - String dArg = BytecodeDescriptor.unparse(arg); - String dSrc; - if (functional.isPrimitive()) { - dSrc = dArg; + Class src; + if (arg == functional || functional.isPrimitive()) { + src = arg; } else { // Cast to convert to possibly more specific type, and generate CCE for invalid arg - dSrc = BytecodeDescriptor.unparse(functional); - cast(dArg, dSrc); + src = functional; + cast(cob, classDesc(functional)); } - String dTarget = BytecodeDescriptor.unparse(target); if (target.isPrimitive()) { - Wrapper wTarget = toWrapper(dTarget); // Reference argument to primitive target - Wrapper wps = wrapperOrNullFromDescriptor(dSrc); + TypeKind wps = primitiveTypeKindFromClass(src); if (wps != null) { - if (wps.isSigned() || wps.isFloating()) { + if (src != Character.class && src != Boolean.class) { // Boxed number to primitive - unbox(wrapperName(wps), wTarget); + unbox(cob, TypeKind.from(target)); } else { // Character or Boolean - unbox(wrapperName(wps), wps); - widen(wps, wTarget); + unbox(cob, wps); + widen(cob, wps, TypeKind.from(target)); } } else { // Source type is reference type, but not boxed type, // assume it is super type of target type - String intermediate; - if (wTarget.isSigned() || wTarget.isFloating()) { - // Boxed number to primitive - intermediate = "java/lang/Number"; + if (target == char.class) { + cast(cob, CD_Character); + } else if (target == boolean.class) { + cast(cob, CD_Boolean); } else { - // Character or Boolean - intermediate = wrapperName(wTarget); + // Boxed number to primitive + cast(cob, CD_Number); } - cast(dSrc, intermediate); - unbox(intermediate, wTarget); + unbox(cob, TypeKind.from(target)); } } else { // Both reference types: just case to target type - cast(dSrc, dTarget); + if (src != target) { + cast(cob, classDesc(target)); + } } } } - /** - * The following method is copied from - * org.objectweb.asm.commons.InstructionAdapter. Part of ASM: a very small - * and fast Java bytecode manipulation framework. - * Copyright (c) 2000-2005 INRIA, France Telecom All rights reserved. - */ - void iconst(final int cst) { - if (cst >= -1 && cst <= 5) { - mv.visitInsn(Opcodes.ICONST_0 + cst); - } else if (cst >= Byte.MIN_VALUE && cst <= Byte.MAX_VALUE) { - mv.visitIntInsn(Opcodes.BIPUSH, cst); - } else if (cst >= Short.MIN_VALUE && cst <= Short.MAX_VALUE) { - mv.visitIntInsn(Opcodes.SIPUSH, cst); - } else { - mv.visitLdcInsn(cst); - } + static ClassDesc classDesc(Class cls) { + return cls.isPrimitive() ? Wrapper.forPrimitiveType(cls).basicClassDescriptor() + : cls == Object.class ? CD_Object + : cls == String.class ? CD_String + : ReferenceClassDescImpl.ofValidated(cls.descriptorString()); } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java index ddb14b2d26a5a..0f1f6fb69de26 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java @@ -25,15 +25,19 @@ */ package jdk.internal.classfile.impl; -import java.lang.classfile.constantpool.InvokeDynamicEntry; -import java.lang.constant.ClassDesc; -import static java.lang.constant.ConstantDescs.*; -import java.lang.constant.MethodTypeDesc; +import java.lang.classfile.Attribute; +import java.lang.classfile.Attributes; +import java.lang.classfile.BufWriter; import java.lang.classfile.ClassFile; +import java.lang.classfile.Label; +import java.lang.classfile.attribute.StackMapTableAttribute; import java.lang.classfile.constantpool.ClassEntry; import java.lang.classfile.constantpool.ConstantDynamicEntry; -import java.lang.classfile.constantpool.MemberRefEntry; import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.InvokeDynamicEntry; +import java.lang.classfile.constantpool.MemberRefEntry; +import java.lang.constant.ClassDesc; +import java.lang.constant.MethodTypeDesc; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; @@ -41,15 +45,10 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -import java.lang.classfile.Attribute; +import jdk.internal.constant.ReferenceClassDescImpl; import static java.lang.classfile.ClassFile.*; -import static jdk.internal.constant.ConstantUtils.binaryNameToDesc; - -import java.lang.classfile.BufWriter; -import java.lang.classfile.Label; -import java.lang.classfile.attribute.StackMapTableAttribute; -import java.lang.classfile.Attributes; +import static java.lang.constant.ConstantDescs.*; /** * StackMapGenerator is responsible for stack map frames generation. @@ -1249,14 +1248,14 @@ private static record Type(int tag, ClassDesc sym, int bci) { //frequently used types to reduce footprint static final Type OBJECT_TYPE = referenceType(CD_Object), THROWABLE_TYPE = referenceType(CD_Throwable), - INT_ARRAY_TYPE = referenceType(CD_int.arrayType()), - BOOLEAN_ARRAY_TYPE = referenceType(CD_boolean.arrayType()), - BYTE_ARRAY_TYPE = referenceType(CD_byte.arrayType()), - CHAR_ARRAY_TYPE = referenceType(CD_char.arrayType()), - SHORT_ARRAY_TYPE = referenceType(CD_short.arrayType()), - LONG_ARRAY_TYPE = referenceType(CD_long.arrayType()), - DOUBLE_ARRAY_TYPE = referenceType(CD_double.arrayType()), - FLOAT_ARRAY_TYPE = referenceType(CD_float.arrayType()), + INT_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[I")), + BOOLEAN_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[Z")), + BYTE_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[B")), + CHAR_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[C")), + SHORT_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[S")), + LONG_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[J")), + DOUBLE_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[D")), + FLOAT_ARRAY_TYPE = referenceType(ReferenceClassDescImpl.ofValidated("[F")), STRING_TYPE = referenceType(CD_String), CLASS_TYPE = referenceType(CD_Class), METHOD_HANDLE_TYPE = referenceType(CD_MethodHandle), @@ -1321,8 +1320,8 @@ Type mergeComponentFrom(Type from, ClassHierarchyImpl context) { } } - private static final ClassDesc CD_Cloneable = binaryNameToDesc("java.lang.Cloneable"); - private static final ClassDesc CD_Serializable = binaryNameToDesc("java.io.Serializable"); + private static final ClassDesc CD_Cloneable = ReferenceClassDescImpl.ofValidated("Ljava/lang/Cloneable;"); + private static final ClassDesc CD_Serializable = ReferenceClassDescImpl.ofValidated("Ljava/io/Serializable;"); private Type mergeReferenceFrom(Type from, ClassHierarchyImpl context) { if (from == NULL_TYPE) { diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index a4ff429bd00c3..c7c76c8fa3a2e 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -101,6 +101,7 @@ runtime/StackGuardPages/TestStackGuardPagesNative.java 8303612 linux-all runtime/ErrorHandling/TestDwarf.java#checkDecoder 8305489 linux-all runtime/ErrorHandling/MachCodeFramesInErrorFile.java 8313315 linux-ppc64le runtime/cds/appcds/customLoader/HelloCustom_JFR.java 8241075 linux-all,windows-x64 +runtime/ClassInitErrors/TestStackOverflowDuringInit.java 8334545 generic-all applications/jcstress/copy.java 8229852 linux-all From 856931d01f14b1c665c04e05d5637b8237c56988 Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Wed, 19 Jun 2024 16:23:22 +0000 Subject: [PATCH 040/102] 8304732: jdk/jfr/api/consumer/recordingstream/TestStop.java failed again with "Expected outer stream to have 3 events" Reviewed-by: mgronlun --- src/hotspot/share/jfr/jni/jfrJniMethod.cpp | 5 ++ src/hotspot/share/jfr/jni/jfrJniMethod.hpp | 2 + .../jfr/jni/jfrJniMethodRegistration.cpp | 3 +- .../jfr/recorder/repository/jfrChunk.cpp | 6 +-- .../jfr/recorder/repository/jfrChunk.hpp | 4 +- .../share/jfr/support/jfrIntrinsics.hpp | 4 +- src/hotspot/share/runtime/objectMonitor.cpp | 2 +- .../classes/jdk/jfr/internal/HiddenWait.java | 32 +++++++++++++ .../share/classes/jdk/jfr/internal/JVM.java | 13 ++--- .../classes/jdk/jfr/internal/JVMSupport.java | 8 +--- .../jdk/jfr/internal/MetadataRepository.java | 23 +++++++-- .../consumer/AbstractEventStream.java | 6 +-- .../consumer/EventDirectoryStream.java | 44 ++++++++++------- .../internal/consumer/EventFileStream.java | 4 +- .../internal/management/StreamBarrier.java | 15 ++++-- .../classes/jdk/jfr/internal/util/Utils.java | 6 ++- .../consumer/recordingstream/TestStop.java | 47 +++++++++++-------- 17 files changed, 154 insertions(+), 70 deletions(-) create mode 100644 src/jdk.jfr/share/classes/jdk/jfr/internal/HiddenWait.java diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp index 8953976cd0c7a..d60baa3c1cc9a 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp @@ -30,6 +30,7 @@ #include "jfr/recorder/jfrRecorder.hpp" #include "jfr/recorder/checkpoint/jfrMetadataEvent.hpp" #include "jfr/recorder/checkpoint/types/traceid/jfrTraceId.inline.hpp" +#include "jfr/recorder/repository/jfrChunk.hpp" #include "jfr/recorder/repository/jfrRepository.hpp" #include "jfr/recorder/repository/jfrChunkRotation.hpp" #include "jfr/recorder/repository/jfrChunkWriter.hpp" @@ -425,3 +426,7 @@ JVM_END JVM_ENTRY_NO_ENV(void, jfr_unregister_stack_filter(JNIEnv* env, jclass jvm, jlong id)) JfrStackFilterRegistry::remove(id); JVM_END + +NO_TRANSITION(jlong, jfr_nanos_now(JNIEnv* env, jclass jvm)) + return JfrChunk::nanos_now(); +NO_TRANSITION_END diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.hpp b/src/hotspot/share/jfr/jni/jfrJniMethod.hpp index 6a2d622d7e9a7..ca119c1f8c35a 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethod.hpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethod.hpp @@ -165,6 +165,8 @@ jlong JNICALL jfr_register_stack_filter(JNIEnv* env, jclass jvm, jobjectArray cl jlong JNICALL jfr_unregister_stack_filter(JNIEnv* env, jclass jvm, jlong id); +jlong JNICALL jfr_nanos_now(JNIEnv* env, jclass jvm); + #ifdef __cplusplus } #endif diff --git a/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp b/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp index 7ef831f6282f0..415c7468a6290 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp @@ -100,7 +100,8 @@ JfrJniMethodRegistration::JfrJniMethodRegistration(JNIEnv* env) { (char*)"hostTotalSwapMemory", (char*)"()J", (void*) jfr_host_total_swap_memory, (char*)"emitDataLoss", (char*)"(J)V", (void*)jfr_emit_data_loss, (char*)"registerStackFilter", (char*)"([Ljava/lang/String;[Ljava/lang/String;)J", (void*)jfr_register_stack_filter, - (char*)"unregisterStackFilter", (char*)"(J)V", (void*)jfr_unregister_stack_filter + (char*)"unregisterStackFilter", (char*)"(J)V", (void*)jfr_unregister_stack_filter, + (char*)"nanosNow", (char*)"()J", (void*)jfr_nanos_now }; const size_t method_array_length = sizeof(method) / sizeof(JNINativeMethod); diff --git a/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp b/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp index 6d0ec7773b931..b88ba06bdf799 100644 --- a/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp +++ b/src/hotspot/share/jfr/recorder/repository/jfrChunk.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ static const u2 JFR_VERSION_MAJOR = 2; static const u2 JFR_VERSION_MINOR = 1; // strictly monotone -static jlong nanos_now() { +jlong JfrChunk::nanos_now() { static jlong last = 0; jlong seconds; @@ -147,7 +147,7 @@ void JfrChunk::update_start_ticks() { } void JfrChunk::update_start_nanos() { - const jlong now = nanos_now(); + const jlong now = JfrChunk::nanos_now(); assert(now >= _start_nanos, "invariant"); assert(now >= _last_update_nanos, "invariant"); _start_nanos = _last_update_nanos = now; diff --git a/src/hotspot/share/jfr/recorder/repository/jfrChunk.hpp b/src/hotspot/share/jfr/recorder/repository/jfrChunk.hpp index d7bd3411160d7..91b42948181ac 100644 --- a/src/hotspot/share/jfr/recorder/repository/jfrChunk.hpp +++ b/src/hotspot/share/jfr/recorder/repository/jfrChunk.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,6 +34,8 @@ const u1 PAD = 0; class JfrChunk : public JfrCHeapObj { friend class JfrChunkWriter; friend class JfrChunkHeadWriter; + public: + static jlong nanos_now(); private: char* _path; int64_t _start_ticks; diff --git a/src/hotspot/share/jfr/support/jfrIntrinsics.hpp b/src/hotspot/share/jfr/support/jfrIntrinsics.hpp index 65a94164a9756..6520f3cb00ca0 100644 --- a/src/hotspot/share/jfr/support/jfrIntrinsics.hpp +++ b/src/hotspot/share/jfr/support/jfrIntrinsics.hpp @@ -1,5 +1,5 @@ /* -* Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. +* Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,13 +47,13 @@ class JfrIntrinsicSupport : AllStatic { #define JFR_HAVE_INTRINSICS #define JFR_TEMPLATES(template) \ + template(jdk_jfr_internal_HiddenWait, "jdk/jfr/internal/HiddenWait") \ template(jdk_jfr_internal_JVM, "jdk/jfr/internal/JVM") \ template(jdk_jfr_internal_event_EventWriterFactory, "jdk/jfr/internal/event/EventWriterFactory") \ template(jdk_jfr_internal_event_EventConfiguration_signature, "Ljdk/jfr/internal/event/EventConfiguration;") \ template(getEventWriter_signature, "()Ljdk/jfr/internal/event/EventWriter;") \ template(eventConfiguration_name, "eventConfiguration") \ template(commit_name, "commit") \ - template(jfr_chunk_rotation_monitor, "jdk/jfr/internal/JVM$ChunkRotationMonitor") \ #define JFR_INTRINSICS(do_intrinsic, do_class, do_name, do_signature, do_alias) \ do_intrinsic(_counterTime, jdk_jfr_internal_JVM, counterTime_name, void_long_signature, F_SN) \ diff --git a/src/hotspot/share/runtime/objectMonitor.cpp b/src/hotspot/share/runtime/objectMonitor.cpp index 178f3e97d7108..ba463231592c5 100644 --- a/src/hotspot/share/runtime/objectMonitor.cpp +++ b/src/hotspot/share/runtime/objectMonitor.cpp @@ -1442,7 +1442,7 @@ bool ObjectMonitor::check_owner(TRAPS) { static inline bool is_excluded(const Klass* monitor_klass) { assert(monitor_klass != nullptr, "invariant"); NOT_JFR_RETURN_(false); - JFR_ONLY(return vmSymbols::jfr_chunk_rotation_monitor() == monitor_klass->name();) + JFR_ONLY(return vmSymbols::jdk_jfr_internal_HiddenWait() == monitor_klass->name();) } static void post_monitor_wait_event(EventJavaMonitorWait* event, diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/HiddenWait.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/HiddenWait.java new file mode 100644 index 0000000000000..26505990332c9 --- /dev/null +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/HiddenWait.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.jfr.internal; + +/** + * The HiddenWait class is used to exclude jdk.JavaMonitorWait events + * from being generated when Object.wait() is called on an object of this type. + */ +public final class HiddenWait { +} diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java index 02edfd1e5abbd..2e600c8c02974 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,14 +41,10 @@ public final class JVM { static final long RESERVED_CLASS_ID_LIMIT = 500; - private static class ChunkRotationMonitor {} - /* * The JVM uses the chunk rotation monitor to notify Java that a rotation is warranted. - * The monitor type is used to exclude jdk.JavaMonitorWait events from being generated - * when Object.wait() is called on this monitor. */ - public static final Object CHUNK_ROTATION_MONITOR = new ChunkRotationMonitor(); + public static final Object CHUNK_ROTATION_MONITOR = new HiddenWait(); private static volatile boolean nativeOK; @@ -174,6 +170,11 @@ private static class ChunkRotationMonitor {} */ public static native long getTicksFrequency(); + /** + * Returns the same clock that sets the start time of a chunk (in nanos). + */ + public static native long nanosNow(); + /** * Write message to log. Should swallow null or empty message, and be able * to handle any Java character and not crash with very large message diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMSupport.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMSupport.java index 036d49e6e0eb5..345d2fdcc8dfb 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMSupport.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -119,11 +119,7 @@ private static void awaitUniqueTimestamp() { lastTimestamp = time; return; } - try { - Thread.sleep(0, 100); - } catch (InterruptedException iex) { - // ignore - } + Utils.takeNap(1); } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java index 7031718cb284e..75be70a0d1dae 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java @@ -64,6 +64,8 @@ public final class MetadataRepository { private boolean unregistered; private long lastUnloaded = -1; + private long lastMillis; + public MetadataRepository() { initializeJVMEventTypes(); } @@ -313,11 +315,12 @@ synchronized Instant setOutput(String filename) { if (staleMetadata) { storeDescriptorInJVM(); } + // Each chunk needs a unique timestamp. If two chunks get the same + // timestamp, the parser may stop prematurely at an earlier chunk. + // The resolution needs to be measured in milliseconds as this + // is what RecordingInfo:getStopTime() returns. + awaitEpochMilliShift(); JVM.setOutput(filename); - // Each chunk needs a unique start timestamp and - // if the clock resolution is low, two chunks may - // get the same timestamp. Utils.getChunkStartNanos() - // ensures the timestamp is unique for the next chunk long chunkStart = JVMSupport.getChunkStartNanos(); if (filename != null) { RepositoryFiles.notifyNewFile(); @@ -332,6 +335,18 @@ synchronized Instant setOutput(String filename) { return Utils.epochNanosToInstant(chunkStart); } + private void awaitEpochMilliShift() { + while (true) { + long nanos = JVM.nanosNow(); + long millis = Utils.epochNanosToInstant(nanos).toEpochMilli(); + if (millis != lastMillis) { + lastMillis = millis; + return; + } + Utils.takeNap(1); + } + } + private void unregisterUnloaded() { long unloaded = JVM.getUnloadedEventClassCount(); if (this.lastUnloaded != unloaded) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/AbstractEventStream.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/AbstractEventStream.java index e3b43635e3398..cdfc8f017a657 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/AbstractEventStream.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/AbstractEventStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -205,7 +205,7 @@ public final void awaitTermination(Duration timeout) throws InterruptedException protected abstract void process() throws IOException; - protected abstract boolean isRecording(); + protected abstract boolean isRecordingStream(); protected final void closeParser() { parserState.close(); @@ -249,7 +249,7 @@ private void startInternal(long startNanos) { if (streamConfiguration.started) { throw new IllegalStateException("Event stream can only be started once"); } - if (isRecording() && streamConfiguration.startTime == null) { + if (isRecordingStream() && streamConfiguration.startTime == null) { streamConfiguration.setStartNanos(startNanos); } streamConfiguration.setStarted(true); diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventDirectoryStream.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventDirectoryStream.java index 3ed1c4c8d355b..bc9aa7987c3b5 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventDirectoryStream.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventDirectoryStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,9 +33,11 @@ import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.concurrent.atomic.AtomicLong; import java.util.function.Consumer; import jdk.jfr.Configuration; +import jdk.jfr.RecordingState; import jdk.jfr.consumer.RecordedEvent; import jdk.jfr.internal.JVM; import jdk.jfr.internal.LogLevel; @@ -59,6 +61,7 @@ public final class EventDirectoryStream extends AbstractEventStream { private final FileAccess fileAccess; private final PlatformRecording recording; private final StreamBarrier barrier = new StreamBarrier(); + private final AtomicLong streamId = new AtomicLong(); private ChunkParser currentParser; private long currentChunkStartNanos; private RecordedEvent[] sortedCache; @@ -80,6 +83,8 @@ public EventDirectoryStream( } this.fileAccess = Objects.requireNonNull(fileAccess); this.repositoryFiles = new RepositoryFiles(fileAccess, p, allowSubDirectories); + this.streamId.incrementAndGet(); + Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, "Stream " + streamId + " started."); } @Override @@ -137,13 +142,14 @@ protected void processRecursionSafe() throws IOException { Dispatcher lastDisp = null; Dispatcher disp = dispatcher(); Path path; - boolean validStartTime = isRecording() || disp.startTime != null; + boolean validStartTime = isRecordingStream() || disp.startTime != null; if (validStartTime) { path = repositoryFiles.firstPath(disp.startNanos, true); } else { path = repositoryFiles.lastPath(true); } if (path == null) { // closed + logStreamEnd("no first chunk file found."); return; } currentChunkStartNanos = repositoryFiles.getTimestamp(path); @@ -168,7 +174,10 @@ protected void processRecursionSafe() throws IOException { processUnordered(disp); } currentParser.resetCache(); - if (currentParser.getLastFlush() > filterEnd) { + long lastFlush = currentParser.getLastFlush(); + if (lastFlush > filterEnd) { + logStreamEnd("end time at " + filterEnd + + "ns (epoch), parser at " + lastFlush + "ns (epoch)."); return; } } @@ -177,20 +186,25 @@ protected void processRecursionSafe() throws IOException { barrier.check(); // block if recording is being stopped if (barrier.getStreamEnd() <= endMillis) { + String msg = "stopped at " + barrier.getStreamEnd() + "ms (epoch), "; + msg += "parser at " + endMillis + "ms (epoch), " + endNanos + "ns (epoch)"; + logStreamEnd(msg); return; } - if (!barrier.hasStreamEnd() && isLastChunk()) { - // Recording was stopped/closed externally, and no more data to process. - return; + if (isRecordingStream()) { + if (recording.getState() == RecordingState.STOPPED && !barrier.used()) { + logStreamEnd("recording stopped externally."); + return; + } } if (repositoryFiles.hasFixedPath() && currentParser.isFinalChunk()) { - // JVM process exited/crashed, or repository migrated to an unknown location + logStreamEnd("JVM process exited/crashed, or repository migrated to an unknown location."); return; } if (isClosed()) { - // Stream was closed + logStreamEnd("stream closed."); return; } long durationNanos = currentParser.getChunkDuration(); @@ -205,7 +219,8 @@ protected void processRecursionSafe() throws IOException { } path = repositoryFiles.nextPath(currentChunkStartNanos + durationNanos, true); if (path == null) { - return; // stream closed + logStreamEnd("no more chunk files found."); + return; } currentChunkStartNanos = repositoryFiles.getTimestamp(path); input.setFile(path); @@ -217,15 +232,12 @@ protected void processRecursionSafe() throws IOException { } } - - private boolean isLastChunk() { - if (!isRecording()) { - return false; - } - return recording.getFinalChunkStartNanos() >= currentParser.getStartNanos(); + private void logStreamEnd(String text) { + String msg = "Stream " + streamId + " ended, " + text; + Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, msg); } - protected boolean isRecording() { + protected boolean isRecordingStream() { return recording != null; } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventFileStream.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventFileStream.java index 9ecaf2a6075e5..f03e8d8acb48e 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventFileStream.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/EventFileStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,7 +73,7 @@ public void close() { } @Override - protected boolean isRecording() { + protected boolean isRecordingStream() { return false; } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/management/StreamBarrier.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/management/StreamBarrier.java index ed94a908d47a4..0b3132da2178b 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/management/StreamBarrier.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/management/StreamBarrier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ public final class StreamBarrier implements Closeable { private boolean activated = false; + private boolean used = false; private long end = Long.MAX_VALUE; // Blocks thread until barrier is deactivated @@ -62,12 +63,9 @@ public synchronized long getStreamEnd() { return end; } - public synchronized boolean hasStreamEnd() { - return end != Long.MAX_VALUE; - } - public synchronized void activate() { activated = true; + used = true; } @Override @@ -75,4 +73,11 @@ public synchronized void close() throws IOException { activated = false; this.notifyAll(); } + + /** + * Returns {@code true) if barrier is, or has been, in active state, {@code false) otherwise. + */ + public synchronized boolean used() { + return used; + } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java index 0049662e9a1f6..5e04a25fe7ddf 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java @@ -48,6 +48,7 @@ import jdk.jfr.Event; import jdk.jfr.EventType; import jdk.jfr.RecordingState; +import jdk.jfr.internal.HiddenWait; import jdk.jfr.internal.LogLevel; import jdk.jfr.internal.LogTag; import jdk.jfr.internal.Logger; @@ -351,8 +352,11 @@ private static boolean isSupportedType(Class type) { } public static void takeNap(long millis) { + HiddenWait hiddenWait = new HiddenWait(); try { - Thread.sleep(millis); + synchronized(hiddenWait) { + hiddenWait.wait(millis); + } } catch (InterruptedException e) { // ok } diff --git a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestStop.java b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestStop.java index 58dcbbcbe2079..36bbaa3c557db 100644 --- a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestStop.java +++ b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestStop.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ * @requires vm.hasJFR * @library /test/lib /test/jdk * @build jdk.jfr.api.consumer.recordingstream.EventProducer - * @run main/othervm jdk.jfr.api.consumer.recordingstream.TestStop + * @run main/othervm -Xlog:system+parser+jfr=info jdk.jfr.api.consumer.recordingstream.TestStop */ public class TestStop { static class StopEvent extends Event { @@ -139,41 +139,50 @@ private static void testNestedStop() throws Exception { Path fileInner = Path.of("inner.jfr"); inner.dump(fileInner); outer.dump(fileOuter); - System.out.println("Outer dump:"); var dumpOuter = RecordingFile.readAllEvents(fileOuter); - for (RecordedEvent e : dumpOuter) { - System.out.println(eventToText(e)); - } - System.out.println("Inner dump:"); var dumpInner = RecordingFile.readAllEvents(fileInner); - for (RecordedEvent e : dumpInner) { - System.out.println(eventToText(e)); - } - System.out.println(); - System.out.println("Outer stream:"); - for (String s : outerStream) { - System.out.println(s); - } - System.out.println("Inner stream:"); - for (String s : innerStream) { - System.out.println(s); - } + if (dumpOuter.size() != 3) { + log(outerStream, innerStream, dumpOuter, dumpInner); throw new AssertionError("Expected outer dump to have 3 events"); } if (outerStream.size() != 3) { + log(outerStream, innerStream, dumpOuter, dumpInner); throw new AssertionError("Expected outer stream to have 3 events"); } if (dumpInner.size() != 1) { + log(outerStream, innerStream, dumpOuter, dumpInner); throw new AssertionError("Expected inner dump to have 1 event"); } if (innerStream.size() != 1) { + log(outerStream, innerStream, dumpOuter, dumpInner); throw new AssertionError("Expected inner stream to have 1 event"); } } } } + private static void log(List outerStream, List innerStream, List dumpOuter, + List dumpInner) { + System.out.println("Outer dump:"); + for (RecordedEvent e : dumpOuter) { + System.out.println(eventToText(e)); + } + System.out.println("Inner dump:"); + for (RecordedEvent e : dumpInner) { + System.out.println(eventToText(e)); + } + System.out.println(); + System.out.println("Outer stream:"); + for (String s : outerStream) { + System.out.println(s); + } + System.out.println("Inner stream:"); + for (String s : innerStream) { + System.out.println(s); + } + } + private static String eventToText(RecordedEvent event) { Instant timestamp = event.getEndTime(); long s = timestamp.getEpochSecond(); From bcf4bb4882e06d8c52f6eb4e9c4e027ba0622c5f Mon Sep 17 00:00:00 2001 From: Kevin Walls Date: Wed, 19 Jun 2024 16:35:20 +0000 Subject: [PATCH 041/102] 8333344: JMX attaching of Subject does not work when security manager not allowed Reviewed-by: weijun, dfuchs --- src/java.base/share/classes/module-info.java | 1 + .../remote/rmi/RMIConnectionImpl.java | 91 ++++++++++++++----- .../remote/internal/ServerNotifForwarder.java | 5 +- .../MBeanServerFileAccessController.java | 22 +++-- .../javax/management/monitor/Monitor.java | 36 ++++++-- .../management/monitor/StartStopTest.java | 10 +- .../management/monitor/ThreadPoolAccTest.java | 14 ++- test/jdk/javax/management/monitor/all.policy | 3 + .../NotificationAccessControllerTest.java | 2 + .../notif/NotificationEmissionTest.java | 4 +- .../NonJMXPrincipalsTest.java | 1 + .../PasswordAccessFileTest.java | 2 + .../passwordAuthenticator/RMIAltAuthTest.java | 3 + .../RMIPasswdAuthTest.java | 3 + .../passwordAuthenticator/SimpleStandard.java | 6 +- .../security/AuthorizationTest.java | 6 ++ .../jmxremote/bootstrap/RmiBootstrapTest.java | 2 + 17 files changed, 162 insertions(+), 49 deletions(-) create mode 100644 test/jdk/javax/management/monitor/all.policy diff --git a/src/java.base/share/classes/module-info.java b/src/java.base/share/classes/module-info.java index a8b0a0c992c41..52c1029dd3d52 100644 --- a/src/java.base/share/classes/module-info.java +++ b/src/java.base/share/classes/module-info.java @@ -165,6 +165,7 @@ java.desktop, java.logging, java.management, + java.management.rmi, java.naming, java.rmi, jdk.charsets, diff --git a/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java b/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java index 289bc8f382241..047863d34eff5 100644 --- a/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java +++ b/src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java @@ -46,6 +46,7 @@ import javax.management.remote.JMXServerErrorException; import javax.management.remote.NotificationResult; import javax.security.auth.Subject; +import jdk.internal.access.SharedSecrets; import sun.reflect.misc.ReflectUtil; import static javax.management.remote.rmi.RMIConnector.Util.cast; @@ -108,14 +109,19 @@ public RMIConnectionImpl(RMIServerImpl rmiServer, this.rmiServer = rmiServer; this.connectionId = connectionId; this.defaultClassLoader = defaultClassLoader; - this.subject = subject; + if (subject == null) { this.acc = null; } else { // An authenticated Subject was provided. // Subject Delegation has been removed. - this.acc = JMXSubjectDomainCombiner.getContext(subject); + if (SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + // SM is allowed. Will use ACC created with Subject: + this.acc = JMXSubjectDomainCombiner.getContext(subject); + } else { + this.acc = null; + } } this.mbeanServer = rmiServer.getMBeanServer(); @@ -1292,10 +1298,21 @@ public NotificationResult run() { return getServerNotifFwd().fetchNotifs(csn, t, mn); } }; - if (acc == null) - return action.run(); - else - return AccessController.doPrivileged(action, acc); + if (!SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + // Modern case + if (subject == null) { + return action.run(); + } else { + return Subject.doAs(subject, action); + } + } else { + // SM permitted + if (acc == null) { + return action.run(); // No Subject or ACC + } else { + return AccessController.doPrivileged(action, acc); + } + } } finally { serverCommunicatorAdmin.rspOutgoing(); } @@ -1411,16 +1428,36 @@ private Object doPrivilegedOperation(final int operation, serverCommunicatorAdmin.reqIncoming(); try { PrivilegedOperation op = new PrivilegedOperation(operation, params); - if (acc == null) { - try { - return op.run(); - } catch (Exception e) { - if (e instanceof RuntimeException) - throw (RuntimeException) e; - throw new PrivilegedActionException(e); + if (!SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + // Modern case + if (subject == null) { + try { + return op.run(); + } catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } else { + throw new PrivilegedActionException(e); + } + } + } else { + return Subject.doAs(subject, op); } } else { - return AccessController.doPrivileged(op, acc); + // SM permitted + if (acc == null) { + try { + return op.run(); + } catch (Exception e) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } else { + throw new PrivilegedActionException(e); + } + } + } else { + return AccessController.doPrivileged(op, acc); + } } } catch (Error e) { throw new JMXServerErrorException(e.toString(),e); @@ -1585,15 +1622,25 @@ private T unwrap(final MarshalledObject mo, } try { final ClassLoader old = AccessController.doPrivileged(new SetCcl(cl)); - try{ - if (acc != null) { - return AccessController.doPrivileged( - (PrivilegedExceptionAction) () -> - wrappedClass.cast(mo.get()), acc); - }else{ - return wrappedClass.cast(mo.get()); + try { + if (!SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + // Modern case + if (subject != null) { + return Subject.doAs(subject, (PrivilegedExceptionAction) () -> wrappedClass.cast(mo.get())); + } else { + return wrappedClass.cast(mo.get()); + } + } else { + // SM permitted + if (acc != null) { + return AccessController.doPrivileged( + (PrivilegedExceptionAction) () -> + wrappedClass.cast(mo.get()), acc); + } else { + return wrappedClass.cast(mo.get()); + } } - }finally{ + } finally { AccessController.doPrivileged(new SetCcl(old)); } } catch (PrivilegedActionException pe) { diff --git a/src/java.management/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java b/src/java.management/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java index e04a375c998b0..7ea1e48586915 100644 --- a/src/java.management/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java +++ b/src/java.management/share/classes/com/sun/jmx/remote/internal/ServerNotifForwarder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -343,10 +343,9 @@ public void terminate() { //---------------- // PRIVATE METHODS //---------------- - @SuppressWarnings("removal") private Subject getSubject() { - return Subject.getSubject(AccessController.getContext()); + return Subject.current(); } private void checkState() throws IOException { diff --git a/src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java b/src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java index d694d9cce31dd..bc14b6ad3f21c 100644 --- a/src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java +++ b/src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,6 +42,7 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import javax.security.auth.Subject; +import jdk.internal.access.SharedSecrets; /** *

An object of this class implements the MBeanServerAccessController @@ -300,16 +301,19 @@ private static Properties propertiesFromFile(String fname) } } + @SuppressWarnings("removal") private synchronized void checkAccess(AccessType requiredAccess, String arg) { - @SuppressWarnings("removal") - final AccessControlContext acc = AccessController.getContext(); - @SuppressWarnings("removal") - final Subject s = - AccessController.doPrivileged(new PrivilegedAction<>() { - public Subject run() { - return Subject.getSubject(acc); - } + Subject s = null; + if (!SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + s = Subject.current(); + } else { + final AccessControlContext acc = AccessController.getContext(); + s = AccessController.doPrivileged(new PrivilegedAction<>() { + public Subject run() { + return Subject.getSubject(acc); + } }); + } if (s == null) return; /* security has not been enabled */ final Set principals = s.getPrincipals(); String newPropertyValue = null; diff --git a/src/java.management/share/classes/javax/management/monitor/Monitor.java b/src/java.management/share/classes/javax/management/monitor/Monitor.java index aa6ec14ab6340..2ccb96b8db68f 100644 --- a/src/java.management/share/classes/javax/management/monitor/Monitor.java +++ b/src/java.management/share/classes/javax/management/monitor/Monitor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,8 @@ import javax.management.NotificationBroadcasterSupport; import javax.management.ObjectName; import javax.management.ReflectionException; +import javax.security.auth.Subject; +import jdk.internal.access.SharedSecrets; import static javax.management.monitor.MonitorNotification.*; /** @@ -169,8 +171,9 @@ public final synchronized void setDerivedGaugeTimeStamp( new CopyOnWriteArrayList<>(); /** - * AccessControlContext of the Monitor.start() caller. + * Subject and possibly AccessControlContext of the Monitor.start() caller. */ + private volatile Subject subject; @SuppressWarnings("removal") private static final AccessControlContext noPermissionsACC = new AccessControlContext( @@ -713,10 +716,14 @@ void doStart() { // cleanupIsComplexTypeAttribute(); - // Cache the AccessControlContext of the Monitor.start() caller. + // Cache the Subject or AccessControlContext of the Monitor.start() caller. // The monitor tasks will be executed within this context. // - acc = AccessController.getContext(); + if (!SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + subject = Subject.current(); + } else { + acc = AccessController.getContext(); + } // Start the scheduler. // @@ -747,8 +754,9 @@ void doStop() { // cleanupFutures(); - // Reset the AccessControlContext. + // Reset the Subject and AccessControlContext. // + subject = null; acc = noPermissionsACC; // Reset the complex type attribute information @@ -1512,9 +1520,11 @@ public Future submit() { @SuppressWarnings("removal") public void run() { final ScheduledFuture sf; + final Subject s; final AccessControlContext ac; synchronized (Monitor.this) { sf = Monitor.this.schedulerFuture; + s = Monitor.this.subject; ac = Monitor.this.acc; } PrivilegedAction action = new PrivilegedAction<>() { @@ -1531,10 +1541,20 @@ public Void run() { return null; } }; - if (ac == null) { - throw new SecurityException("AccessControlContext cannot be null"); + if (!SharedSecrets.getJavaLangAccess().allowSecurityManager()) { + // No SecurityManager permitted: + if (s == null) { + action.run(); + } else { + Subject.doAs(s, action); + } + } else { + if (ac == null) { + throw new SecurityException("AccessControlContext cannot be null"); + } + // ACC means SM is permitted. + AccessController.doPrivileged(action, ac); } - AccessController.doPrivileged(action, ac); synchronized (Monitor.this) { if (Monitor.this.isActive() && Monitor.this.schedulerFuture == sf) { diff --git a/test/jdk/javax/management/monitor/StartStopTest.java b/test/jdk/javax/management/monitor/StartStopTest.java index 8e5490aeaae0d..4779f40cdc765 100644 --- a/test/jdk/javax/management/monitor/StartStopTest.java +++ b/test/jdk/javax/management/monitor/StartStopTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,9 +32,17 @@ * * @run clean StartStopTest * @run build StartStopTest + * * @run main/othervm/timeout=300 StartStopTest 1 * @run main/othervm/timeout=300 StartStopTest 2 * @run main/othervm/timeout=300 StartStopTest 3 + * @run main/othervm/timeout=300 -Djava.security.manager=allow StartStopTest 1 + * @run main/othervm/timeout=300 -Djava.security.manager=allow StartStopTest 2 + * @run main/othervm/timeout=300 -Djava.security.manager=allow StartStopTest 3 + * @run main/othervm/timeout=300/policy=all.policy StartStopTest 1 + * @run main/othervm/timeout=300/policy=all.policy StartStopTest 2 + * @run main/othervm/timeout=300/policy=all.policy StartStopTest 3 + * * @run main/othervm/timeout=300 -Djmx.x.monitor.maximum.pool.size=5 StartStopTest 1 * @run main/othervm/timeout=300 -Djmx.x.monitor.maximum.pool.size=5 StartStopTest 2 * @run main/othervm/timeout=300 -Djmx.x.monitor.maximum.pool.size=5 StartStopTest 3 diff --git a/test/jdk/javax/management/monitor/ThreadPoolAccTest.java b/test/jdk/javax/management/monitor/ThreadPoolAccTest.java index 542fa9c657ccc..508cefddf94d9 100644 --- a/test/jdk/javax/management/monitor/ThreadPoolAccTest.java +++ b/test/jdk/javax/management/monitor/ThreadPoolAccTest.java @@ -30,13 +30,19 @@ * * @run clean ThreadPoolAccTest * @run build ThreadPoolAccTest + * + * @run main/othervm ThreadPoolAccTest * @run main/othervm -Djava.security.manager=allow ThreadPoolAccTest + * @run main/othervm -Djava.security.manager=allow -DThreadPoolAccTest.useGetSubjectACC=true ThreadPoolAccTest + * @run main/othervm/policy=all.policy ThreadPoolAccTest + * @run main/othervm/policy=all.policy -DThreadPoolAccTest.useGetSubjectACC=true ThreadPoolAccTest */ import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Date; import java.util.Set; +import java.util.concurrent.Callable; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; @@ -67,7 +73,9 @@ public String getString() { return ""; } private void setPrincipal() { - Subject subject = Subject.getSubject(AccessController.getContext()); + // Use Subject.current() unless test Property is set. + Subject subject = Boolean.getBoolean("ThreadPoolAccTest.useGetSubjectACC") ? + Subject.getSubject(AccessController.getContext()) : Subject.current(); Set principals = subject.getPrincipals(JMXPrincipal.class); principal = principals.iterator().next().getName(); } @@ -136,7 +144,9 @@ public Void run() { return null; } }; - Subject.doAs(subject, action); + // Subject.doAs(subject, action); + Callable c = (Callable) () -> action.run(); + Subject.callAs(subject, c); } sleep(500); // wait for getX method to be called, which calls setPrincipal diff --git a/test/jdk/javax/management/monitor/all.policy b/test/jdk/javax/management/monitor/all.policy new file mode 100644 index 0000000000000..cb9dbed32cc9d --- /dev/null +++ b/test/jdk/javax/management/monitor/all.policy @@ -0,0 +1,3 @@ +grant { + permission java.security.AllPermission; +}; diff --git a/test/jdk/javax/management/remote/mandatory/notif/NotificationAccessControllerTest.java b/test/jdk/javax/management/remote/mandatory/notif/NotificationAccessControllerTest.java index 352faea27d1b2..57db8588ed3e7 100644 --- a/test/jdk/javax/management/remote/mandatory/notif/NotificationAccessControllerTest.java +++ b/test/jdk/javax/management/remote/mandatory/notif/NotificationAccessControllerTest.java @@ -30,6 +30,8 @@ * java.management/com.sun.jmx.remote.security * @run clean NotificationAccessControllerTest * @run build NotificationAccessControllerTest + * + * @run main/othervm NotificationAccessControllerTest * @run main/othervm -Djava.security.manager=allow NotificationAccessControllerTest */ diff --git a/test/jdk/javax/management/remote/mandatory/notif/NotificationEmissionTest.java b/test/jdk/javax/management/remote/mandatory/notif/NotificationEmissionTest.java index a4c5700585339..e57636c87f6f2 100644 --- a/test/jdk/javax/management/remote/mandatory/notif/NotificationEmissionTest.java +++ b/test/jdk/javax/management/remote/mandatory/notif/NotificationEmissionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,9 @@ * * @run clean NotificationEmissionTest * @run build NotificationEmissionTest + * * @run main NotificationEmissionTest 1 + * @run main/othervm -Djava.security.manager=allow NotificationEmissionTest 1 * @run main/othervm -Djava.security.manager=allow NotificationEmissionTest 2 * @run main/othervm -Djava.security.manager=allow NotificationEmissionTest 3 * @run main/othervm -Djava.security.manager=allow NotificationEmissionTest 4 diff --git a/test/jdk/javax/management/remote/mandatory/passwordAccessFile/NonJMXPrincipalsTest.java b/test/jdk/javax/management/remote/mandatory/passwordAccessFile/NonJMXPrincipalsTest.java index f9e04a373f65b..796507eeff39d 100644 --- a/test/jdk/javax/management/remote/mandatory/passwordAccessFile/NonJMXPrincipalsTest.java +++ b/test/jdk/javax/management/remote/mandatory/passwordAccessFile/NonJMXPrincipalsTest.java @@ -30,6 +30,7 @@ * * @run clean NonJMXPrincipalsTest SimpleStandard SimpleStandardMBean * @run build NonJMXPrincipalsTest SimpleStandard SimpleStandardMBean + * @run main/othervm NonJMXPrincipalsTest * @run main/othervm -Djava.security.manager=allow NonJMXPrincipalsTest */ diff --git a/test/jdk/javax/management/remote/mandatory/passwordAccessFile/PasswordAccessFileTest.java b/test/jdk/javax/management/remote/mandatory/passwordAccessFile/PasswordAccessFileTest.java index d073553d3f55f..ae3ec697b3926 100644 --- a/test/jdk/javax/management/remote/mandatory/passwordAccessFile/PasswordAccessFileTest.java +++ b/test/jdk/javax/management/remote/mandatory/passwordAccessFile/PasswordAccessFileTest.java @@ -30,6 +30,8 @@ * * @run clean PasswordAccessFileTest SimpleStandard SimpleStandardMBean * @run build PasswordAccessFileTest SimpleStandard SimpleStandardMBean + * + * @run main/othervm PasswordAccessFileTest * @run main/othervm -Djava.security.manager=allow PasswordAccessFileTest */ diff --git a/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIAltAuthTest.java b/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIAltAuthTest.java index e86f9cc8f1a5e..13d94a879206a 100644 --- a/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIAltAuthTest.java +++ b/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIAltAuthTest.java @@ -30,7 +30,10 @@ * java.management/com.sun.jmx.remote.security * @run clean RMIAltAuthTest * @run build RMIAltAuthTest SimpleStandard SimpleStandardMBean + * + * @run main/othervm RMIAltAuthTest * @run main/othervm -Djava.security.manager=allow RMIAltAuthTest + * @run main/othervm -Djava.security.manager=allow -DSimpleStandard.useGetSubjectACC=true RMIAltAuthTest */ import java.io.File; diff --git a/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIPasswdAuthTest.java b/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIPasswdAuthTest.java index 87384e070cd4c..8897d34c4e8d1 100644 --- a/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIPasswdAuthTest.java +++ b/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/RMIPasswdAuthTest.java @@ -30,7 +30,10 @@ * java.management/com.sun.jmx.remote.security * @run clean RMIPasswdAuthTest * @run build RMIPasswdAuthTest SimpleStandard SimpleStandardMBean + * + * @run main/othervm RMIPasswdAuthTest * @run main/othervm -Djava.security.manager=allow RMIPasswdAuthTest + * @run main/othervm -Djava.security.manager=allow -DSimpleStandard.useGetSubjectACC=true RMIPasswdAuthTest */ import java.io.File; diff --git a/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/SimpleStandard.java b/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/SimpleStandard.java index bc503b3e29169..b5657498365f9 100644 --- a/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/SimpleStandard.java +++ b/test/jdk/javax/management/remote/mandatory/passwordAuthenticator/SimpleStandard.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -152,8 +152,8 @@ public int getNbResets() { * type JMXPrincipal and refers to the "monitorRole" identity. */ private void checkSubject() { - AccessControlContext acc = AccessController.getContext(); - Subject subject = Subject.getSubject(acc); + Subject subject = Boolean.getBoolean("SimpleStandard.useGetSubjectACC") ? + Subject.getSubject(AccessController.getContext()) : Subject.current(); Set principals = subject.getPrincipals(); Principal principal = (Principal) principals.iterator().next(); if (!(principal instanceof JMXPrincipal)) diff --git a/test/jdk/javax/management/security/AuthorizationTest.java b/test/jdk/javax/management/security/AuthorizationTest.java index 2c48dbffb5635..cdb412e139b46 100644 --- a/test/jdk/javax/management/security/AuthorizationTest.java +++ b/test/jdk/javax/management/security/AuthorizationTest.java @@ -29,9 +29,15 @@ * @modules java.management.rmi * @library /test/lib * @compile Simple.java + * + * @run main/othervm/timeout=300 -DDEBUG_STANDARD -Dusername=username1 -Dpassword=password1 AuthorizationTest -server -mapType x.access.file;x.password.file -populate -client -mapType credentials + * @run main/othervm/timeout=300 -DDEBUG_STANDARD -Dusername=username2 -Dpassword=password2 AuthorizationTest -server -mapType x.access.file;x.password.file -populate -client -mapType credentials -expectedCreateException -expectedSetException -expectedInvokeException + * @run main/othervm/timeout=300 -DDEBUG_STANDARD -Dusername=username6 -Dpassword=password6 AuthorizationTest -server -mapType x.access.file;x.password.file -populate -client -mapType credentials -expectedCreateException -expectedGetException -expectedSetException -expectedInvokeException + * * @run main/othervm/timeout=300 -Djava.security.manager=allow -DDEBUG_STANDARD -Dusername=username1 -Dpassword=password1 AuthorizationTest -server -mapType x.access.file;x.password.file -populate -client -mapType credentials * @run main/othervm/timeout=300 -Djava.security.manager=allow -DDEBUG_STANDARD -Dusername=username2 -Dpassword=password2 AuthorizationTest -server -mapType x.access.file;x.password.file -populate -client -mapType credentials -expectedCreateException -expectedSetException -expectedInvokeException * @run main/othervm/timeout=300 -Djava.security.manager=allow -DDEBUG_STANDARD -Dusername=username6 -Dpassword=password6 AuthorizationTest -server -mapType x.access.file;x.password.file -populate -client -mapType credentials -expectedCreateException -expectedGetException -expectedSetException -expectedInvokeException + * * @run main/othervm/timeout=300/policy=java.policy.authorization -DDEBUG_STANDARD -Dusername=username1 -Dpassword=password1 AuthorizationTest -server -mapType x.password.file -populate -client -mapType credentials * @run main/othervm/timeout=300/policy=java.policy.authorization -DDEBUG_STANDARD -Dusername=username3 -Dpassword=password3 AuthorizationTest -server -mapType x.password.file -populate -client -mapType credentials -expectedGetException * @run main/othervm/timeout=300/policy=java.policy.authorization -DDEBUG_STANDARD -Dusername=username5 -Dpassword=password5 AuthorizationTest -server -mapType x.password.file -populate -client -mapType credentials -expectedCreateException -expectedGetException -expectedSetException -expectedInvokeException diff --git a/test/jdk/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java b/test/jdk/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java index 770b642088ad3..09e32174c74f5 100644 --- a/test/jdk/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java +++ b/test/jdk/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java @@ -61,6 +61,7 @@ * * @library /test/lib * + * @run main/othervm/timeout=300 RmiBootstrapTest .*_test.*.in * @run main/othervm/timeout=300 -Djava.security.manager=allow RmiBootstrapTest .*_test.*.in * */ @@ -72,6 +73,7 @@ * * @library /test/lib * + * @run main/othervm/timeout=300 RmiBootstrapTest .*_ssltest.*.in * @run main/othervm/timeout=300 -Djava.security.manager=allow RmiBootstrapTest .*_ssltest.*.in * */ From 78682fe78e18268b1857855c3595b4d118808c66 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Wed, 19 Jun 2024 19:12:31 +0000 Subject: [PATCH 042/102] 8329288: Update Visual Studio visibility support for POSIX functions Reviewed-by: kbarrett --- make/autoconf/flags-cflags.m4 | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/make/autoconf/flags-cflags.m4 b/make/autoconf/flags-cflags.m4 index 09395202f221c..da63a6dba0633 100644 --- a/make/autoconf/flags-cflags.m4 +++ b/make/autoconf/flags-cflags.m4 @@ -502,12 +502,12 @@ AC_DEFUN([FLAGS_SETUP_CFLAGS_HELPER], elif test "x$TOOLCHAIN_TYPE" = xclang; then ALWAYS_DEFINES_JVM="-D_GNU_SOURCE" elif test "x$TOOLCHAIN_TYPE" = xmicrosoft; then - # Access APIs for Windows 8 and above - # see https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170 - ALWAYS_DEFINES_JDK="-DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 \ - -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -DWIN32 -DIAL" - ALWAYS_DEFINES_JVM="-DNOMINMAX -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 \ - -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE" + # _WIN32_WINNT=0x0602 means access APIs for Windows 8 and above. See + # https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=msvc-170 + ALWAYS_DEFINES="-DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=0x0602 \ + -D_CRT_DECLARE_NONSTDC_NAMES -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS" + ALWAYS_DEFINES_JDK="$ALWAYS_DEFINES -DWIN32 -DIAL" + ALWAYS_DEFINES_JVM="$ALWAYS_DEFINES -DNOMINMAX" fi ############################################################################### From 4e58d8c897d845cfa73780264481da174d46acb4 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Wed, 19 Jun 2024 23:23:52 +0000 Subject: [PATCH 043/102] 8309821: Link to hidden classes section in Class specification for Class::isHidden Reviewed-by: iris, rriggs --- src/java.base/share/classes/java/lang/Class.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java.base/share/classes/java/lang/Class.java b/src/java.base/share/classes/java/lang/Class.java index 4bc7ccab8345d..5b378077d563f 100644 --- a/src/java.base/share/classes/java/lang/Class.java +++ b/src/java.base/share/classes/java/lang/Class.java @@ -4720,6 +4720,7 @@ public Optional describeConstable() { * * @since 15 * @see MethodHandles.Lookup#defineHiddenClass + * @see Class##hiddenClasses Hidden Classes */ @IntrinsicCandidate public native boolean isHidden(); From b211929e05c0acdf7343c3edd025749d573c67b3 Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles Date: Thu, 20 Jun 2024 01:36:05 +0000 Subject: [PATCH 044/102] 8334570: Problem list gc/TestAlwaysPreTouchBehavior.java Reviewed-by: ayang, tschatzl --- test/hotspot/jtreg/ProblemList.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index c7c76c8fa3a2e..469a410e31d8e 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -82,6 +82,13 @@ gc/TestAllocHumongousFragment.java#aggressive 8298781 generic-all gc/TestAllocHumongousFragment.java#iu-aggressive 8298781 generic-all gc/TestAllocHumongousFragment.java#g1 8298781 generic-all gc/TestAllocHumongousFragment.java#static 8298781 generic-all +gc/TestAlwaysPreTouchBehavior.java#ParallelCollector 8334513 generic-all +gc/TestAlwaysPreTouchBehavior.java#SerialCollector 8334513 generic-all +gc/TestAlwaysPreTouchBehavior.java#Shenandoah 8334513 generic-all +gc/TestAlwaysPreTouchBehavior.java#G1 8334513 generic-all +gc/TestAlwaysPreTouchBehavior.java#ZGenerational 8334513 generic-all +gc/TestAlwaysPreTouchBehavior.java#ZSinglegen 8334513 generic-all +gc/TestAlwaysPreTouchBehavior.java#Epsilon 8334513 generic-all gc/stress/gclocker/TestExcessGCLockerCollections.java 8229120 generic-all ############################################################################# From fad6644eabbad6b6d3472206d9db946408aca612 Mon Sep 17 00:00:00 2001 From: Sibabrata Sahoo Date: Thu, 20 Jun 2024 04:18:39 +0000 Subject: [PATCH 045/102] 8333754: Add a Test against ECDSA and ECDH NIST Test vector Reviewed-by: ascarpino --- test/jdk/sun/security/ec/ECDHPrimitive.java | 144 + test/jdk/sun/security/ec/ECDSAPrimitive.java | 429 ++ .../security/ec/KAS_ECC_CDH_PrimitiveTest.txt | 3049 +++++++++ test/jdk/sun/security/ec/SigGen-1.txt | 5879 +++++++++++++++++ 4 files changed, 9501 insertions(+) create mode 100644 test/jdk/sun/security/ec/ECDHPrimitive.java create mode 100644 test/jdk/sun/security/ec/ECDSAPrimitive.java create mode 100644 test/jdk/sun/security/ec/KAS_ECC_CDH_PrimitiveTest.txt create mode 100644 test/jdk/sun/security/ec/SigGen-1.txt diff --git a/test/jdk/sun/security/ec/ECDHPrimitive.java b/test/jdk/sun/security/ec/ECDHPrimitive.java new file mode 100644 index 0000000000000..b41b93bc5ff7f --- /dev/null +++ b/test/jdk/sun/security/ec/ECDHPrimitive.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.*; +import java.math.BigInteger; +import java.nio.file.Files; +import java.nio.file.Path; +import java.security.*; +import java.security.spec.*; +import java.util.*; +import javax.crypto.*; + +import jdk.test.lib.Asserts; + +/* + * @test + * @bug 8189189 + * @summary Test ECDH primitive operations + * @library /test/lib + * @run main ECDHPrimitive + */ +public class ECDHPrimitive { + + + private static final Map NAME_MAP = Map.of( + "P-256", "secp256r1", + "P-384", "secp384r1", + "P-521", "secp521r1" + ); + + public static void main(String[] args) throws Exception { + Path testFile = Path.of(System.getProperty("test.src"), "KAS_ECC_CDH_PrimitiveTest.txt"); + + ECParameterSpec ecParams = null; + + try (BufferedReader in = Files.newBufferedReader(testFile)) { + Map values = new HashMap<>(); + String line = in.readLine(); + while (line != null) { + line = line.trim(); + if (line.startsWith("#") || line.length() == 0) { + // ignore + } else if (line.startsWith("[")) { + // change curve name + StringTokenizer tok = new StringTokenizer(line, "[]"); + String name = tok.nextToken(); + String curveName = lookupName(name); + + if (curveName == null) { + System.out.println("Unknown curve: " + name + + ". Skipping test"); + ecParams = null; + } else { + AlgorithmParameters params + = AlgorithmParameters.getInstance("EC"); + + params.init(new ECGenParameterSpec(curveName)); + ecParams = params.getParameterSpec( + ECParameterSpec.class); + System.out.println("Testing curve: " + curveName); + } + + } else if (line.startsWith("ZIUT")) { + addKeyValue(line, values); + if (ecParams != null) { + runTest(ecParams, values); + } + } else { + addKeyValue(line, values); + } + + line = in.readLine(); + } + } + } + + private static void runTest(ECParameterSpec ecParams, + Map values) throws Exception { + + byte[] xArr = values.get("QCAVSx"); + BigInteger x = new BigInteger(1, xArr); + byte[] yArr = values.get("QCAVSy"); + BigInteger y = new BigInteger(1, yArr); + ECPoint w = new ECPoint(x, y); + ECPublicKeySpec pubSpec = new ECPublicKeySpec(w, ecParams); + + byte[] dArr = values.get("dIUT"); + BigInteger d = new BigInteger(1, dArr); + ECPrivateKeySpec priSpec = new ECPrivateKeySpec(d, ecParams); + + KeyFactory kf = KeyFactory.getInstance("EC"); + PublicKey pub = kf.generatePublic(pubSpec); + PrivateKey pri = kf.generatePrivate(priSpec); + + KeyAgreement ka = KeyAgreement.getInstance("ECDH"); + ka.init(pri); + ka.doPhase(pub, true); + byte[] secret = ka.generateSecret(); + + byte[] expectedSecret = values.get("ZIUT"); + Asserts.assertEqualsByteArray(secret, expectedSecret, "Incorrect secret value"); + int testIndex = values.get("COUNT")[0]; + System.out.println("Test " + testIndex + " passed."); + } + + private static void addKeyValue(String line, Map values) { + StringTokenizer tok = new StringTokenizer(line, " ="); + String key = tok.nextToken(); + String value = tok.nextToken(); + byte[] valueArr; + if (value.length() <= 2) { + valueArr = new byte[1]; + valueArr[0] = Byte.parseByte(value, 10); + } else { + valueArr = HexFormat.of().parseHex(value); + } + + values.put(key, valueArr); + } + + private static String lookupName(String name) { + return NAME_MAP.get(name); + } +} \ No newline at end of file diff --git a/test/jdk/sun/security/ec/ECDSAPrimitive.java b/test/jdk/sun/security/ec/ECDSAPrimitive.java new file mode 100644 index 0000000000000..ba9ed0dec80d3 --- /dev/null +++ b/test/jdk/sun/security/ec/ECDSAPrimitive.java @@ -0,0 +1,429 @@ +/* + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.*; +import java.math.BigInteger; +import java.nio.file.Path; +import java.security.*; +import java.security.spec.*; +import java.util.*; + +import sun.security.ec.*; +import sun.security.ec.point.*; +import sun.security.util.ArrayUtil; +import sun.security.util.math.*; +import jdk.test.lib.Asserts; + +/* + * @test + * @bug 8189189 8147502 8295010 + * @summary Test ECDSA primitive operations + * @library /test/lib + * @modules java.base/sun.security.ec java.base/sun.security.ec.point + * java.base/sun.security.util java.base/sun.security.util.math + * @run main ECDSAPrimitive + */ +public class ECDSAPrimitive { + + private static final Map CURVE_NAME_MAP = Map.ofEntries( + Map.entry("P-256", "secp256r1"), + Map.entry("P-384", "secp384r1"), + Map.entry("P-521", "secp521r1") + ); + private static final Set DIGEST_NAME_SET = Set.of( + "SHA-224", + "SHA-256", + "SHA-384", + "SHA-512" + ); + + public static void main(String[] args) throws Exception { + Path siggenFile = Path.of(System.getProperty("test.src"), "SigGen-1.txt"); + + ECParameterSpec ecParams = null; + String digestAlg = null; + + try (BufferedReader in = new BufferedReader(new FileReader( + siggenFile.toFile()))) { + Map values = new HashMap<>(); + String line = in.readLine(); + while (line != null) { + line = line.trim(); + if (line.startsWith("#") || line.length() == 0) { + // ignore + } else if (line.startsWith("[")) { + // change curve and hash + StringTokenizer tok = new StringTokenizer(line, "[,]"); + String name = tok.nextToken(); + String curveName = lookUpCurveName(name); + + String digestName = tok.nextToken(); + digestAlg = lookUpDigestName(digestName); + + if (curveName == null) { + System.out.println("Unknown curve: " + name + + ". Skipping test"); + ecParams = null; + digestAlg = null; + } + if (digestAlg == null) { + System.out.println("Unknown digest: " + digestName + + ". Skipping test"); + ecParams = null; + digestAlg = null; + } else { + AlgorithmParameters params = + AlgorithmParameters.getInstance("EC", "SunEC"); + params.init(new ECGenParameterSpec(curveName)); + ecParams = params.getParameterSpec( + ECParameterSpec.class); + System.out.println("Testing curve/digest: " + + curveName + "/" + digestAlg); + } + + } else if (line.startsWith("S")) { + addKeyValue(line, values); + if (ecParams != null) { + runTest(ecParams, digestAlg, values); + } + } else { + addKeyValue(line, values); + } + + line = in.readLine(); + } + } + } + + private static void runTest(ECParameterSpec ecParams, String digestAlg, + Map values) throws Exception { + + Optional opsOpt = + ECDSAOperations.forParameters(ecParams); + Optional signerOpt = opsOpt.map(OpsSigner::new); + Signer signer = signerOpt.orElseGet(() -> new JCASigner(ecParams)); + + byte[] msg = values.get("Msg"); + MessageDigest md = MessageDigest.getInstance(digestAlg); + byte[] digest = md.digest(msg); + + // all operations accept little endian private key and nonce + byte[] privateKey = values.get("d"); + byte[] k = values.get("k"); + + byte[] computedSig = signer.sign(privateKey, digest, k); + + int valueLength = computedSig.length / 2; + byte[] computedR = Arrays.copyOf(computedSig, valueLength); + byte[] expectedR = values.get("R"); + Asserts.assertEquals(new BigInteger(1, expectedR), new BigInteger(1, computedR), "R"); + + byte[] computedS = Arrays.copyOfRange(computedSig, valueLength, + 2 * valueLength); + byte[] expectedS = values.get("S"); + Asserts.assertEquals(new BigInteger(1, expectedS), new BigInteger(1, computedS), "S"); + + // ensure public key is correct + byte[] expectedQx = values.get("Qx"); + byte[] expectedQy = values.get("Qy"); + ECPoint ecPublicKey = + signer.checkPublicKey(privateKey, expectedQx, expectedQy); + + // ensure the verification works + if (!signer.verify(ecPublicKey, digest, computedSig)) { + throw new RuntimeException("Signature did not verify"); + } + + // ensure incorrect signature does not verify + int length = k.length; + computedSig[length / 2] ^= (byte) 1; + if (signer.verify(ecPublicKey, digest, computedSig)) { + throw new RuntimeException("Incorrect signature verified"); + } + computedSig[length / 2] ^= (byte) 1; + computedSig[length + length / 2] ^= (byte) 1; + if (signer.verify(ecPublicKey, digest, computedSig)) { + throw new RuntimeException("Incorrect signature verified"); + } + + System.out.println("Test case passed"); + } + + private static void addKeyValue(String line, Map values) { + StringTokenizer tok = new StringTokenizer(line, " ="); + String key = tok.nextToken(); + String value = tok.nextToken(); + byte[] valueArr; + if (value.length() <= 2) { + valueArr = new byte[1]; + valueArr[0] = Byte.parseByte(value, 10); + } else { + // some values are odd-length big-endian integers + if (value.length() % 2 == 1) { + if (key.equals("Msg")) { + throw new RuntimeException("message length may not be odd"); + } + value = "0" + value; + } + valueArr = HexFormat.of().parseHex(value); + } + + values.put(key, valueArr); + } + + private static String lookUpCurveName(String name) { + return CURVE_NAME_MAP.get(name); + } + + private static String lookUpDigestName(String name) { + return DIGEST_NAME_SET.contains(name) ? name : null; + } + + public static boolean verifySignedDigest(ECDSAOperations ops, ECPoint publicKey, + byte[] digest, byte[] signature) { + + try { + return verifySignedDigestImpl(ops, publicKey, digest, signature); + } catch (ImproperSignatureException ex) { + return false; + } + } + + private static boolean verifySignedDigestImpl(ECDSAOperations ops, ECPoint publicKey, + byte[] digest, byte[] signature) + throws ImproperSignatureException { + + ECOperations ecOps = ops.getEcOperations(); + IntegerFieldModuloP orderField = ecOps.getOrderField(); + int orderBits = orderField.getSize().bitLength(); + if (orderBits % 8 != 0 && orderBits < digest.length * 8) { + // This implementation does not support truncating digests to + // a length that is not a multiple of 8. + throw new ProviderException("Invalid digest length"); + } + // decode signature as (r, s) + byte[] rBytes = Arrays.copyOf(signature, signature.length / 2); + ArrayUtil.reverse(rBytes); + byte[] sBytes = Arrays.copyOfRange(signature, signature.length / 2, + signature.length); + ArrayUtil.reverse(sBytes); + + // convert r and s to field elements + // TODO: reject non-canonical values + IntegerModuloP s = orderField.getElement(sBytes); + IntegerModuloP r = orderField.getElement(rBytes); + + // truncate the digest and interpret as a field element + int length = (orderBits + 7) / 8; + int lengthE = Math.min(length, digest.length); + byte[] E = new byte[lengthE]; + System.arraycopy(digest, 0, E, 0, lengthE); + ArrayUtil.reverse(E); + IntegerModuloP e = orderField.getElement(E); + + // perform the calculation + IntegerModuloP sInverse = s.multiplicativeInverse(); + IntegerModuloP u1 = e.multiply(sInverse); + IntegerModuloP u2 = r.multiply(sInverse); + + byte[] u1Bytes = u1.asByteArray(length); + byte[] u2Bytes = u2.asByteArray(length); + AffinePoint publicKeyPoint = ECDSAOperations.toAffinePoint(publicKey, + ecOps.getField()); + MutablePoint R = ecOps.multiply(publicKeyPoint, u2Bytes); + AffinePoint a1 = ops.basePointMultiply(u1Bytes); + MutablePoint p2 = new ProjectivePoint.Mutable( + a1.getX(false).mutable(), + a1.getY(false).mutable(), + ecOps.getField().get1().mutable()); + ecOps.setSum(R, p2); + + // can't continue if R is neutral + if (ecOps.isNeutral(R)) { + throw new ImproperSignatureException(); + } + + IntegerModuloP xr = R.asAffine().getX(); + byte[] temp = new byte[length]; + xr.asByteArray(temp); + IntegerModuloP v = orderField.getElement(temp); + + // Check that v==r by subtracting and comparing result to 0 + v.subtract(r).mutable().asByteArray(temp); + return ECOperations.allZero(temp); + } + + private interface Signer { + byte[] sign(byte[] privateKey, byte[] digest, byte[] k); + + ECPoint checkPublicKey(byte[] privateKey, byte[] expectedQx, + byte[] expectedQy); + + boolean verify(ECPoint ecPublicKey, byte[] digest, byte[] sig); + } + + private static class FixedRandom extends SecureRandom { + + private final byte[] val; + + public FixedRandom(byte[] val) { + BigInteger biVal = new BigInteger(1, val); + biVal = biVal.subtract(BigInteger.ONE); + byte[] temp = biVal.toByteArray(); + this.val = new byte[val.length]; + int inStartPos = Math.max(0, temp.length - val.length); + int outStartPos = Math.max(0, val.length - temp.length); + System.arraycopy(temp, inStartPos, this.val, outStartPos, + temp.length - inStartPos); + } + + @Override + public void nextBytes(byte[] bytes) { + Arrays.fill(bytes, (byte) 0); + int copyLength = Math.min(val.length, bytes.length - 2); + System.arraycopy(val, 0, bytes, bytes.length - copyLength - 2, + copyLength); + } + } + + // The signature verification function lives here. It is not used in the + // JDK, but it is working, and the performance is roughly as good as the + // native implementation in the JDK. + + private static class JCASigner implements Signer { + + private static final String SIG_ALG = "NONEwithECDSAinP1363Format"; + private final ECParameterSpec ecParams; + + private JCASigner(ECParameterSpec ecParams) { + this.ecParams = ecParams; + } + + @Override + public byte[] sign(byte[] privateKey, byte[] digest, byte[] k) { + + try { + + KeyFactory kf = KeyFactory.getInstance("EC", "SunEC"); + BigInteger s = new BigInteger(1, privateKey); + ECPrivateKeySpec privKeySpec = + new ECPrivateKeySpec(s, ecParams); + PrivateKey privKey = kf.generatePrivate(privKeySpec); + + Signature sig = Signature.getInstance(SIG_ALG, "SunEC"); + sig.initSign(privKey, new FixedRandom(k)); + sig.update(digest); + return sig.sign(); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + @Override + public ECPoint checkPublicKey(byte[] privateKey, byte[] expectedQx, + byte[] expectedQy) { + // no way to compute the public key using the API + BigInteger x = new BigInteger(1, expectedQx); + BigInteger y = new BigInteger(1, expectedQy); + return new ECPoint(x, y); + } + + @Override + public boolean verify(ECPoint ecPublicKey, byte[] digest, + byte[] providedSig) { + + try { + KeyFactory kf = KeyFactory.getInstance("EC", "SunEC"); + ECPublicKeySpec pubKeySpec = + new ECPublicKeySpec(ecPublicKey, ecParams); + PublicKey pubKey = kf.generatePublic(pubKeySpec); + + Signature sig = Signature.getInstance(SIG_ALG, "SunEC"); + sig.initVerify(pubKey); + sig.update(digest); + return sig.verify(providedSig); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + } + + private static class OpsSigner implements Signer { + + private final ECDSAOperations ops; + + public OpsSigner(ECDSAOperations ops) { + this.ops = ops; + } + + @Override + public byte[] sign(byte[] privateKey, byte[] digest, byte[] k) { + + privateKey = privateKey.clone(); + ArrayUtil.reverse(privateKey); + k = k.clone(); + ArrayUtil.reverse(k); + ECDSAOperations.Nonce nonce = new ECDSAOperations.Nonce(k); + try { + return ops.signDigest(privateKey, digest, nonce); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + + @Override + public ECPoint checkPublicKey(byte[] privateKey, byte[] expectedQx, + byte[] expectedQy) { + + privateKey = privateKey.clone(); + ArrayUtil.reverse(privateKey); + AffinePoint publicKey = ops.basePointMultiply(privateKey); + int length = privateKey.length; + byte[] computedQx = new byte[length]; + byte[] computedQy = new byte[length]; + publicKey.getX().asByteArray(computedQx); + ArrayUtil.reverse(computedQx); + Asserts.assertEqualsByteArray(expectedQx, computedQx, "Qx"); + publicKey.getY().asByteArray(computedQy); + ArrayUtil.reverse(computedQy); + Asserts.assertEqualsByteArray(expectedQy, computedQy, "Qy"); + BigInteger bigX = publicKey.getX().asBigInteger(); + BigInteger bigY = publicKey.getY().asBigInteger(); + return new ECPoint(bigX, bigY); + } + + @Override + public boolean verify(ECPoint publicKey, byte[] digest, byte[] sig) { + return verifySignedDigest(ops, publicKey, digest, sig); + } + } + + /* + * An exception indicating that a signature is not formed correctly. + */ + private static class ImproperSignatureException extends Exception { + + private static final long serialVersionUID = 1; + } + +} diff --git a/test/jdk/sun/security/ec/KAS_ECC_CDH_PrimitiveTest.txt b/test/jdk/sun/security/ec/KAS_ECC_CDH_PrimitiveTest.txt new file mode 100644 index 0000000000000..00da4fa3aef53 --- /dev/null +++ b/test/jdk/sun/security/ec/KAS_ECC_CDH_PrimitiveTest.txt @@ -0,0 +1,3049 @@ +# CAVS 14.1 +# ECC CDH Primitive (SP800-56A Section 5.7.1.2) Test Information for "testecccdh" +# Curves tested: Curves tested: P-192 P-224 P-256 P-384 P-521 K-163 K-233 K-283 K-409 K-571 B-163 B-233 B-283 B-409 B-571 +# Generated on Mon Nov 19 10:52:17 2012 + +[P-192] + +COUNT = 0 +QCAVSx = 42ea6dd9969dd2a61fea1aac7f8e98edcc896c6e55857cc0 +QCAVSy = dfbe5d7c61fac88b11811bde328e8a0d12bf01a9d204b523 +dIUT = f17d3fea367b74d340851ca4270dcb24c271f445bed9d527 +QIUTx = b15053401f57285637ec324c1cd2139e3a67de3739234b37 +QIUTy = f269c158637482aad644cd692dd1d3ef2c8a7c49e389f7f6 +ZIUT = 803d8ab2e5b6e6fca715737c3a82f7ce3c783124f6d51cd0 + +COUNT = 1 +QCAVSx = deb5712fa027ac8d2f22c455ccb73a91e17b6512b5e030e7 +QCAVSy = 7e2690a02cc9b28708431a29fb54b87b1f0c14e011ac2125 +dIUT = 56e853349d96fe4c442448dacb7cf92bb7a95dcf574a9bd5 +QIUTx = c00d435716ffea53fd8c162792414c37665187e582716539 +QIUTy = ab711c62aa71a5a18e8a3c48f89dc6fa52fac0108e52a8a0 +ZIUT = c208847568b98835d7312cef1f97f7aa298283152313c29d + +COUNT = 2 +QCAVSx = 4edaa8efc5a0f40f843663ec5815e7762dddc008e663c20f +QCAVSy = 0a9f8dc67a3e60ef6d64b522185d03df1fc0adfd42478279 +dIUT = c6ef61fe12e80bf56f2d3f7d0bb757394519906d55500949 +QIUTx = e184bc182482f3403c8787b83842477467fcd011db0f6c64 +QIUTy = f9d1c14142f40de8639db97d51a63d2cce1007ccf773cdcb +ZIUT = 87229107047a3b611920d6e3b2c0c89bea4f49412260b8dd + +COUNT = 3 +QCAVSx = 8887c276edeed3e9e866b46d58d895c73fbd80b63e382e88 +QCAVSy = 04c5097ba6645e16206cfb70f7052655947dd44a17f1f9d5 +dIUT = e6747b9c23ba7044f38ff7e62c35e4038920f5a0163d3cda +QIUTx = 2b838dbe73735f37a39a78d3195783d26991e86ff4d92d1a +QIUTy = 60d344942274489f98903b2e7f93f8d197fc9ae60a0ed53a +ZIUT = eec0bed8fc55e1feddc82158fd6dc0d48a4d796aaf47d46c + +COUNT = 4 +QCAVSx = 0d045f30254adc1fcefa8a5b1f31bf4e739dd327cd18d594 +QCAVSy = 542c314e41427c08278a08ce8d7305f3b5b849c72d8aff73 +dIUT = beabedd0154a1afcfc85d52181c10f5eb47adc51f655047d +QIUTx = 1f65cf6e8978e1c1bc10bb61a7db311de310088c8cf9768b +QIUTy = f7d438168e7f42ab14b16af53a7a2f646ff40b53d74cbcc7 +ZIUT = 716e743b1b37a2cd8479f0a3d5a74c10ba2599be18d7e2f4 + +COUNT = 5 +QCAVSx = fb35ca20d2e96665c51b98e8f6eb3d79113508d8bccd4516 +QCAVSy = 368eec0d5bfb847721df6aaff0e5d48c444f74bf9cd8a5a7 +dIUT = cf70354226667321d6e2baf40999e2fd74c7a0f793fa8699 +QIUTx = 5f4844ffcce61005d24f737db98675e92f7b6543aeb6106c +QIUTy = 5424f598139215d389b6b12b86d58014857f2ddadb540f51 +ZIUT = f67053b934459985a315cb017bf0302891798d45d0e19508 + +COUNT = 6 +QCAVSx = 824752960c1307e5f13a83da21c7998ca8b5b00b9549f6d0 +QCAVSy = bc52d91e234363bc32ee0b6778f25cd8c1847510f4348b94 +dIUT = fe942515237fffdd7b4eb5c64909eee4856a076cdf12bae2 +QIUTx = e6369df79b207b8b8679f7c869cfc264859d1ab55aa401e8 +QIUTy = 1f99c71f801a30b52f74da6e5e6dbb62ee4c5da1090cc020 +ZIUT = 75822971193edd472bf30151a782619c55ad0b279c9303dd + +COUNT = 7 +QCAVSx = 10bb57020291141981f833b4749e5611034b308e84011d21 +QCAVSy = e1cacd6b7bd17ed8ddb50b6aee0654c35f2d0eddc1cffcf6 +dIUT = 33fed10492afa5bea0333c0af12cac940c4d222455bcd0fe +QIUTx = ef0b28afc41637d737f42e4c8aaceadc84ba2e0b849ca18c +QIUTy = 57797942e552173bba17f73278e029f42335068bd770ddf2 +ZIUT = 67cba2cbb69ee78bf1abafb0e6fbe33fa2094c128d59652d + +COUNT = 8 +QCAVSx = 5192fce4185a7758ea1bc56e0e4f4e8b2dce32348d0dced1 +QCAVSy = 20989981beaaf0006d88a96e7971a2fa3a33ba46047fc7ba +dIUT = f3557c5d70b4c7954960c33568776adbe8e43619abe26b13 +QIUTx = d70112c5f0f0844386494ac1ad99dce2214134176ebfb9af +QIUTy = d3c187a038510ab31d459e2b7af1a380dd7576af06267548 +ZIUT = cf99a2770a386ca0137d1eca0a226e484297ac3c513f3631 + +COUNT = 9 +QCAVSx = 26d019dbe279ead01eed143a91601ada26e2f42225b1c62b +QCAVSy = 6ca653f08272e0386fc9421fbd580093d7ae6301bca94476 +dIUT = 586cfba1c6e81766ed52828f177b1be14ebbc5b83348c311 +QIUTx = 58b3c63e56bec9d696bf9a88df2873738391f76368aa2b49 +QIUTy = 5776773b261faf7ba2fdc4fe43b92c0b1c7a2fd054a43650 +ZIUT = 576331e2b4fb38a112810e1529834de8307fb0a0d2756877 + +COUNT = 10 +QCAVSx = 539bc40fe20a0fb267888b647b03eaaf6ec20c02a1e1f8c8 +QCAVSy = 69095e5bb7b4d44c3278a7ee6beca397c45246da9a34c8be +dIUT = cad8100603a4f65be08d8fc8a1b7e884c5ff65deb3c96d99 +QIUTx = b7fcc0f52c7a411edbed39e10bf02b6ae0f26614c6b325a2 +QIUTy = 47483b26eb67776de2b93ab7119d5447573739e3d55e72fb +ZIUT = 902f4501916a0dd945554c3a37b3d780d375a6da713197c4 + +COUNT = 11 +QCAVSx = 5d343ddb96318fb4794d10f6c573f99fee5d0d57b996250f +QCAVSy = 99fbdf9d97dd88ad410235dac36e5b92ce2824b8e587a82c +dIUT = 1edd879cc5c79619cae6c73a691bd5a0395c0ef3b356fcd2 +QIUTx = 6ce6adb2c30808f590048c33dffad4524ebf7a5fd39b747b +QIUTy = 4966bd2f3d00569b4d4c0409fbd7a2db752f6d09bca8c25f +ZIUT = 46e4de335054d429863218ae33636fc9b89c628b64b506c7 + +COUNT = 12 +QCAVSx = 8d3db9bdce137ffbfb891388c37df6c0cbc90aa5e5376220 +QCAVSy = 135d30b5cb660eef8764ffc744f15c1b5d6dc06ba4416d37 +dIUT = 460e452273fe1827602187ad3bebee65cb84423bb4f47537 +QIUTx = d1bd3a3efabf4767fe6380bdf0dbf49d52d4cf0cbb89404c +QIUTy = c150c2b4c8b3aa35f765f847e4f7f8fd8704d241a181ee99 +ZIUT = 1bfe9e5a20ac7a38d8f605b425bb9030be31ef97c101c76c + +COUNT = 13 +QCAVSx = 9e0a6949519c7f5be68c0433c5fdf13064aa13fb29483dc3 +QCAVSy = e1c8ba63e1f471db23185f50d9c871edea21255b3a63b4b7 +dIUT = b970365008456f8758ecc5a3b33cf3ae6a8d568107a52167 +QIUTx = c1b8610c8c63f8d4abda093b9a11a566044bf65c6faa8999 +QIUTy = a5bc4b3ca095382e9738aee95fe9479b17879b3ad5295559 +ZIUT = 0e8c493a4adc445dc9288a3b9b272599224054592d7265b3 + +COUNT = 14 +QCAVSx = be088238902e9939b3d054eeeb8492daf4bdcf09a2ab77f1 +QCAVSy = 58d6749a3a923dc80440f2661fd35b651617e65294b46375 +dIUT = 59c15b8a2464e41dfe4371c7f7dadf470ae425544f8113bd +QIUTx = 1fe776f73567b6ac0b0d6764164de6c5be751ba8d1ff455e +QIUTy = 4c160bf38afb2b71f684261664115ce874553e8b059432d2 +ZIUT = 0f1991086b455ded6a1c4146f7bf59fe9b495de566ebc6bf + +COUNT = 15 +QCAVSx = bf5ae05025e1be617e666d87a4168363873d5761b376b503 +QCAVSy = e1e6e38b372b6bee0ff5b3502d83735e3b2c26825e4f0fcc +dIUT = a6e9b885c66b959d1fc2708d591b6d3228e49eb98f726d61 +QIUTx = 632bb7651dbf49dde9dd125d13fb234e06617723beed3d1b +QIUTy = f4ad5209638488397c5f44f994dd7479807e79f4887d2e71 +ZIUT = b30f2127c34df35aaa91dbf0bbe15798e799a03ed11698c1 + +COUNT = 16 +QCAVSx = 6cc4feed84c7ab0d09005d660ed34de6955a9461c4138d11 +QCAVSy = 31225f33864ed48da06fa45a913b46cf42557742e35085e6 +dIUT = bdb754096ffbfbd8b0f3cb046ccb7ca149c4e7192067a3ee +QIUTx = d9c098d421d741f6faab116f3e4731d28c5558e19fe112a1 +QIUTy = 38d4dc48ccdb1d3ed8d31fd06784a4f87a68aec1cbd5b08f +ZIUT = 64a5c246599d3e8177a2402a1110eb81e6c456ab4edb5127 + +COUNT = 17 +QCAVSx = 36157315bee7afedded58c4e8ba14d3421c401e51135bcc9 +QCAVSy = 37c297ca703f77c52bb062d8ce971db84097ba0c753a418f +dIUT = d5bcf2534dafc3d99964c7bd63ab7bd15999fe56dd969c42 +QIUTx = fda1d5d28d6fe0e7909d6a8bafa7824db5572ab92ffe7de6 +QIUTy = 134a297c1d9c8bbab249abacd951ed11e5a99f92e7991572 +ZIUT = 017b8ca53c82fab163da2ab783966a39e061b32c8cfa334d + +COUNT = 18 +QCAVSx = 98464d47f0256f8292e027e8c92582ea77cf9051f5ce8e5d +QCAVSy = 449552ef7578be96236fe5ed9d0643c0bb6c5a9134b0108d +dIUT = 43d4b9df1053be5b4268104c02244d3bf9594b010b46a8b2 +QIUTx = c3020b7091463d788f1f1d76f7cfeec82ecdb3b7d99c345c +QIUTy = 9a7710d5179591d8f3df0aa122301768ae7db7eee2d7f583 +ZIUT = 340ef3db3dbebdd91c62c3d4e1a3da2c7c52a3338b865259 + +COUNT = 19 +QCAVSx = 563eb66c334cf6f123bf04c7803b48a3110214237e983bf5 +QCAVSy = 0f351104819199ef07c9a6051d20758f3af79027ea66a53f +dIUT = 94cac2c2ca714746401670d94edbf3f677867b5a03bee7ad +QIUTx = b18554a2e743ef0aa2f040987c4c451004e096df3d80ddae +QIUTy = 6e3e2c618f896e36ba620077684b70a05ffb79bf5e6c7640 +ZIUT = 2162144921df5103d0e6a650fb13fd246f4738d0896ce92f + +COUNT = 20 +QCAVSx = 86828c4ac92b5507618aec7873a1d4fc6543c5be33cf3078 +QCAVSy = b22ca72437545e10d6d4f052422eb898b737a4b8543ee550 +dIUT = 2a3a9e33c8cc3107a9f9265c3bdea1206570e86f92ac7014 +QIUTx = a7ba38be1bc669dd23ccfcee0645b1f0db8cf942deafaeb6 +QIUTy = b82db79d80cd0e37f28d4163adc389dee8fc7797b5c9831b +ZIUT = 4c69e7feed4b11159adfc16a6047a92572ea44e0740b23af + +COUNT = 21 +QCAVSx = 6700a102437781a9581da2bc25ced5abf419da91d3c803df +QCAVSy = 71396c9cf08bcd91854e3e6e42d8c657ce0f27ab77a9dc4b +dIUT = 4a6b78a98ac98fa8e99a8ece08ec0251125f85c6fd0e289b +QIUTx = e769dbbcd5ce2d83514b768d3d2d5aa0bcd8f66af15f5500 +QIUTy = 2fc6d0b039e0f28f74fbeffe9e883d4dd72296e4e95cae71 +ZIUT = 46072acefd67bff50de355ca7a31fa6be59f26e467587259 + +COUNT = 22 +QCAVSx = a82f354cf97bee5d22dc6c079f2902ead44d96a8f614f178 +QCAVSy = a654a9aa8a1a0802f2ce0ee8a0f4ebe96dee1b37464b1ff2 +dIUT = c5a6491d78844d6617ef33be6b8bd54da221450885d5950f +QIUTx = db1b24f7466bc154e9d7d2c3ca52dcfe0bfc9563c5fdb6f3 +QIUTy = 1c74fbbf5bd99921f1a9a744f8e1cf770bd6a76a772b3003 +ZIUT = ec5580eabca9f3389d2b427ddf6e49e26d629afd03fa766e + +COUNT = 23 +QCAVSx = 3cec21b28668a12a2cf78e1a8e55d0efe065152fffc34718 +QCAVSy = 1029557beba4ff1992bd21c23cb4825f6dae70e3318fd1ca +dIUT = 2ba2703c5e23f6463c5b88dc37292fabd3399b5e1fb67c05 +QIUTx = 7543148906cef9b37a71a7c08363cdd3bba50142d65241aa +QIUTy = 8b3a6973de8dc271e27c1ead1e962fdaae3710c724daac38 +ZIUT = 7f3929dd3cbf7673bc30d859d90b880307475f800660ea32 + +COUNT = 24 +QCAVSx = 7082644715b8b731f8228b5118e7270d34d181f361a221fc +QCAVSy = 464649d6c88ca89614488a1cc7b8442bb42f9fb3020a3d76 +dIUT = 836118c6248f882e9147976f764826c1a28755a6102977d5 +QIUTx = fcd345a976c720caaa97de6697226825615e1287a9eff67e +QIUTy = 58ea42edbeeafca9ff44cfd7f29abd2cbde7626d79e422c9 +ZIUT = 72e88f3ea67d46d46dbf83926e7e2a6b85b54536741e6d2c + + +[P-224] + +COUNT = 0 +QCAVSx = af33cd0629bc7e996320a3f40368f74de8704fa37b8fab69abaae280 +QCAVSy = 882092ccbba7930f419a8a4f9bb16978bbc3838729992559a6f2e2d7 +dIUT = 8346a60fc6f293ca5a0d2af68ba71d1dd389e5e40837942df3e43cbd +QIUTx = 8de2e26adf72c582d6568ef638c4fd59b18da171bdf501f1d929e048 +QIUTy = 4a68a1c2b0fb22930d120555c1ece50ea98dea8407f71be36efac0de +ZIUT = 7d96f9a3bd3c05cf5cc37feb8b9d5209d5c2597464dec3e9983743e8 + +COUNT = 1 +QCAVSx = 13bfcd4f8e9442393cab8fb46b9f0566c226b22b37076976f0617a46 +QCAVSy = eeb2427529b288c63c2f8963c1e473df2fca6caa90d52e2f8db56dd4 +dIUT = 043cb216f4b72cdf7629d63720a54aee0c99eb32d74477dac0c2f73d +QIUTx = 2f90f5c8eac9c7decdbb97b6c2f715ab725e4fe40fe6d746efbf4e1b +QIUTy = 66897351454f927a309b269c5a6d31338be4c19a5acfc32cf656f45c +ZIUT = ee93ce06b89ff72009e858c68eb708e7bc79ee0300f73bed69bbca09 + +COUNT = 2 +QCAVSx = 756dd806b9d9c34d899691ecb45b771af468ec004486a0fdd283411e +QCAVSy = 4d02c2ca617bb2c5d9613f25dd72413d229fd2901513aa29504eeefb +dIUT = 5ad0dd6dbabb4f3c2ea5fe32e561b2ca55081486df2c7c15c9622b08 +QIUTx = 005bca45d793e7fe99a843704ed838315ab14a5f6277507e9bc37531 +QIUTy = 43e9d421e1486ae5893bfd23c210e5c140d7c6b1ada59d842c9a98de +ZIUT = 3fcc01e34d4449da2a974b23fc36f9566754259d39149790cfa1ebd3 + +COUNT = 3 +QCAVSx = 0f537bf1c1122c55656d25e8aa8417e0b44b1526ae0523144f9921c4 +QCAVSy = f79b26d30e491a773696cc2c79b4f0596bc5b9eebaf394d162fb8684 +dIUT = 0aa6ff55a5d820efcb4e7d10b845ea3c9f9bc5dff86106db85318e22 +QIUTx = 2f96754131e0968198aa78fbe8c201dc5f3581c792de487340d32448 +QIUTy = 61e8a5cd79615203b6d89e9496f9e236fe3b6be8731e743d615519c6 +ZIUT = 49129628b23afcef48139a3f6f59ff5e9811aa746aa4ff33c24bb940 + +COUNT = 4 +QCAVSx = 2b3631d2b06179b3174a100f7f57131eeea8947be0786c3dc64b2239 +QCAVSy = 83de29ae3dad31adc0236c6de7f14561ca2ea083c5270c78a2e6cbc0 +dIUT = efe6e6e25affaf54c98d002abbc6328da159405a1b752e32dc23950a +QIUTx = 355e962920bde043695f6bffb4b355c63da6f5de665ed46f2ec817e2 +QIUTy = 748e095368f62e1d364edd461719793b404adbdaacbcadd88922ff37 +ZIUT = fcdc69a40501d308a6839653a8f04309ec00233949522902ffa5eac6 + +COUNT = 5 +QCAVSx = 4511403de29059f69a475c5a6a5f6cabed5d9f014436a8cb70a02338 +QCAVSy = 7d2d1b62aa046df9340f9c37a087a06b32cf7f08a223f992812a828b +dIUT = 61cb2932524001e5e9eeed6df7d9c8935ee3322029edd7aa8acbfd51 +QIUTx = d50e4adabfd989d7dbc7cf4052546cc7c447a97630436997ad4b9536 +QIUTy = 5bea503473c5eaef9552d42c40b1f2f7ca292733b255b9bbe1b12337 +ZIUT = 827e9025cb62e0e837c596063f3b9b5a0f7afd8d8783200086d61ec1 + +COUNT = 6 +QCAVSx = 314a0b26dd31c248845d7cc17b61cad4608259bed85a58d1f1ffd378 +QCAVSy = 66e4b350352e119eecada382907f3619fd748ea73ae4899dfd496302 +dIUT = 8c7ace347171f92def98d845475fc82e1d1496da81ee58f505b985fa +QIUTx = b1a8dcac89aca2799320b451df1c7ff4d97567abb68141c0d95fc2aa +QIUTy = 3524950902b1510bdc987d860afc27ad871ceaea66935abd3c0a99a8 +ZIUT = 335ba51228d94acbed851ca7821c801d5cb1c7975d7aa90a7159f8fa + +COUNT = 7 +QCAVSx = abe6843beec2fd9e5fb64730d0be4d165438ce922ed75dd80b4603e5 +QCAVSy = 6afe8673a96c4ba9900ad85995e631e436c6cc88a2c2b47b7c4886b8 +dIUT = 382feb9b9ba10f189d99e71a89cdfe44cb554cec13a212840977fb68 +QIUTx = abb6f1e3773ff8fc73aea2a0b107809ce70adcefed6e41fc5cb43045 +QIUTy = a963897ae906c10a055eeadb97ffdd6f748d3e5621e5fff304e48ba7 +ZIUT = 8c2e627594206b34f7356d3426eb3d79f518ef843fbe94014cceace3 + +COUNT = 8 +QCAVSx = 13cf9d6d2c9aae8274c27d446afd0c888ffdd52ae299a35984d4f527 +QCAVSy = dcbee75b515751f8ee2ae355e8afd5de21c62a939a6507b538cbc4af +dIUT = e0d62035101ef487c485c60fb4500eebe6a32ec64dbe97dbe0232c46 +QIUTx = 88537735e9b23e3e0e076f135a82d33f9bffb465f3abce8322a62a62 +QIUTy = b4c8c123673197875c0bd14ed097606d330fba2b9200ef65a44764d3 +ZIUT = 632abb662728dbc994508873d5c527ca5ef923c0d31fa6c47ef4c825 + +COUNT = 9 +QCAVSx = 965b637c0dfbc0cf954035686d70f7ec30929e664e521dbaa2280659 +QCAVSy = 82a58ff61bc90019bbcbb5875d3863db0bc2a1fa34b0ad4de1a83f99 +dIUT = b96ade5b73ba72aa8b6e4d74d7bf9c58e962ff78eb542287c7b44ba2 +QIUTx = 37682926a54f70a4c1748f54d50d5b00138a055f924f2c65e5b0bbe4 +QIUTy = 596afefcdd640d29635015b89bdddd1f8c2723686d332e7a06ca8799 +ZIUT = 34641141aab05ef58bd376d609345901fb8f63477c6be9097f037f1f + +COUNT = 10 +QCAVSx = 73cc645372ca2e71637cda943d8148f3382ab6dd0f2e1a49da94e134 +QCAVSy = df5c355c23e6e232ebc3bee2ab1873ee0d83e3382f8e6fe613f6343c +dIUT = a40d7e12049c71e6522c7ff2384224061c3a457058b310557655b854 +QIUTx = 399801243bfe0c2da9b0a53c8ca57f2eee87aaa94a8e4d5e029f42ca +QIUTy = aa49e6d4b47cee7a5c4ab71d5a67da84e0b9b425ce3e70da68c889e7 +ZIUT = 4f74ac8507501a32bfc5a78d8271c200e835966e187e8d00011a8c75 + +COUNT = 11 +QCAVSx = 546578216250354e449e21546dd11cd1c5174236739acad9ce0f4512 +QCAVSy = d2a22fcd66d1abedc767668327c5cb9c599043276239cf3c8516af24 +dIUT = ad2519bc724d484e02a69f05149bb047714bf0f5986fac2e222cd946 +QIUTx = df9c1e0ef15e53b9f626e2be1cbe893639c06f3e0439ee95d7d4b1e3 +QIUTy = 7a52a7386adda243efdf8941085c84e31239cab92b8017336748965e +ZIUT = ad09c9ae4d2324ea81bb555b200d3c003e22a6870ee03b52df49e4de + +COUNT = 12 +QCAVSx = 1d46b1dc3a28123cb51346e67baec56404868678faf7d0e8b2afa22a +QCAVSy = 0ec9e65ec97e218373e7fc115c2274d5b829a60d93f71e01d58136c3 +dIUT = 3d312a9b9d8ed09140900bbac1e095527ebc9e3c6493bcf3666e3a29 +QIUTx = b4a0198dc8810e884425b750928b0c960c31f7a99663400b01a179df +QIUTy = 812b601bfc0738242c6f86f830f27acd632ca618a0b5280c9d5769f7 +ZIUT = ef029c28c68064b8abd2965a38c404fb5e944ace57e8638daba9d3cd + +COUNT = 13 +QCAVSx = 266d038cc7a4fe21f6c976318e827b82bb5b8f7443a55298136506e0 +QCAVSy = df123d98a7a20bbdf3943df2e3563422f8c0cf74d53aaabdd7c973ba +dIUT = 8ce0822dc24c153995755ac350737ef506641c7d752b4f9300c612ed +QIUTx = 00dfc7ec137690cd6d12fdb2fd0b8c5314582108769c2b722ffb3958 +QIUTy = 5eef3da4ba458127346bb64023868bddb7558a2ecfc813645f4ce9fe +ZIUT = f83c16661dfcbad021cc3b5a5af51d9a18db4653866b3ff90787ce3e + +COUNT = 14 +QCAVSx = eb0a09f7a1c236a61f595809ec5670efd92e4598d5e613e092cdfdca +QCAVSy = 50787ae2f2f15b88bc10f7b5f0aee1418373f16153aebd1fba54288d +dIUT = 0ff9b485325ab77f29e7bc379fed74bfac859482da0dee7528c19db2 +QIUTx = 7e603e6976db83c36011508fa695d1b515249e2e54b48fcbcfb90247 +QIUTy = 0179a600ce86adfca9b1b931fa5173d618da09e841803d19b0264286 +ZIUT = f51258c63f232e55a66aa25ebd597b2018d1052c02eeb63866758005 + +COUNT = 15 +QCAVSx = 6b2f6b18a587f562ffc61bd9b0047322286986a78f1fd139b84f7c24 +QCAVSy = 7096908e4615266be59a53cd655515056ff92370a6271a5d3823d704 +dIUT = 19cf5ff6306467f28b9fe0675a43c0582552c8c12e59ce7c38f292b1 +QIUTx = fc20e906e609c112cfc2e0fea6303882c5db94e87e022373ab2c082a +QIUTy = aecdf1daa71782bc5a26bbbd8d7e8a76490e26abc17dffc774bd7341 +ZIUT = 7fdc969a186ff18429f2a276dac43beea21182d82ce2e5a0876552b1 + +COUNT = 16 +QCAVSx = 328101ba826acd75ff9f34d5574ce0dbc92f709bad8d7a33c47940c1 +QCAVSy = df39f1ea88488c55d5538160878b9ced18a887ea261dd712d14024ff +dIUT = 90a15368e3532c0b1e51e55d139447c2c89bc160719d697291ea7c14 +QIUTx = c6837d506e976da7db3ad1267c359dff2ea6fb0b7f7f8e77024c59e9 +QIUTy = 67eb491d2fc8a530c46525d2a8b2d7c1df5fba1ae740a4649c683ee6 +ZIUT = 3d60ab6db2b3ffe2d29ccff46d056e54230cf34982e241556ed2920c + +COUNT = 17 +QCAVSx = 0081e34270871e2ebbd94183f617b4ae15f0416dd634fe6e934cf3c0 +QCAVSy = 3a1e9f38a7b90b7317d26b9f6311063ab58b268cf489b2e50386d5d6 +dIUT = 8e0838e05e1721491067e1cabc2e8051b290e2616eec427b7121897d +QIUTx = e9150f770075626019e18f95473b71e6828041791d3f08d3faeeaa2b +QIUTy = 475f70735eaae52308a3b763dc88efe18ab590ebafa035f6e08b001c +ZIUT = 9116d72786f4db5df7a8b43078c6ab9160d423513d35ea5e2559306d + +COUNT = 18 +QCAVSx = 2623632fdf0bd856805a69aa186d4133ef5904e1f655a972d66cce07 +QCAVSy = 2cef9728dd06fb8b50150f529b695076d4507983912585c89bd0682e +dIUT = 38106e93f16a381adb1d72cee3da66ae462ad4bbfea9ecdf35d0814e +QIUTx = 7be6c4c917829ab657dd79e8637d7aefd2f81f0de7654d957e97658d +QIUTy = 430d22d9e8438310f61e0d43f25fa3e34585f432baad27db3021bf0d +ZIUT = 207c53dcefac789aaa0276d9200b3a940ce5f2296f4cb2e81a185d3d + +COUNT = 19 +QCAVSx = 8ee4d1dcc31dee4bf6fe21ca8a587721d910acfb122c16c2a77a8152 +QCAVSy = 4ebf323fff04eb477069a0ac68b345f6b1ae134efc31940e513cb99f +dIUT = e5d1718431cf50f6cbd1bc8019fa16762dfa12c989e5999977fb4ea2 +QIUTx = 2ea4966e7f92ed7f5cc61fde792045f63b731d6e7d0de2577f2d8ece +QIUTy = 1c4a7b1ede6f839162292df424be78e8176fb6f942a3c02391700f31 +ZIUT = 10e467da34f48ad7072005bccd6da1b2ba3f71eafa1c393842f91d74 + +COUNT = 20 +QCAVSx = 97dcbe6d28335882a6d193cc54a1063dd0775dc328565300bb99e691 +QCAVSy = dad11dd5ece8cfd9f97c9a526e4a1506e6355969ee87826fc38bcd24 +dIUT = 3d635691b62a9a927c633951c9369c8862bd2119d30970c2644727d6 +QIUTx = 438bbb980517afb20be1d674e3ac2b31cef07a9b23fb8f6e38e0d6c0 +QIUTy = 0be5f1c47d58d21b6ed28423b32f5a94750da47edcef33ea79942afd +ZIUT = 82fd2f9c60c4f999ac00bbe64bfc11da8ff8cda2e499fced65230bb1 + +COUNT = 21 +QCAVSx = ce9126dd53972dea1de1d11efef900de34b661859c4648c5c0e534f7 +QCAVSy = e113b6f2c1659d07f2716e64a83c18bbce344dd2121fe85168eae085 +dIUT = acf3c85bbdc379f02f5ea36e7f0f53095a9e7046a28685a8659bf798 +QIUTx = ff7511215c71d796bd646e8474be4416b91684ce0d269ef6f422013b +QIUTy = b7bf5e79b5a9393bb9ea42c0bdb2d3c2dc806e1a7306aa58e4fdbea5 +ZIUT = 530f7e7fc932613b29c981f261cb036cba3f1df3864e0e1cba2685a2 + +COUNT = 22 +QCAVSx = 84419967d6cfad41e75a02b6da605a97949a183a97c306c4b46e66a5 +QCAVSy = 5cc9b259718b1bc8b144fde633a894616ffd59a3a6d5d8e942c7cbb7 +dIUT = cffd62cb00a0e3163fbf2c397fadc9618210f86b4f54a675287305f0 +QIUTx = 04bf4d948f4430d18b4ed6c96dbaf981fa11a403ed16887f06754981 +QIUTy = 7c1326a9cef51f79d4e78303d6064b459f612584ac2fdf593d7d5d84 +ZIUT = 49f6fd0139248ef4df2db05d1319bd5b1489e249827a45a8a5f12427 + +COUNT = 23 +QCAVSx = 7c9cac35768063c2827f60a7f51388f2a8f4b7f8cd736bd6bc337477 +QCAVSy = 29ee6b849c6025d577dbcc55fbd17018f4edbc2ef105b004d6257bcd +dIUT = 85f903e43943d13c68932e710e80de52cbc0b8f1a1418ea4da079299 +QIUTx = 970a4a7e01d4188497ceb46955eb1b842d9085819a9b925c84529d3d +QIUTy = dfa2526480f833ea0edbd204e4e365fef3472888fe7d9691c3ebc09f +ZIUT = 8f7e34e597ae8093b98270a74a8dfcdbed457f42f43df487c5487161 + +COUNT = 24 +QCAVSx = 085a7642ad8e59b1a3e8726a7547afbecffdac1dab7e57230c6a9df4 +QCAVSy = f91c36d881fe9b8047a3530713554a1af4c25c5a8e654dcdcf689f2e +dIUT = cce64891a3d0129fee0d4a96cfbe7ac470b85e967529057cfa31a1d9 +QIUTx = a6b29632db94da2125dc1cf80e03702687b2acc1122022fa2174765a +QIUTy = 61723edd73e10daed73775278f1958ba56f1fc9d085ebc2b64c84fe5 +ZIUT = 71954e2261e8510be1a060733671d2e9d0a2d012eb4e09556d697d2a + + +[P-256] + +COUNT = 0 +QCAVSx = 700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287 +QCAVSy = db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac +dIUT = 7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534 +QIUTx = ead218590119e8876b29146ff89ca61770c4edbbf97d38ce385ed281d8a6b230 +QIUTy = 28af61281fd35e2fa7002523acc85a429cb06ee6648325389f59edfce1405141 +ZIUT = 46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b + +COUNT = 1 +QCAVSx = 809f04289c64348c01515eb03d5ce7ac1a8cb9498f5caa50197e58d43a86a7ae +QCAVSy = b29d84e811197f25eba8f5194092cb6ff440e26d4421011372461f579271cda3 +dIUT = 38f65d6dce47676044d58ce5139582d568f64bb16098d179dbab07741dd5caf5 +QIUTx = 119f2f047902782ab0c9e27a54aff5eb9b964829ca99c06b02ddba95b0a3f6d0 +QIUTy = 8f52b726664cac366fc98ac7a012b2682cbd962e5acb544671d41b9445704d1d +ZIUT = 057d636096cb80b67a8c038c890e887d1adfa4195e9b3ce241c8a778c59cda67 + +COUNT = 2 +QCAVSx = a2339c12d4a03c33546de533268b4ad667debf458b464d77443636440ee7fec3 +QCAVSy = ef48a3ab26e20220bcda2c1851076839dae88eae962869a497bf73cb66faf536 +dIUT = 1accfaf1b97712b85a6f54b148985a1bdc4c9bec0bd258cad4b3d603f49f32c8 +QIUTx = d9f2b79c172845bfdb560bbb01447ca5ecc0470a09513b6126902c6b4f8d1051 +QIUTy = f815ef5ec32128d3487834764678702e64e164ff7315185e23aff5facd96d7bc +ZIUT = 2d457b78b4614132477618a5b077965ec90730a8c81a1c75d6d4ec68005d67ec + +COUNT = 3 +QCAVSx = df3989b9fa55495719b3cf46dccd28b5153f7808191dd518eff0c3cff2b705ed +QCAVSy = 422294ff46003429d739a33206c8752552c8ba54a270defc06e221e0feaf6ac4 +dIUT = 207c43a79bfee03db6f4b944f53d2fb76cc49ef1c9c4d34d51b6c65c4db6932d +QIUTx = 24277c33f450462dcb3d4801d57b9ced05188f16c28eda873258048cd1607e0d +QIUTy = c4789753e2b1f63b32ff014ec42cd6a69fac81dfe6d0d6fd4af372ae27c46f88 +ZIUT = 96441259534b80f6aee3d287a6bb17b5094dd4277d9e294f8fe73e48bf2a0024 + +COUNT = 4 +QCAVSx = 41192d2813e79561e6a1d6f53c8bc1a433a199c835e141b05a74a97b0faeb922 +QCAVSy = 1af98cc45e98a7e041b01cf35f462b7562281351c8ebf3ffa02e33a0722a1328 +dIUT = 59137e38152350b195c9718d39673d519838055ad908dd4757152fd8255c09bf +QIUTx = a8c5fdce8b62c5ada598f141adb3b26cf254c280b2857a63d2ad783a73115f6b +QIUTy = 806e1aafec4af80a0d786b3de45375b517a7e5b51ffb2c356537c9e6ef227d4a +ZIUT = 19d44c8d63e8e8dd12c22a87b8cd4ece27acdde04dbf47f7f27537a6999a8e62 + +COUNT = 5 +QCAVSx = 33e82092a0f1fb38f5649d5867fba28b503172b7035574bf8e5b7100a3052792 +QCAVSy = f2cf6b601e0a05945e335550bf648d782f46186c772c0f20d3cd0d6b8ca14b2f +dIUT = f5f8e0174610a661277979b58ce5c90fee6c9b3bb346a90a7196255e40b132ef +QIUTx = 7b861dcd2844a5a8363f6b8ef8d493640f55879217189d80326aad9480dfc149 +QIUTy = c4675b45eeb306405f6c33c38bc69eb2bdec9b75ad5af4706aab84543b9cc63a +ZIUT = 664e45d5bba4ac931cd65d52017e4be9b19a515f669bea4703542a2c525cd3d3 + +COUNT = 6 +QCAVSx = 6a9e0c3f916e4e315c91147be571686d90464e8bf981d34a90b6353bca6eeba7 +QCAVSy = 40f9bead39c2f2bcc2602f75b8a73ec7bdffcbcead159d0174c6c4d3c5357f05 +dIUT = 3b589af7db03459c23068b64f63f28d3c3c6bc25b5bf76ac05f35482888b5190 +QIUTx = 9fb38e2d58ea1baf7622e96720101cae3cde4ba6c1e9fa26d9b1de0899102863 +QIUTy = d5561b900406edf50802dd7d73e89395f8aed72fba0e1d1b61fe1d22302260f0 +ZIUT = ca342daa50dc09d61be7c196c85e60a80c5cb04931746820be548cdde055679d + +COUNT = 7 +QCAVSx = a9c0acade55c2a73ead1a86fb0a9713223c82475791cd0e210b046412ce224bb +QCAVSy = f6de0afa20e93e078467c053d241903edad734c6b403ba758c2b5ff04c9d4229 +dIUT = d8bf929a20ea7436b2461b541a11c80e61d826c0a4c9d322b31dd54e7f58b9c8 +QIUTx = 20f07631e4a6512a89ad487c4e9d63039e579cb0d7a556cb9e661cd59c1e7fa4 +QIUTy = 6de91846b3eee8a5ec09c2ab1f41e21bd83620ccdd1bdce3ab7ea6e02dd274f5 +ZIUT = 35aa9b52536a461bfde4e85fc756be928c7de97923f0416c7a3ac8f88b3d4489 + +COUNT = 8 +QCAVSx = 94e94f16a98255fff2b9ac0c9598aac35487b3232d3231bd93b7db7df36f9eb9 +QCAVSy = d8049a43579cfa90b8093a94416cbefbf93386f15b3f6e190b6e3455fedfe69a +dIUT = 0f9883ba0ef32ee75ded0d8bda39a5146a29f1f2507b3bd458dbea0b2bb05b4d +QIUTx = abb61b423be5d6c26e21c605832c9142dc1dfe5a5fff28726737936e6fbf516d +QIUTy = 733d2513ef58beab202090586fac91bf0fee31e80ab33473ab23a2d89e58fad6 +ZIUT = 605c16178a9bc875dcbff54d63fe00df699c03e8a888e9e94dfbab90b25f39b4 + +COUNT = 9 +QCAVSx = e099bf2a4d557460b5544430bbf6da11004d127cb5d67f64ab07c94fcdf5274f +QCAVSy = d9c50dbe70d714edb5e221f4e020610eeb6270517e688ca64fb0e98c7ef8c1c5 +dIUT = 2beedb04b05c6988f6a67500bb813faf2cae0d580c9253b6339e4a3337bb6c08 +QIUTx = 3d63e429cb5fa895a9247129bf4e48e89f35d7b11de8158efeb3e106a2a87395 +QIUTy = 0cae9e477ef41e7c8c1064379bb7b554ddcbcae79f9814281f1e50f0403c61f3 +ZIUT = f96e40a1b72840854bb62bc13c40cc2795e373d4e715980b261476835a092e0b + +COUNT = 10 +QCAVSx = f75a5fe56bda34f3c1396296626ef012dc07e4825838778a645c8248cff01658 +QCAVSy = 33bbdf1b1772d8059df568b061f3f1122f28a8d819167c97be448e3dc3fb0c3c +dIUT = 77c15dcf44610e41696bab758943eff1409333e4d5a11bbe72c8f6c395e9f848 +QIUTx = ad5d13c3db508ddcd38457e5991434a251bed49cf5ddcb59cdee73865f138c9f +QIUTy = 62cec1e70588aa4fdfc7b9a09daa678081c04e1208b9d662b8a2214bf8e81a21 +ZIUT = 8388fa79c4babdca02a8e8a34f9e43554976e420a4ad273c81b26e4228e9d3a3 + +COUNT = 11 +QCAVSx = 2db4540d50230756158abf61d9835712b6486c74312183ccefcaef2797b7674d +QCAVSy = 62f57f314e3f3495dc4e099012f5e0ba71770f9660a1eada54104cdfde77243e +dIUT = 42a83b985011d12303db1a800f2610f74aa71cdf19c67d54ce6c9ed951e9093e +QIUTx = ab48caa61ea35f13f8ed07ffa6a13e8db224dfecfae1a7df8b1bb6ebaf0cb97d +QIUTy = 1274530ca2c385a3218bddfbcbf0b4024c9badd5243bff834ebff24a8618dccb +ZIUT = 72877cea33ccc4715038d4bcbdfe0e43f42a9e2c0c3b017fc2370f4b9acbda4a + +COUNT = 12 +QCAVSx = cd94fc9497e8990750309e9a8534fd114b0a6e54da89c4796101897041d14ecb +QCAVSy = c3def4b5fe04faee0a11932229fff563637bfdee0e79c6deeaf449f85401c5c4 +dIUT = ceed35507b5c93ead5989119b9ba342cfe38e6e638ba6eea343a55475de2800b +QIUTx = 9a8cd9bd72e71752df91440f77c547509a84df98114e7de4f26cdb39234a625d +QIUTy = d07cfc84c8e144fab2839f5189bb1d7c88631d579bbc58012ed9a2327da52f62 +ZIUT = e4e7408d85ff0e0e9c838003f28cdbd5247cdce31f32f62494b70e5f1bc36307 + +COUNT = 13 +QCAVSx = 15b9e467af4d290c417402e040426fe4cf236bae72baa392ed89780dfccdb471 +QCAVSy = cdf4e9170fb904302b8fd93a820ba8cc7ed4efd3a6f2d6b05b80b2ff2aee4e77 +dIUT = 43e0e9d95af4dc36483cdd1968d2b7eeb8611fcce77f3a4e7d059ae43e509604 +QIUTx = f989cf8ee956a82e7ebd9881cdbfb2fd946189b08db53559bc8cfdd48071eb14 +QIUTy = 5eff28f1a18a616b04b7d337868679f6dd84f9a7b3d7b6f8af276c19611a541d +ZIUT = ed56bcf695b734142c24ecb1fc1bb64d08f175eb243a31f37b3d9bb4407f3b96 + +COUNT = 14 +QCAVSx = 49c503ba6c4fa605182e186b5e81113f075bc11dcfd51c932fb21e951eee2fa1 +QCAVSy = 8af706ff0922d87b3f0c5e4e31d8b259aeb260a9269643ed520a13bb25da5924 +dIUT = b2f3600df3368ef8a0bb85ab22f41fc0e5f4fdd54be8167a5c3cd4b08db04903 +QIUTx = 69c627625b36a429c398b45c38677cb35d8beb1cf78a571e40e99fe4eac1cd4e +QIUTy = 81690112b0a88f20f7136b28d7d47e5fbc2ada3c8edd87589bc19ec9590637bd +ZIUT = bc5c7055089fc9d6c89f83c1ea1ada879d9934b2ea28fcf4e4a7e984b28ad2cf + +COUNT = 15 +QCAVSx = 19b38de39fdd2f70f7091631a4f75d1993740ba9429162c2a45312401636b29c +QCAVSy = 09aed7232b28e060941741b6828bcdfa2bc49cc844f3773611504f82a390a5ae +dIUT = 4002534307f8b62a9bf67ff641ddc60fef593b17c3341239e95bdb3e579bfdc8 +QIUTx = 5fe964671315a18aa68a2a6e3dd1fde7e23b8ce7181471cfac43c99e1ae80262 +QIUTy = d5827be282e62c84de531b963884ba832db5d6b2c3a256f0e604fe7e6b8a7f72 +ZIUT = 9a4e8e657f6b0e097f47954a63c75d74fcba71a30d83651e3e5a91aa7ccd8343 + +COUNT = 16 +QCAVSx = 2c91c61f33adfe9311c942fdbff6ba47020feff416b7bb63cec13faf9b099954 +QCAVSy = 6cab31b06419e5221fca014fb84ec870622a1b12bab5ae43682aa7ea73ea08d0 +dIUT = 4dfa12defc60319021b681b3ff84a10a511958c850939ed45635934ba4979147 +QIUTx = c9b2b8496f1440bd4a2d1e52752fd372835b364885e154a7dac49295f281ec7c +QIUTy = fbe6b926a8a4de26ccc83b802b1212400754be25d9f3eeaf008b09870ae76321 +ZIUT = 3ca1fc7ad858fb1a6aba232542f3e2a749ffc7203a2374a3f3d3267f1fc97b78 + +COUNT = 17 +QCAVSx = a28a2edf58025668f724aaf83a50956b7ac1cfbbff79b08c3bf87dfd2828d767 +QCAVSy = dfa7bfffd4c766b86abeaf5c99b6e50cb9ccc9d9d00b7ffc7804b0491b67bc03 +dIUT = 1331f6d874a4ed3bc4a2c6e9c74331d3039796314beee3b7152fcdba5556304e +QIUTx = 59e1e101521046ad9cf1d082e9d2ec7dd22530cce064991f1e55c5bcf5fcb591 +QIUTy = 482f4f673176c8fdaa0bb6e59b15a3e47454e3a04297d3863c9338d98add1f37 +ZIUT = 1aaabe7ee6e4a6fa732291202433a237df1b49bc53866bfbe00db96a0f58224f + +COUNT = 18 +QCAVSx = a2ef857a081f9d6eb206a81c4cf78a802bdf598ae380c8886ecd85fdc1ed7644 +QCAVSy = 563c4c20419f07bc17d0539fade1855e34839515b892c0f5d26561f97fa04d1a +dIUT = dd5e9f70ae740073ca0204df60763fb6036c45709bf4a7bb4e671412fad65da3 +QIUTx = 30b9db2e2e977bcdc98cb87dd736cbd8e78552121925cf16e1933657c2fb2314 +QIUTy = 6a45028800b81291bce5c2e1fed7ded650620ebbe6050c6f3a7f0dfb4673ab5c +ZIUT = 430e6a4fba4449d700d2733e557f66a3bf3d50517c1271b1ddae1161b7ac798c + +COUNT = 19 +QCAVSx = ccd8a2d86bc92f2e01bce4d6922cf7fe1626aed044685e95e2eebd464505f01f +QCAVSy = e9ddd583a9635a667777d5b8a8f31b0f79eba12c75023410b54b8567dddc0f38 +dIUT = 5ae026cfc060d55600717e55b8a12e116d1d0df34af831979057607c2d9c2f76 +QIUTx = 46c9ebd1a4a3c8c0b6d572b5dcfba12467603208a9cb5d2acfbb733c40cf6391 +QIUTy = 46c913a27d044185d38b467ace011e04d4d9bbbb8cb9ae25fa92aaf15a595e86 +ZIUT = 1ce9e6740529499f98d1f1d71329147a33df1d05e4765b539b11cf615d6974d3 + +COUNT = 20 +QCAVSx = c188ffc8947f7301fb7b53e36746097c2134bf9cc981ba74b4e9c4361f595e4e +QCAVSy = bf7d2f2056e72421ef393f0c0f2b0e00130e3cac4abbcc00286168e85ec55051 +dIUT = b601ac425d5dbf9e1735c5e2d5bdb79ca98b3d5be4a2cfd6f2273f150e064d9d +QIUTx = 7c9e950841d26c8dde8994398b8f5d475a022bc63de7773fcf8d552e01f1ba0a +QIUTy = cc42b9885c9b3bee0f8d8c57d3a8f6355016c019c4062fa22cff2f209b5cc2e1 +ZIUT = 4690e3743c07d643f1bc183636ab2a9cb936a60a802113c49bb1b3f2d0661660 + +COUNT = 21 +QCAVSx = 317e1020ff53fccef18bf47bb7f2dd7707fb7b7a7578e04f35b3beed222a0eb6 +QCAVSy = 09420ce5a19d77c6fe1ee587e6a49fbaf8f280e8df033d75403302e5a27db2ae +dIUT = fefb1dda1845312b5fce6b81b2be205af2f3a274f5a212f66c0d9fc33d7ae535 +QIUTx = 38b54db85500cb20c61056edd3d88b6a9dc26780a047f213a6e1b900f76596eb +QIUTy = 6387e4e5781571e4eb8ae62991a33b5dc33301c5bc7e125d53794a39160d8fd0 +ZIUT = 30c2261bd0004e61feda2c16aa5e21ffa8d7e7f7dbf6ec379a43b48e4b36aeb0 + +COUNT = 22 +QCAVSx = 45fb02b2ceb9d7c79d9c2fa93e9c7967c2fa4df5789f9640b24264b1e524fcb1 +QCAVSy = 5c6e8ecf1f7d3023893b7b1ca1e4d178972ee2a230757ddc564ffe37f5c5a321 +dIUT = 334ae0c4693d23935a7e8e043ebbde21e168a7cba3fa507c9be41d7681e049ce +QIUTx = 3f2bf1589abf3047bf3e54ac9a95379bff95f8f55405f64eca36a7eebe8ffca7 +QIUTy = 5212a94e66c5ae9a8991872f66a72723d80ec5b2e925745c456f5371943b3a06 +ZIUT = 2adae4a138a239dcd93c243a3803c3e4cf96e37fe14e6a9b717be9599959b11c + +COUNT = 23 +QCAVSx = a19ef7bff98ada781842fbfc51a47aff39b5935a1c7d9625c8d323d511c92de6 +QCAVSy = e9c184df75c955e02e02e400ffe45f78f339e1afe6d056fb3245f4700ce606ef +dIUT = 2c4bde40214fcc3bfc47d4cf434b629acbe9157f8fd0282540331de7942cf09d +QIUTx = 29c0807f10cbc42fb45c9989da50681eead716daa7b9e91fd32e062f5eb92ca0 +QIUTy = ff1d6d1955d7376b2da24fe1163a271659136341bc2eb1195fc706dc62e7f34d +ZIUT = 2e277ec30f5ea07d6ce513149b9479b96e07f4b6913b1b5c11305c1444a1bc0b + +COUNT = 24 +QCAVSx = 356c5a444c049a52fee0adeb7e5d82ae5aa83030bfff31bbf8ce2096cf161c4b +QCAVSy = 57d128de8b2a57a094d1a001e572173f96e8866ae352bf29cddaf92fc85b2f92 +dIUT = 85a268f9d7772f990c36b42b0a331adc92b5941de0b862d5d89a347cbf8faab0 +QIUTx = 9cf4b98581ca1779453cc816ff28b4100af56cf1bf2e5bc312d83b6b1b21d333 +QIUTy = 7a5504fcac5231a0d12d658218284868229c844a04a3450d6c7381abe080bf3b +ZIUT = 1e51373bd2c6044c129c436e742a55be2a668a85ae08441b6756445df5493857 + + +[P-384] + +COUNT = 0 +QCAVSx = a7c76b970c3b5fe8b05d2838ae04ab47697b9eaf52e764592efda27fe7513272734466b400091adbf2d68c58e0c50066 +QCAVSy = ac68f19f2e1cb879aed43a9969b91a0839c4c38a49749b661efedf243451915ed0905a32b060992b468c64766fc8437a +dIUT = 3cc3122a68f0d95027ad38c067916ba0eb8c38894d22e1b15618b6818a661774ad463b205da88cf699ab4d43c9cf98a1 +QIUTx = 9803807f2f6d2fd966cdd0290bd410c0190352fbec7ff6247de1302df86f25d34fe4a97bef60cff548355c015dbb3e5f +QIUTy = ba26ca69ec2f5b5d9dad20cc9da711383a9dbe34ea3fa5a2af75b46502629ad54dd8b7d73a8abb06a3a3be47d650cc99 +ZIUT = 5f9d29dc5e31a163060356213669c8ce132e22f57c9a04f40ba7fcead493b457e5621e766c40a2e3d4d6a04b25e533f1 + +COUNT = 1 +QCAVSx = 30f43fcf2b6b00de53f624f1543090681839717d53c7c955d1d69efaf0349b7363acb447240101cbb3af6641ce4b88e0 +QCAVSy = 25e46c0c54f0162a77efcc27b6ea792002ae2ba82714299c860857a68153ab62e525ec0530d81b5aa15897981e858757 +dIUT = 92860c21bde06165f8e900c687f8ef0a05d14f290b3f07d8b3a8cc6404366e5d5119cd6d03fb12dc58e89f13df9cd783 +QIUTx = ea4018f5a307c379180bf6a62fd2ceceebeeb7d4df063a66fb838aa35243419791f7e2c9d4803c9319aa0eb03c416b66 +QIUTy = 68835a91484f05ef028284df6436fb88ffebabcdd69ab0133e6735a1bcfb37203d10d340a8328a7b68770ca75878a1a6 +ZIUT = a23742a2c267d7425fda94b93f93bbcc24791ac51cd8fd501a238d40812f4cbfc59aac9520d758cf789c76300c69d2ff + +COUNT = 2 +QCAVSx = 1aefbfa2c6c8c855a1a216774550b79a24cda37607bb1f7cc906650ee4b3816d68f6a9c75da6e4242cebfb6652f65180 +QCAVSy = 419d28b723ebadb7658fcebb9ad9b7adea674f1da3dc6b6397b55da0f61a3eddacb4acdb14441cb214b04a0844c02fa3 +dIUT = 12cf6a223a72352543830f3f18530d5cb37f26880a0b294482c8a8ef8afad09aa78b7dc2f2789a78c66af5d1cc553853 +QIUTx = fcfcea085e8cf74d0dced1620ba8423694f903a219bbf901b0b59d6ac81baad316a242ba32bde85cb248119b852fab66 +QIUTy = 972e3c68c7ab402c5836f2a16ed451a33120a7750a6039f3ff15388ee622b7065f7122bf6d51aefbc29b37b03404581b +ZIUT = 3d2e640f350805eed1ff43b40a72b2abed0a518bcebe8f2d15b111b6773223da3c3489121db173d414b5bd5ad7153435 + +COUNT = 3 +QCAVSx = 8bc089326ec55b9cf59b34f0eb754d93596ca290fcb3444c83d4de3a5607037ec397683f8cef07eab2fe357eae36c449 +QCAVSy = d9d16ce8ac85b3f1e94568521aae534e67139e310ec72693526aa2e927b5b322c95a1a033c229cb6770c957cd3148dd7 +dIUT = 8dd48063a3a058c334b5cc7a4ce07d02e5ee6d8f1f3c51a1600962cbab462690ae3cd974fb39e40b0e843daa0fd32de1 +QIUTx = e38c9846248123c3421861ea4d32669a7b5c3c08376ad28104399494c84ff5efa3894adb2c6cbe8c3c913ef2eec5bd3c +QIUTy = 9fa84024a1028796df84021f7b6c9d02f0f4bd1a612a03cbf75a0beea43fef8ae84b48c60172aadf09c1ad016d0bf3ce +ZIUT = 6a42cfc392aba0bfd3d17b7ccf062b91fc09bbf3417612d02a90bdde62ae40c54bb2e56e167d6b70db670097eb8db854 + +COUNT = 4 +QCAVSx = eb952e2d9ac0c20c6cc48fb225c2ad154f53c8750b003fd3b4ed8ed1dc0defac61bcdde02a2bcfee7067d75d342ed2b0 +QCAVSy = f1828205baece82d1b267d0d7ff2f9c9e15b69a72df47058a97f3891005d1fb38858f5603de840e591dfa4f6e7d489e1 +dIUT = 84ece6cc3429309bd5b23e959793ed2b111ec5cb43b6c18085fcaea9efa0685d98a6262ee0d330ee250bc8a67d0e733f +QIUTx = 3222063a2997b302ee60ee1961108ff4c7acf1c0ef1d5fb0d164b84bce71c431705cb9aea9a45f5d73806655a058bee3 +QIUTy = e61fa9e7fbe7cd43abf99596a3d3a039e99fa9dc93b0bdd9cad81966d17eeaf557068afa7c78466bb5b22032d1100fa6 +ZIUT = ce7ba454d4412729a32bb833a2d1fd2ae612d4667c3a900e069214818613447df8c611de66da200db7c375cf913e4405 + +COUNT = 5 +QCAVSx = 441d029e244eb7168d647d4df50db5f4e4974ab3fdaf022aff058b3695d0b8c814cc88da6285dc6df1ac55c553885003 +QCAVSy = e8025ac23a41d4b1ea2aa46c50c6e479946b59b6d76497cd9249977e0bfe4a6262622f13d42a3c43d66bdbb30403c345 +dIUT = 68fce2121dc3a1e37b10f1dde309f9e2e18fac47cd1770951451c3484cdb77cb136d00e731260597cc2859601c01a25b +QIUTx = 868be0e694841830e424d913d8e7d86b84ee1021d82b0ecf523f09fe89a76c0c95c49f2dfbcf829c1e39709d55efbb3b +QIUTy = 9195eb183675b40fd92f51f37713317e4a9b4f715c8ab22e0773b1bc71d3a219f05b8116074658ee86b52e36f3897116 +ZIUT = ba69f0acdf3e1ca95caaac4ecaf475bbe51b54777efce01ca381f45370e486fe87f9f419b150c61e329a286d1aa265ec + +COUNT = 6 +QCAVSx = 3d4e6bf08a73404accc1629873468e4269e82d90d832e58ad72142639b5a056ad8d35c66c60e8149fac0c797bceb7c2f +QCAVSy = 9b0308dc7f0e6d29f8c277acbc65a21e5adb83d11e6873bc0a07fda0997f482504602f59e10bc5cb476b83d0a4f75e71 +dIUT = b1764c54897e7aae6de9e7751f2f37de849291f88f0f91093155b858d1cc32a3a87980f706b86cc83f927bdfdbeae0bd +QIUTx = c371222feaa6770c6f3ea3e0dac9740def4fcf821378b7f91ff937c21e0470f70f3a31d5c6b2912195f10926942b48ae +QIUTy = 047d6b4d765123563f81116bc665b7b8cc6207830d805fd84da7cb805a65baa7c12fd592d1b5b5e3e65d9672a9ef7662 +ZIUT = 1a6688ee1d6e59865d8e3ada37781d36bb0c2717eef92e61964d3927cb765c2965ea80f7f63e58c322ba0397faeaf62b + +COUNT = 7 +QCAVSx = f5f6bef1d110da03be0017eac760cc34b24d092f736f237bc7054b3865312a813bcb62d297fb10a4f7abf54708fe2d3d +QCAVSy = 06fdf8d7dc032f4e10010bf19cbf6159321252ff415fb91920d438f24e67e60c2eb0463204679fa356af44cea9c9ebf5 +dIUT = f0f7a96e70d98fd5a30ad6406cf56eb5b72a510e9f192f50e1f84524dbf3d2439f7287bb36f5aa912a79deaab4adea82 +QIUTx = 99c8c41cb1ab5e0854a346e4b08a537c1706a61553387c8d94943ab15196d40dbaa55b8210a77a5d00915f2c4ea69eab +QIUTy = 5531065bdcf17bfb3cb55a02e41a57c7f694c383ad289f900fbd656c2233a93c92e933e7a26f54cbb56f0ad875c51bb0 +ZIUT = d06a568bf2336b90cbac325161be7695eacb2295f599500d787f072612aca313ee5d874f807ddef6c1f023fe2b6e7cd0 + +COUNT = 8 +QCAVSx = 7cdec77e0737ea37c67b89b7137fe38818010f4464438ee4d1d35a0c488cad3fde2f37d00885d36d3b795b9f93d23a67 +QCAVSy = 28c42ee8d6027c56cf979ba4c229fdb01d234944f8ac433650112c3cf0f02844e888a3569dfef7828a8a884589aa055e +dIUT = 9efb87ddc61d43c482ba66e1b143aef678fbd0d1bebc2000941fabe677fe5b706bf78fce36d100b17cc787ead74bbca2 +QIUTx = 4c34efee8f0c95565d2065d1bbac2a2dd25ae964320eb6bccedc5f3a9b42a881a1afca1bb6b880584fa27b01c193cd92 +QIUTy = d8fb01dbf7cd0a3868c26b951f393c3c56c2858cee901f7793ff5d271925d13a41f8e52409f4eba1990f33acb0bac669 +ZIUT = bb3b1eda9c6560d82ff5bee403339f1e80342338a991344853b56b24f109a4d94b92f654f0425edd4c205903d7586104 + +COUNT = 9 +QCAVSx = 8eeea3a319c8df99fbc29cb55f243a720d95509515ee5cc587a5c5ae22fbbd009e626db3e911def0b99a4f7ae304b1ba +QCAVSy = 73877dc94db9adddc0d9a4b24e8976c22d73c844370e1ee857f8d1b129a3bd5f63f40caf3bd0533e38a5f5777074ff9e +dIUT = d787a57fde22ec656a0a525cf3c738b30d73af61e743ea90893ecb2d7b622add2f94ee25c2171467afb093f3f84d0018 +QIUTx = 171546923b87b2cbbad664f01ce932bf09d6a6118168678446bfa9f0938608cb4667a98f4ec8ac1462285c2508f74862 +QIUTy = fa41cb4db68ae71f1f8a3e8939dc52c2dec61a83c983beb2a02baf29ec49278088882ed0cf56c74b5c173b552ccf63cf +ZIUT = 1e97b60add7cb35c7403dd884c0a75795b7683fff8b49f9d8672a8206bfdcf0a106b8768f983258c74167422e44e4d14 + +COUNT = 10 +QCAVSx = a721f6a2d4527411834b13d4d3a33c29beb83ab7682465c6cbaf6624aca6ea58c30eb0f29dd842886695400d7254f20f +QCAVSy = 14ba6e26355109ad35129366d5e3a640ae798505a7fa55a96a36b5dad33de00474f6670f522214dd7952140ab0a7eb68 +dIUT = 83d70f7b164d9f4c227c767046b20eb34dfc778f5387e32e834b1e6daec20edb8ca5bb4192093f543b68e6aeb7ce788b +QIUTx = 57cd770f3bbcbe0c78c770eab0b169bc45e139f86378ffae1c2b16966727c2f2eb724572b8f3eb228d130db4ff862c63 +QIUTy = 7ec5c8813b685558d83e924f14bc719f6eb7ae0cbb2c474227c5bda88637a4f26c64817929af999592da6f787490332f +ZIUT = 1023478840e54775bfc69293a3cf97f5bc914726455c66538eb5623e218feef7df4befa23e09d77145ad577db32b41f9 + +COUNT = 11 +QCAVSx = d882a8505c2d5cb9b8851fc676677bb0087681ad53faceba1738286b45827561e7da37b880276c656cfc38b32ade847e +QCAVSy = 34b314bdc134575654573cffaf40445da2e6aaf987f7e913cd4c3091523058984a25d8f21da8326192456c6a0fa5f60c +dIUT = 8f558e05818b88ed383d5fca962e53413db1a0e4637eda194f761944cbea114ab9d5da175a7d57882550b0e432f395a9 +QIUTx = 9a2f57f4867ce753d72b0d95195df6f96c1fae934f602efd7b6a54582f556cfa539d89005ca2edac08ad9b72dd1f60ba +QIUTy = d9b94ee82da9cc601f346044998ba387aee56404dc6ecc8ab2b590443319d0b2b6176f9d0eac2d44678ed561607d09a9 +ZIUT = 6ad6b9dc8a6cf0d3691c501cbb967867f6e4bbb764b60dbff8fcff3ed42dbba39d63cf325b4b4078858495ddee75f954 + +COUNT = 12 +QCAVSx = 815c9d773dbf5fb6a1b86799966247f4006a23c92e68c55e9eaa998b17d8832dd4d84d927d831d4f68dac67c6488219f +QCAVSy = e79269948b2611484560fd490feec887cb55ef99a4b524880fa7499d6a07283aae2afa33feab97deca40bc606c4d8764 +dIUT = 0f5dee0affa7bbf239d5dff32987ebb7cf84fcceed643e1d3c62d0b3352aec23b6e5ac7fa4105c8cb26126ad2d1892cb +QIUTx = 23346bdfbc9d7c7c736e02bdf607671ff6082fdd27334a8bc75f3b23681ebe614d0597dd614fae58677c835a9f0b273b +QIUTy = 82ba36290d2f94db41479eb45ab4eaf67928a2315138d59eecc9b5285dfddd6714f77557216ea44cc6fc119d8243efaf +ZIUT = cc9e063566d46b357b3fcae21827377331e5e290a36e60cd7c39102b828ae0b918dc5a02216b07fe6f1958d834e42437 + +COUNT = 13 +QCAVSx = 1c0eeda7a2be000c5bdcda0478aed4db733d2a9e341224379123ad847030f29e3b168fa18e89a3c0fba2a6ce1c28fc3b +QCAVSy = ec8c1c83c118c4dbea94271869f2d868eb65e8b44e21e6f14b0f4d9b38c068daefa27114255b9a41d084cc4a1ad85456 +dIUT = 037b633b5b8ba857c0fc85656868232e2febf59578718391b81da8541a00bfe53c30ae04151847f27499f8d7abad8cf4 +QIUTx = 8878ac8a947f7d5cb2b47aad24fbb8210d86126585399a2871f84aa9c5fde3074ae540c6bf82275ca822d0feb862bc74 +QIUTy = 632f5cd2f900c2711c32f8930728eb647d31edd8d650f9654e7d33e5ed1b475489d08daa30d8cbcba6bfc3b60d9b5a37 +ZIUT = deff7f03bd09865baf945e73edff6d5122c03fb561db87dec8662e09bed4340b28a9efe118337bb7d3d4f7f568635ff9 + +COUNT = 14 +QCAVSx = c95c185e256bf997f30b311548ae7f768a38dee43eeeef43083f3077be70e2bf39ac1d4daf360c514c8c6be623443d1a +QCAVSy = 3e63a663eaf75d8a765ab2b9a35513d7933fa5e26420a5244550ec6c3b6f033b96db2aca3d6ac6aab052ce929595aea5 +dIUT = e3d07106bedcc096e7d91630ffd3094df2c7859db8d7edbb2e37b4ac47f429a637d06a67d2fba33838764ef203464991 +QIUTx = e74a1a2b85f1cbf8dbbdf050cf1aff8acb02fda2fb6591f9d3cfe4e79d0ae938a9c1483e7b75f8db24505d65065cdb18 +QIUTy = 1773ee591822f7abaa856a1a60bc0a5203548dbd1cb5025466eff8481bd07614eaa04a16c3db76905913e972a5b6b59d +ZIUT = c8b1038f735ad3bb3e4637c3e47eab487637911a6b7950a4e461948329d3923b969e5db663675623611a457fcda35a71 + +COUNT = 15 +QCAVSx = 3497238a7e6ad166df2dac039aa4dac8d17aa925e7c7631eb3b56e3aaa1c545fcd54d2e5985807910fb202b1fc191d2a +QCAVSy = a49e5c487dcc7aa40a8f234c979446040d9174e3ad357d404d7765183195aed3f913641b90c81a306ebf0d8913861316 +dIUT = f3f9b0c65a49a506632c8a45b10f66b5316f9eeb06fae218f2da62333f99905117b141c760e8974efc4af10570635791 +QIUTx = a4ad77aa7d86e5361118a6b921710c820721210712f4c347985fdee58aa4effa1e28be80a17b120b139f96300f89b49b +QIUTy = 1ddf22e07e03f1560d8f45a480094560dba9fae7f9531130c1b57ebb95982496524f31d3797793396fa823f22bdb4328 +ZIUT = d337eaa32b9f716b8747b005b97a553c59dab0c51df41a2d49039cdae705aa75c7b9e7bc0b6a0e8c578c902bc4fff23e + +COUNT = 16 +QCAVSx = 90a34737d45b1aa65f74e0bd0659bc118f8e4b774b761944ffa6573c6df4f41dec0d11b697abd934d390871d4b453240 +QCAVSy = 9b590719bb3307c149a7817be355d684893a307764b512eeffe07cb699edb5a6ffbf8d6032e6c79d5e93e94212c2aa4e +dIUT = 59fce7fad7de28bac0230690c95710c720e528f9a4e54d3a6a8cd5fc5c5f21637031ce1c5b4e3d39647d8dcb9b794664 +QIUTx = 9c43bf971edf09402876ee742095381f78b1bd3aa39b5132af75dbfe7e98bd78bde10fe2e903c2b6379e1deee175a1b0 +QIUTy = a6c58ecea5a477bb01bd543b339f1cc49f1371a2cda4d46eb4e53e250597942351a99665a122ffea9bde0636c375daf2 +ZIUT = 32d292b695a4488e42a7b7922e1ae537d76a3d21a0b2e36875f60e9f6d3e8779c2afb3a413b9dd79ae18e70b47d337c1 + +COUNT = 17 +QCAVSx = dda546acfc8f903d11e2e3920669636d44b2068aeb66ff07aa266f0030e1535b0ed0203cb8a460ac990f1394faf22f1d +QCAVSy = 15bbb2597913035faadf413476f4c70f7279769a40c986f470c427b4ee4962abdf8173bbad81874772925fd32f0b159f +dIUT = 3e49fbf950a424c5d80228dc4bc35e9f6c6c0c1d04440998da0a609a877575dbe437d6a5cedaa2ddd2a1a17fd112aded +QIUTx = 5a949594228b1a3d6f599eb3db0d06070fbc551c657b58234ba164ce3fe415fa5f3eb823c08dc29b8c341219c77b6b3d +QIUTy = 2baad447c8c290cfed25edd9031c41d0b76921457327f42db31122b81f337bbf0b1039ec830ce9061a3761953c75e4a8 +ZIUT = 1220e7e6cad7b25df98e5bbdcc6c0b65ca6c2a50c5ff6c41dca71e475646fd489615979ca92fb4389aeadefde79a24f1 + +COUNT = 18 +QCAVSx = 788be2336c52f4454d63ee944b1e49bfb619a08371048e6da92e584eae70bde1f171c4df378bd1f3c0ab03048a237802 +QCAVSy = 4673ebd8db604eaf41711748bab2968a23ca4476ce144e728247f08af752929157b5830f1e26067466bdfa8b65145a33 +dIUT = 50ccc1f7076e92f4638e85f2db98e0b483e6e2204c92bdd440a6deea04e37a07c6e72791c190ad4e4e86e01efba84269 +QIUTx = 756c07df0ce32c839dac9fb4733c9c28b70113a676a7057c38d223f22a3a9095a8d564653af528e04c7e1824be4a6512 +QIUTy = 17c2ce6962cbd2a2e066297b39d57dd9bb4680f0191d390f70b4e461419b2972ce68ad46127fdda6c39195774ea86df3 +ZIUT = 793bb9cd22a93cf468faf804a38d12b78cb12189ec679ddd2e9aa21fa9a5a0b049ab16a23574fe04c1c3c02343b91beb + +COUNT = 19 +QCAVSx = d09bb822eb99e38060954747c82bb3278cf96bbf36fece3400f4c873838a40c135eb3babb9293bd1001bf3ecdee7bf26 +QCAVSy = d416db6e1b87bbb7427788a3b6c7a7ab2c165b1e366f9608df512037584f213a648d47f16ac326e19aae972f63fd76c9 +dIUT = 06f132b71f74d87bf99857e1e4350a594e5fe35533b888552ceccbc0d8923c902e36141d7691e28631b8bc9bafe5e064 +QIUTx = 2a3cc6b8ff5cde926e7e3a189a1bd029c9b586351af8838f4f201cb8f4b70ef3b0da06d352c80fc26baf8f42b784459e +QIUTy = bf9985960176da6d23c7452a2954ffcbbcb24249b43019a2a023e0b3dabd461f19ad3e775c364f3f11ad49f3099400d3 +ZIUT = 012d191cf7404a523678c6fc075de8285b243720a903047708bb33e501e0dbee5bcc40d7c3ef6c6da39ea24d830da1e8 + +COUNT = 20 +QCAVSx = 13741262ede5861dad71063dfd204b91ea1d3b7c631df68eb949969527d79a1dc59295ef7d2bca6743e8cd77b04d1b58 +QCAVSy = 0baaeadc7e19d74a8a04451a135f1be1b02fe299f9dc00bfdf201e83d995c6950bcc1cb89d6f7b30bf54656b9a4da586 +dIUT = 12048ebb4331ec19a1e23f1a2c773b664ccfe90a28bfb846fc12f81dff44b7443c77647164bf1e9e67fd2c07a6766241 +QIUTx = bc18836bc7a9fdf54b5352f37d7528ab8fa8ec544a8c6180511cbfdd49cce377c39e34c031b5240dc9980503ed2f262c +QIUTy = 8086cbe338191080f0b7a16c7afc4c7b0326f9ac66f58552ef4bb9d24de3429ed5d3277ed58fcf48f2b5f61326bec6c6 +ZIUT = ad0fd3ddffe8884b9263f3c15fe1f07f2a5a22ffdc7e967085eea45f0cd959f20f18f522763e28bcc925e496a52dda98 + +COUNT = 21 +QCAVSx = 9e22cbc18657f516a864b37b783348b66f1aa9626cd631f4fa1bd32ad88cf11db52057c660860d39d11fbf024fabd444 +QCAVSy = 6b0d53c79681c28116df71e9cee74fd56c8b7f04b39f1198cc72284e98be9562e35926fb4f48a9fbecafe729309e8b6f +dIUT = 34d61a699ca576169fcdc0cc7e44e4e1221db0fe63d16850c8104029f7d48449714b9884328cae189978754ab460b486 +QIUTx = 867f81104ccd6b163a7902b670ef406042cb0cce7dcdc63d1dfc91b2c40e3cdf7595834bf9eceb79849f1636fc8462fc +QIUTy = 9d4bde8e875ec49697d258d1d59465f8431c6f5531e1c59e9f9ebe3cf164a8d9ce10a12f1979283a959bad244dd83863 +ZIUT = dc4ca392dc15e20185f2c6a8ea5ec31dfc96f56153a47394b3072b13d0015f5d4ae13beb3bed54d65848f9b8383e6c95 + +COUNT = 22 +QCAVSx = 2db5da5f940eaa884f4db5ec2139b0469f38e4e6fbbcc52df15c0f7cf7fcb1808c749764b6be85d2fdc5b16f58ad5dc0 +QCAVSy = 22e8b02dcf33e1b5a083849545f84ad5e43f77cb71546dbbac0d11bdb2ee202e9d3872e8d028c08990746c5e1dde9989 +dIUT = dc60fa8736d702135ff16aab992bb88eac397f5972456c72ec447374d0d8ce61153831bfc86ad5a6eb5b60bfb96a862c +QIUTx = b69beede85d0f829fec1b893ccb9c3e052ff692e13b974537bc5b0f9feaf7b22e84f03231629b24866bdb4b8cf908914 +QIUTy = 66f85e2bfcaba2843285b0e14ebc07ef7dafff8b424416fee647b59897b619f20eed95a632e6a4206bf7da429c04c560 +ZIUT = d765b208112d2b9ed5ad10c4046e2e3b0dbf57c469329519e239ac28b25c7d852bf757d5de0ee271cadd021d86cfd347 + +COUNT = 23 +QCAVSx = 329647baa354224eb4414829c5368c82d7893b39804e08cbb2180f459befc4b347a389a70c91a23bd9d30c83be5295d3 +QCAVSy = cc8f61923fad2aa8e505d6cfa126b9fabd5af9dce290b75660ef06d1caa73681d06089c33bc4246b3aa30dbcd2435b12 +dIUT = 6fa6a1c704730987aa634b0516a826aba8c6d6411d3a4c89772d7a62610256a2e2f289f5c3440b0ec1e70fa339e251ce +QIUTx = 53de1fc1328e8de14aecab29ad8a40d6b13768f86f7d298433d20fec791f86f8bc73f358098b256a298bb488de257bf4 +QIUTy = ac28944fd27f17b82946c04c66c41f0053d3692f275da55cd8739a95bd8cd3af2f96e4de959ea8344d8945375905858b +ZIUT = d3778850aeb58804fbe9dfe6f38b9fa8e20c2ca4e0dec335aafceca0333e3f2490b53c0c1a14a831ba37c4b9d74be0f2 + +COUNT = 24 +QCAVSx = 29d8a36d22200a75b7aea1bb47cdfcb1b7fd66de967041434728ab5d533a060df732130600fe6f75852a871fb2938e39 +QCAVSy = e19b53db528395de897a45108967715eb8cb55c3fcbf23379372c0873a058d57544b102ecce722b2ccabb1a603774fd5 +dIUT = 74ad8386c1cb2ca0fcdeb31e0869bb3f48c036afe2ef110ca302bc8b910f621c9fcc54cec32bb89ec7caa84c7b8e54a8 +QIUTx = 27a3e83cfb9d5122e73129d801615857da7cc089cccc9c54ab3032a19e0a0a9f677346e37f08a0b3ed8da6e5dd691063 +QIUTy = 8d60e44aa5e0fd30c918456796af37f0e41957901645e5c596c6d989f5859b03a0bd7d1f4e77936fff3c74d204e5388e +ZIUT = 81e1e71575bb4505498de097350186430a6242fa6c57b85a5f984a23371123d2d1424eefbf804258392bc723e4ef1e35 + + +[P-521] + +COUNT = 0 +QCAVSx = 000000685a48e86c79f0f0875f7bc18d25eb5fc8c0b07e5da4f4370f3a9490340854334b1e1b87fa395464c60626124a4e70d0f785601d37c09870ebf176666877a2046d +QCAVSy = 000001ba52c56fc8776d9e8f5db4f0cc27636d0b741bbe05400697942e80b739884a83bde99e0f6716939e632bc8986fa18dccd443a348b6c3e522497955a4f3c302f676 +dIUT = 0000017eecc07ab4b329068fba65e56a1f8890aa935e57134ae0ffcce802735151f4eac6564f6ee9974c5e6887a1fefee5743ae2241bfeb95d5ce31ddcb6f9edb4d6fc47 +QIUTx = 000000602f9d0cf9e526b29e22381c203c48a886c2b0673033366314f1ffbcba240ba42f4ef38a76174635f91e6b4ed34275eb01c8467d05ca80315bf1a7bbd945f550a5 +QIUTy = 000001b7c85f26f5d4b2d7355cf6b02117659943762b6d1db5ab4f1dbc44ce7b2946eb6c7de342962893fd387d1b73d7a8672d1f236961170b7eb3579953ee5cdc88cd2d +ZIUT = 005fc70477c3e63bc3954bd0df3ea0d1f41ee21746ed95fc5e1fdf90930d5e136672d72cc770742d1711c3c3a4c334a0ad9759436a4d3c5bf6e74b9578fac148c831 + +COUNT = 1 +QCAVSx = 000001df277c152108349bc34d539ee0cf06b24f5d3500677b4445453ccc21409453aafb8a72a0be9ebe54d12270aa51b3ab7f316aa5e74a951c5e53f74cd95fc29aee7a +QCAVSy = 0000013d52f33a9f3c14384d1587fa8abe7aed74bc33749ad9c570b471776422c7d4505d9b0a96b3bfac041e4c6a6990ae7f700e5b4a6640229112deafa0cd8bb0d089b0 +dIUT = 000000816f19c1fb10ef94d4a1d81c156ec3d1de08b66761f03f06ee4bb9dcebbbfe1eaa1ed49a6a990838d8ed318c14d74cc872f95d05d07ad50f621ceb620cd905cfb8 +QIUTx = 000000d45615ed5d37fde699610a62cd43ba76bedd8f85ed31005fe00d6450fbbd101291abd96d4945a8b57bc73b3fe9f4671105309ec9b6879d0551d930dac8ba45d255 +QIUTy = 000001425332844e592b440c0027972ad1526431c06732df19cd46a242172d4dd67c2c8c99dfc22e49949a56cf90c6473635ce82f25b33682fb19bc33bd910ed8ce3a7fa +ZIUT = 000b3920ac830ade812c8f96805da2236e002acbbf13596a9ab254d44d0e91b6255ebf1229f366fb5a05c5884ef46032c26d42189273ca4efa4c3db6bd12a6853759 + +COUNT = 2 +QCAVSx = 00000092db3142564d27a5f0006f819908fba1b85038a5bc2509906a497daac67fd7aee0fc2daba4e4334eeaef0e0019204b471cd88024f82115d8149cc0cf4f7ce1a4d5 +QCAVSy = 0000016bad0623f517b158d9881841d2571efbad63f85cbe2e581960c5d670601a6760272675a548996217e4ab2b8ebce31d71fca63fcc3c08e91c1d8edd91cf6fe845f8 +dIUT = 0000012f2e0c6d9e9d117ceb9723bced02eb3d4eebf5feeaf8ee0113ccd8057b13ddd416e0b74280c2d0ba8ed291c443bc1b141caf8afb3a71f97f57c225c03e1e4d42b0 +QIUTx = 000000717fcb3d4a40d103871ede044dc803db508aaa4ae74b70b9fb8d8dfd84bfecfad17871879698c292d2fd5e17b4f9343636c531a4fac68a35a93665546b9a878679 +QIUTy = 000000f3d96a8637036993ab5d244500fff9d2772112826f6436603d3eb234a44d5c4e5c577234679c4f9df725ee5b9118f23d8a58d0cc01096daf70e8dfec0128bdc2e8 +ZIUT = 006b380a6e95679277cfee4e8353bf96ef2a1ebdd060749f2f046fe571053740bbcc9a0b55790bc9ab56c3208aa05ddf746a10a3ad694daae00d980d944aabc6a08f + +COUNT = 3 +QCAVSx = 000000fdd40d9e9d974027cb3bae682162eac1328ad61bc4353c45bf5afe76bf607d2894c8cce23695d920f2464fda4773d4693be4b3773584691bdb0329b7f4c86cc299 +QCAVSy = 00000034ceac6a3fef1c3e1c494bfe8d872b183832219a7e14da414d4e3474573671ec19b033be831b915435905925b44947c592959945b4eb7c951c3b9c8cf52530ba23 +dIUT = 000000e548a79d8b05f923b9825d11b656f222e8cb98b0f89de1d317184dc5a698f7c71161ee7dc11cd31f4f4f8ae3a981e1a3e78bdebb97d7c204b9261b4ef92e0918e0 +QIUTx = 0000000ce800217ed243dd10a79ad73df578aa8a3f9194af528cd1094bbfee27a3b5481ad5862c8876c0c3f91294c0ab3aa806d9020cbaa2ed72b7fecdc5a09a6dad6f32 +QIUTy = 000001543c9ab45b12469232918e21d5a351f9a4b9cbf9efb2afcc402fa9b31650bec2d641a05c440d35331c0893d11fb13151335988b303341301a73dc5f61d574e67d9 +ZIUT = 00fbbcd0b8d05331fef6086f22a6cce4d35724ab7a2f49dd8458d0bfd57a0b8b70f246c17c4468c076874b0dff7a0336823b19e98bf1cec05e4beffb0591f97713c6 + +COUNT = 4 +QCAVSx = 00000098d99dee0816550e84dbfced7e88137fddcf581a725a455021115fe49f8dc3cf233cd9ea0e6f039dc7919da973cdceaca205da39e0bd98c8062536c47f258f44b5 +QCAVSy = 000000cd225c8797371be0c4297d2b457740100c774141d8f214c23b61aa2b6cd4806b9b70722aa4965fb622f42b7391e27e5ec21c5679c5b06b59127372997d421adc1e +dIUT = 000001c8aae94bb10b8ca4f7be577b4fb32bb2381032c4942c24fc2d753e7cc5e47b483389d9f3b956d20ee9001b1eef9f23545f72c5602140046839e963313c3decc864 +QIUTx = 00000106a14e2ee8ff970aa8ab0c79b97a33bba2958e070b75b94736b77bbe3f777324fa52872771aa88a63a9e8490c3378df4dc760cd14d62be700779dd1a4377943656 +QIUTy = 0000002366ce3941e0b284b1aa81215d0d3b9778fce23c8cd1e4ed6fa0abf62156c91d4b3eb55999c3471bed275e9e60e5aa9d690d310bfb15c9c5bbd6f5e9eb39682b74 +ZIUT = 0145cfa38f25943516c96a5fd4bfebb2f645d10520117aa51971eff442808a23b4e23c187e639ff928c3725fbd1c0c2ad0d4aeb207bc1a6fb6cb6d467888dc044b3c + +COUNT = 5 +QCAVSx = 0000007ae115adaaf041691ab6b7fb8c921f99d8ed32d283d67084e80b9ad9c40c56cd98389fb0a849d9ecf7268c297b6f93406119f40e32b5773ed25a28a9a85c4a7588 +QCAVSy = 000001a28e004e37eeaefe1f4dbb71f1878696141af3a10a9691c4ed93487214643b761fa4b0fbeeb247cf6d3fba7a60697536ad03f49b80a9d1cb079673654977c5fa94 +dIUT = 0000009b0af137c9696c75b7e6df7b73156bb2d45f482e5a4217324f478b10ceb76af09724cf86afa316e7f89918d31d54824a5c33107a483c15c15b96edc661340b1c0e +QIUTx = 000000748cdbb875d35f4bccb62abe20e82d32e4c14dc2feb5b87da2d0ccb11c9b6d4b7737b6c46f0dfb4d896e2db92fcf53cdbbae2a404c0babd564ad7adeac6273efa3 +QIUTy = 000001984acab8d8f173323de0bb60274b228871609373bb22a17287e9dec7495873abc09a8915b54c8455c8e02f654f602e23a2bbd7a9ebb74f3009bd65ecc650814cc0 +ZIUT = 005c5721e96c273319fd60ecc46b5962f698e974b429f28fe6962f4ac656be2eb8674c4aafc037eab48ece612953b1e8d861016b6ad0c79805784c67f73ada96f351 + +COUNT = 6 +QCAVSx = 0000012588115e6f7f7bdcfdf57f03b169b479758baafdaf569d04135987b2ce6164c02a57685eb5276b5dae6295d3fe90620f38b5535c6d2260c173e61eb888ca920203 +QCAVSy = 000001542c169cf97c2596fe2ddd848a222e367c5f7e6267ebc1bcd9ab5dcf49158f1a48e4af29a897b7e6a82091c2db874d8e7abf0f58064691344154f396dbaed188b6 +dIUT = 000001e48faacee6dec83ffcde944cf6bdf4ce4bae72747888ebafee455b1e91584971efb49127976a52f4142952f7c207ec0265f2b718cf3ead96ea4f62c752e4f7acd3 +QIUTx = 0000010eb1b4d9172bcc23f4f20cc9560fc54928c3f34ea61c00391dc766c76ed9fa608449377d1e4fadd1236025417330b4b91086704ace3e4e6484c606e2a943478c86 +QIUTy = 00000149413864069825ee1d0828da9f4a97713005e9bd1adbc3b38c5b946900721a960fe96ad2c1b3a44fe3de9156136d44cb17cbc2415729bb782e16bfe2deb3069e43 +ZIUT = 01736d9717429b4f412e903febe2f9e0fffd81355d6ce2c06ff3f66a3be15ceec6e65e308347593f00d7f33591da4043c30763d72749f72cdceebe825e4b34ecd570 + +COUNT = 7 +QCAVSx = 00000169491d55bd09049fdf4c2a53a660480fee4c03a0538675d1cd09b5bba78dac48543ef118a1173b3fbf8b20e39ce0e6b890a163c50f9645b3d21d1cbb3b60a6fff4 +QCAVSy = 00000083494b2eba76910fed33c761804515011fab50e3b377abd8a8a045d886d2238d2c268ac1b6ec88bd71b7ba78e2c33c152e4bf7da5d565e4acbecf5e92c7ad662bb +dIUT = 000000c29aa223ea8d64b4a1eda27f39d3bc98ea0148dd98c1cbe595f8fd2bfbde119c9e017a50f5d1fc121c08c1cef31b758859556eb3e0e042d8dd6aaac57a05ca61e3 +QIUTx = 0000001511c848ef60d5419a98d10204db0fe58224124370061bcfa4e9249d50618c56bf3722471b259f38263bb7b280d23caf2a1ee8737f9371cdb2732cdc958369930c +QIUTy = 000001d461681ae6d8c49b4c5f4d6016143fb1bd7491573e3ed0e6c48b82e821644f87f82f0e5f08fd16f1f98fa17586200ab02ed8c627b35c3f27617ec5fd92f456203f +ZIUT = 018f2ae9476c771726a77780208dedfefa205488996b18fecc50bfd4c132753f5766b2cd744afa9918606de2e016effc63622e9029e76dc6e3f0c69f7aeced565c2c + +COUNT = 8 +QCAVSx = 0000008415f5bbd0eee387d6c09d0ef8acaf29c66db45d6ba101860ae45d3c60e1e0e3f7247a4626a60fdd404965c3566c79f6449e856ce0bf94619f97da8da24bd2cfb6 +QCAVSy = 000000fdd7c59c58c361bc50a7a5d0d36f723b17c4f2ad2b03c24d42dc50f74a8c465a0afc4683f10fab84652dfe9e928c2626b5456453e1573ff60be1507467d431fbb2 +dIUT = 00000028692be2bf5c4b48939846fb3d5bce74654bb2646e15f8389e23708a1afadf561511ea0d9957d0b53453819d60fba8f65a18f7b29df021b1bb01cd163293acc3cc +QIUTx = 000001cfdc10c799f5c79cb6930a65fba351748e07567993e5e410ef4cacc4cd8a25784991eb4674e41050f930c7190ac812b9245f48a7973b658daf408822fe5b85f668 +QIUTy = 00000180d9ddfc9af77b9c4a6f02a834db15e535e0b3845b2cce30388301b51cecbe3276307ef439b5c9e6a72dc2d94d879bc395052dbb4a5787d06efb280210fb8be037 +ZIUT = 0105a346988b92ed8c7a25ce4d79d21bc86cfcc7f99c6cd19dbb4a39f48ab943b79e4f0647348da0b80bd864b85c6b8d92536d6aa544dc7537a00c858f8b66319e25 + +COUNT = 9 +QCAVSx = 000001c721eea805a5cba29f34ba5758775be0cf6160e6c08723f5ab17bf96a1ff2bd9427961a4f34b07fc0b14ca4b2bf6845debd5a869f124ebfa7aa72fe565050b7f18 +QCAVSy = 000000b6e89eb0e1dcf181236f7c548fd1a8c16b258b52c1a9bfd3fe8f22841b26763265f074c4ccf2d634ae97b701956f67a11006c52d97197d92f585f5748bc2672eeb +dIUT = 000001194d1ee613f5366cbc44b504d21a0cf6715e209cd358f2dd5f3e71cc0d67d0e964168c42a084ebda746f9863a86bacffc819f1edf1b8c727ccfb3047240a57c435 +QIUTx = 0000016bd15c8a58d366f7f2b2f298cc87b7485e9ee70d11d12448b8377c0a82c7626f67aff7f97be7a3546bf417eeeddf75a93c130191c84108042ea2fca17fd3f80d14 +QIUTy = 000001560502d04b74fce1743aab477a9d1eac93e5226981fdb97a7478ce4ce566ff7243931284fad850b0c2bcae0ddd2d97790160c1a2e77c3ed6c95ecc44b89e2637fc +ZIUT = 004531b3d2c6cd12f21604c8610e6723dbf4daf80b5a459d6ba5814397d1c1f7a21d7c114be964e27376aaebe3a7bc3d6af7a7f8c7befb611afe487ff032921f750f + +COUNT = 10 +QCAVSx = 000001c35823e440a9363ab98d9fc7a7bc0c0532dc7977a79165599bf1a9cc64c00fb387b42cca365286e8430360bfad3643bc31354eda50dc936c329ecdb60905c40fcb +QCAVSy = 000000d9e7f433531e44df4f6d514201cbaabb06badd6783e01111726d815531d233c5cdb722893ffbb2027259d594de77438809738120c6f783934f926c3fb69b40c409 +dIUT = 000001fd90e3e416e98aa3f2b6afa7f3bf368e451ad9ca5bd54b5b14aee2ed6723dde5181f5085b68169b09fbec721372ccf6b284713f9a6356b8d560a8ff78ca3737c88 +QIUTx = 000001ebea1b10d3e3b971b7efb69fc878de11c7f472e4e4d384c31b8d6288d8071517acade9b39796c7af5163bcf71aeda777533f382c6cf0a4d9bbb938c85f44b78037 +QIUTy = 0000016b0e3e19c2996b2cbd1ff64730e7ca90edca1984f9b2951333535e5748baa34a99f61ff4d5f812079e0f01e87789f34efdad8098015ee74a4f846dd190d16dc6e1 +ZIUT = 0100c8935969077bae0ba89ef0df8161d975ec5870ac811ae7e65ca5394efba4f0633d41bf79ea5e5b9496bbd7aae000b0594baa82ef8f244e6984ae87ae1ed124b7 + +COUNT = 11 +QCAVSx = 000000093057fb862f2ad2e82e581baeb3324e7b32946f2ba845a9beeed87d6995f54918ec6619b9931955d5a89d4d74adf1046bb362192f2ef6bd3e3d2d04dd1f87054a +QCAVSy = 000000aa3fb2448335f694e3cda4ae0cc71b1b2f2a206fa802d7262f19983c44674fe15327acaac1fa40424c395a6556cb8167312527fae5865ecffc14bbdc17da78cdcf +dIUT = 0000009012ecfdadc85ced630afea534cdc8e9d1ab8be5f3753dcf5f2b09b40eda66fc6858549bc36e6f8df55998cfa9a0703aecf6c42799c245011064f530c09db98369 +QIUTx = 000000234e32be0a907131d2d128a6477e0caceb86f02479745e0fe245cb332de631c078871160482eeef584e274df7fa412cea3e1e91f71ecba8781d9205d48386341ad +QIUTy = 000001cf86455b09b1c005cffba8d76289a3759628c874beea462f51f30bd581e3803134307dedbb771b3334ee15be2e242cd79c3407d2f58935456c6941dd9b6d155a46 +ZIUT = 017f36af19303841d13a389d95ec0b801c7f9a679a823146c75c17bc44256e9ad422a4f8b31f14647b2c7d317b933f7c2946c4b8abd1d56d620fab1b5ff1a3adc71f + +COUNT = 12 +QCAVSx = 00000083192ed0b1cb31f75817794937f66ad91cf74552cd510cedb9fd641310422af5d09f221cad249ee814d16dd7ac84ded9eacdc28340fcfc9c0c06abe30a2fc28cd8 +QCAVSy = 0000002212ed868c9ba0fb2c91e2c39ba93996a3e4ebf45f2852d0928c48930e875cc7b428d0e7f3f4d503e5d60c68cb49b13c2480cd486bed9200caddaddfe4ff8e3562 +dIUT = 000001b5ff847f8eff20b88cfad42c06e58c3742f2f8f1fdfd64b539ba48c25926926bd5e332b45649c0b184f77255e9d58fe8afa1a6d968e2cb1d4637777120c765c128 +QIUTx = 000001de3dc9263bc8c4969dc684be0eec54befd9a9f3dba194d8658a789341bf0d78d84da6735227cafaf09351951691197573c8c360a11e5285712b8bbdf5ac91b977c +QIUTy = 000000812de58cd095ec2e5a9b247eb3ed41d8bef6aeace194a7a05b65aa5d289fbc9b1770ec84bb6be0c2c64cc37c1d54a7f5d71377a9adbe20f26f6f2b544a821ea831 +ZIUT = 00062f9fc29ae1a68b2ee0dcf956cbd38c88ae5f645eaa546b00ebe87a7260bf724be20d34b9d02076655c933d056b21e304c24ddb1dedf1dd76de611fc4a2340336 + +COUNT = 13 +QCAVSx = 000001a89b636a93e5d2ba6c2292bf23033a84f06a3ac1220ea71e806afbe097a804cc67e9baa514cfb6c12c9194be30212bf7aae7fdf6d376c212f0554e656463ffab7e +QCAVSy = 00000182efcaf70fc412d336602e014da47256a0b606f2addcce8053bf817ac8656bb4e42f14c8cbf2a68f488ab35dcdf64056271dee1f606a440ba4bd4e5a11b8b8e54f +dIUT = 0000011a6347d4e801c91923488354cc533e7e35fddf81ff0fb7f56bb0726e0c29ee5dcdc5f394ba54cf57269048aab6e055895c8da24b8b0639a742314390cc04190ed6 +QIUTx = 000000fe30267f33ba5cdefc25cbb3c9320dad9ccb1d7d376644620ca4fadee5626a3cede25ad254624def727a7048f7145f76162aa98042f9b123b2076f8e8cf59b3fdf +QIUTy = 0000001145dc6631953b6e2945e94301d6cbb098fe4b04f7ee9b09411df104dc82d7d79ec46a01ed0f2d3e7db6eb680694bdeb107c1078aec6cabd9ebee3d342fe7e54df +ZIUT = 0128ab09bfec5406799e610f772ba17e892249fa8e0e7b18a04b9197034b250b48294f1867fb9641518f92766066a07a8b917b0e76879e1011e51ccbd9f540c54d4f + +COUNT = 14 +QCAVSx = 0000017200b3f16a68cbaed2bf78ba8cddfb6cffac262bba00fbc25f9dc72a07ce59372904899f364c44cb264c097b647d4412bee3e519892d534d9129f8a28f7500fee7 +QCAVSy = 000000baba8d672a4f4a3b63de48b96f56e18df5d68f7d70d5109833f43770d6732e06b39ad60d93e5b43db8789f1ec0aba47286a39ea584235acea757dbf13d53b58364 +dIUT = 00000022b6d2a22d71dfaa811d2d9f9f31fbed27f2e1f3d239538ddf3e4cc8c39a330266db25b7bc0a9704f17bde7f3592bf5f1f2d4b56013aacc3d8d1bc02f00d3146cc +QIUTx = 000000ba38cfbf9fd2518a3f61d43549e7a6a6d28b2be57ffd3e0faceb636b34ed17e044a9f249dae8fc132e937e2d9349cd2ed77bb1049ceb692a2ec5b17ad61502a64c +QIUTy = 0000001ec91d3058573fa6c0564a02a1a010160c313bc7c73510dc983e5461682b5be00dbce7e2c682ad73f29ca822cdc111f68fabe33a7b384a648342c3cdb9f050bcdb +ZIUT = 0101e462e9d9159968f6440e956f11dcf2227ae4aea81667122b6af9239a291eb5d6cf5a4087f358525fcacfa46bb2db01a75af1ba519b2d31da33eda87a9d565748 + +COUNT = 15 +QCAVSx = 0000004efd5dbd2f979e3831ce98f82355d6ca14a5757842875882990ab85ab9b7352dd6b9b2f4ea9a1e95c3880d65d1f3602f9ca653dc346fac858658d75626f4d4fb08 +QCAVSy = 00000061cf15dbdaa7f31589c98400373da284506d70c89f074ed262a9e28140796b7236c2eef99016085e71552ff488c72b7339fefb7915c38459cb20ab85aec4e45052 +dIUT = 0000005bacfff268acf6553c3c583b464ea36a1d35e2b257a5d49eb3419d5a095087c2fb4d15cf5bf5af816d0f3ff7586490ccd3ddc1a98b39ce63749c6288ce0dbdac7d +QIUTx = 00000036e488da7581472a9d8e628c58d6ad727311b7e6a3f6ae33a8544f34b09280249020be7196916fafd90e2ec54b66b5468d2361b99b56fa00d7ac37abb8c6f16653 +QIUTy = 0000011edb9fb8adb6a43f4f5f5fdc1421c9fe04fc8ba46c9b66334e3af927c8befb4307104f299acec4e30f812d9345c9720d19869dbfffd4ca3e7d2713eb5fc3f42615 +ZIUT = 0141d6a4b719ab67eaf04a92c0a41e2dda78f4354fb90bdc35202cc7699b9b04d49616f82255debf7bbec045ae58f982a66905fcfae69d689785e38c868eb4a27e7b + +COUNT = 16 +QCAVSx = 00000129891de0cf3cf82e8c2cf1bf90bb296fe00ab08ca45bb7892e0e227a504fdd05d2381a4448b68adff9c4153c87eacb78330d8bd52515f9f9a0b58e85f446bb4e10 +QCAVSy = 0000009edd679696d3d1d0ef327f200383253f6413683d9e4fcc87bb35f112c2f110098d15e5701d7ceee416291ff5fed85e687f727388b9afe26a4f6feed560b218e6bb +dIUT = 0000008e2c93c5423876223a637cad367c8589da69a2d0fc68612f31923ae50219df2452e7cc92615b67f17b57ffd2f52b19154bb40d7715336420fde2e89fee244f59dc +QIUTx = 000000fa3b35118d6c422570f724a26f90b2833b19239174cea081c53133f64db60d6940ea1261299c04c1f4587cdb0c4c39616479c1bb0c146799a118032dcf98f899c0 +QIUTy = 00000069f040229006151fa32b51f679c8816f7c17506b403809dc77cd58a2aec430d94d13b6c916de99f355aa45fcfbc6853d686c71be496a067d24bfaea4818fc51f75 +ZIUT = 00345e26e0abb1aac12b75f3a9cf41efe1c336396dffa4a067a4c2cfeb878c68b2b045faa4e5b4e6fa4678f5b603c351903b14bf9a6a70c439257199a640890b61d1 + +COUNT = 17 +QCAVSx = 000001a3c20240e59f5b7a3e17c275d2314ba1741210ad58b71036f8c83cc1f6b0f409dfdd9113e94b67ec39c3291426c23ffcc447054670d2908ff8fe67dc2306034c5c +QCAVSy = 000001d2825bfd3af8b1e13205780c137fe938f84fde40188e61ea02cead81badfdb425c29f7d7fb0324debadc10bbb93de68f62c35069268283f5265865db57a79f7bf7 +dIUT = 00000004d49d39d40d8111bf16d28c5936554326b197353eebbcf47545393bc8d3aaf98f14f5be7074bfb38e6cc97b989754074daddb3045f4e4ce745669fdb3ec0d5fa8 +QIUTx = 0000012ec226d050ce07c79b3df4d0f0891f9f7adf462e8c98dbc1a2a14f5e53a3f5ad894433587cc429a8be9ea1d84fa33b1803690dae04da7218d30026157fc995cf52 +QIUTy = 0000004837dfbf3426f57b5c793269130abb9a38f618532211931154db4eeb9aede88e57290f842ea0f2ea9a5f74c6203a3920fe4e305f6118f676b154e1d75b9cb5eb88 +ZIUT = 006fe9de6fb8e672e7fd150fdc5e617fabb0d43906354ccfd224757c7276f7a1010091b17ed072074f8d10a5ec971eb35a5cb7076603b7bc38d432cbc059f80f9488 + +COUNT = 18 +QCAVSx = 0000007e2d138f2832e345ae8ff65957e40e5ec7163f016bdf6d24a2243daa631d878a4a16783990c722382130f9e51f0c1bd6ff5ac96780e48b68f5dec95f42e6144bb5 +QCAVSy = 000000b0de5c896791f52886b0f09913e26e78dd0b69798fc4df6d95e3ca708ecbcbcce1c1895f5561bbabaae372e9e67e6e1a3be60e19b470cdf673ec1fc393d3426e20 +dIUT = 0000011a5d1cc79cd2bf73ea106f0e60a5ace220813b53e27b739864334a07c03367efda7a4619fa6eef3a9746492283b3c445610a023a9cc49bf4591140384fca5c8bb5 +QIUTx = 000000eb07c7332eedb7d3036059d35f7d2288d4377d5f42337ad3964079fb120ccd4c8bd384b585621055217023acd9a94fcb3b965bfb394675e788ade41a1de73e620c +QIUTy = 000000491a835de2e6e7deb7e090f4a11f2c460c0b1f3d5e94ee8d751014dc720784fd3b54500c86ebaef18429f09e8e876d5d1538968a030d7715dde99f0d8f06e29d59 +ZIUT = 01e4e759ecedce1013baf73e6fcc0b92451d03bdd50489b78871c333114990c9ba6a9b2fc7b1a2d9a1794c1b60d9279af6f146f0bbfb0683140403bfa4ccdb524a29 + +COUNT = 19 +QCAVSx = 000000118c36022209b1af8ebad1a12b566fc48744576e1199fe80de1cdf851cdf03e5b9091a8f7e079e83b7f827259b691d0c22ee29d6bdf73ec7bbfd746f2cd97a357d +QCAVSy = 000000da5ff4904548a342e2e7ba6a1f4ee5f840411a96cf63e6fe622f22c13e614e0a847c11a1ab3f1d12cc850c32e095614ca8f7e2721477b486e9ff40372977c3f65c +dIUT = 0000010c908caf1be74c616b625fc8c1f514446a6aec83b5937141d6afbb0a8c7666a7746fa1f7a6664a2123e8cdf6cd8bf836c56d3c0ebdcc980e43a186f938f3a78ae7 +QIUTx = 00000031890f4c7abec3f723362285d77d2636f876817db3bbc88b01e773597b969ff6f013ea470c854ab4a7739004eb8cbea69b82ddf36acadd406871798ecb2ac3aa7f +QIUTy = 000000d8b429ae3250266b9643c0c765a60dc10155bc2531cf8627296f4978b6640a9e600e19d0037d58503fa80799546a814d7478a550aa90e5ebeb052527faaeae5d08 +ZIUT = 0163c9191d651039a5fe985a0eea1eba018a40ab1937fcd2b61220820ee8f2302e9799f6edfc3f5174f369d672d377ea8954a8d0c8b851e81a56fda95212a6578f0e + +COUNT = 20 +QCAVSx = 000001780edff1ca1c03cfbe593edc6c049bcb2860294a92c355489d9afb2e702075ade1c953895a456230a0cde905de4a3f38573dbfcccd67ad6e7e93f0b5581e926a5d +QCAVSy = 000000a5481962c9162962e7f0ebdec936935d0eaa813e8226d40d7f6119bfd940602380c86721e61db1830f51e139f210000bcec0d8edd39e54d73a9a129f95cd5fa979 +dIUT = 000001b37d6b7288de671360425d3e5ac1ccb21815079d8d73431e9b74a6f0e7ae004a357575b11ad66642ce8b775593eba9d98bf25c75ef0b4d3a2098bbc641f59a2b77 +QIUTx = 000000189a5ee34de7e35aefeaeef9220c18071b4c29a4c3bd9d954458bd3e82a7a34da34cff5579b8101c065b1f2f527cf4581501e28ef5671873e65267733d003520af +QIUTy = 000001eb4bc50a7b4d4599d7e3fa773ddb9eb252c9b3422872e544bdf75c7bf60f5166ddc11eb08fa7c30822dabaee373ab468eb2d922e484e2a527fff2ebb804b7d9a37 +ZIUT = 015d613e267a36342e0d125cdad643d80d97ed0600afb9e6b9545c9e64a98cc6da7c5aaa3a8da0bdd9dd3b97e9788218a80abafc106ef065c8f1c4e1119ef58d298b + +COUNT = 21 +QCAVSx = 0000016dacffa183e5303083a334f765de724ec5ec9402026d4797884a9828a0d321a8cfac74ab737fe20a7d6befcfc73b6a35c1c7b01d373e31abc192d48a4241a35803 +QCAVSy = 0000011e5327cac22d305e7156e559176e19bee7e4f2f59e86f1a9d0b6603b6a7df1069bde6387feb71587b8ffce5b266e1bae86de29378a34e5c74b6724c4d40a719923 +dIUT = 000000f2661ac762f60c5fff23be5d969ccd4ec6f98e4e72618d12bdcdb9b4102162333788c0bae59f91cdfc172c7a1681ee44d96ab2135a6e5f3415ebbcd55165b1afb0 +QIUTx = 000000a8e25a6902d687b4787cdc94c364ac7cecc5c495483ed363dc0aa95ee2bd739c4c4d46b17006c728b076350d7d7e54c6822f52f47162a25109aaaba690cab696ec +QIUTy = 00000168d2f08fe19e4dc9ee7a195b03c9f7fe6676f9f520b6270557504e72ca4394a2c6918625e15ac0c51b8f95cd560123653fb8e8ee6db961e2c4c62cc54e92e2a2a9 +ZIUT = 014d6082a3b5ced1ab8ca265a8106f302146c4acb8c30bb14a4c991e3c82a9731288bdb91e0e85bda313912d06384fc44f2153fb13506fa9cf43c9aab5750988c943 + +COUNT = 22 +QCAVSx = 000000a091421d3703e3b341e9f1e7d58f8cf7bdbd1798d001967b801d1cec27e605c580b2387c1cb464f55ce7ac80334102ab03cfb86d88af76c9f4129c01bedd3bbfc4 +QCAVSy = 0000008c9c577a8e6fc446815e9d40baa66025f15dae285f19eb668ee60ae9c98e7ecdbf2b2a68e22928059f67db188007161d3ecf397e0883f0c4eb7eaf7827a62205cc +dIUT = 000000f430ca1261f09681a9282e9e970a9234227b1d5e58d558c3cc6eff44d1bdf53de16ad5ee2b18b92d62fc79586116b0efc15f79340fb7eaf5ce6c44341dcf8dde27 +QIUTx = 0000006c1d9b5eca87de1fb871a0a32f807c725adccde9b3967453a71347d608f0c030cd09e338cdecbf4a02015bc8a6e8d3e2595fe773ffc2fc4e4a55d0b1a2cc00323b +QIUTy = 000001141b2109e7f4981c952aa818a2b9f6f5c41feccdb7a7a45b9b4b672937771b008cae5f934dfe3fed10d383ab1f38769c92ce88d9be5414817ecb073a31ab368ccb +ZIUT = 0020c00747cb8d492fd497e0fec54644bf027d418ab686381f109712a99cabe328b9743d2225836f9ad66e5d7fed1de247e0da92f60d5b31f9e47672e57f710598f4 + +COUNT = 23 +QCAVSx = 0000004f38816681771289ce0cb83a5e29a1ab06fc91f786994b23708ff08a08a0f675b809ae99e9f9967eb1a49f196057d69e50d6dedb4dd2d9a81c02bdcc8f7f518460 +QCAVSy = 0000009efb244c8b91087de1eed766500f0e81530752d469256ef79f6b965d8a2232a0c2dbc4e8e1d09214bab38485be6e357c4200d073b52f04e4a16fc6f5247187aecb +dIUT = 0000005dc33aeda03c2eb233014ee468dff753b72f73b00991043ea353828ae69d4cd0fadeda7bb278b535d7c57406ff2e6e473a5a4ff98e90f90d6dadd25100e8d85666 +QIUTx = 000000c825ba307373cec8dd2498eef82e21fd9862168dbfeb83593980ca9f82875333899fe94f137daf1c4189eb502937c3a367ea7951ed8b0f3377fcdf2922021d46a5 +QIUTy = 0000016b8a2540d5e65493888bc337249e67c0a68774f3e8d81e3b4574a0125165f0bd58b8af9de74b35832539f95c3cd9f1b759408560aa6851ae3ac7555347b0d3b13b +ZIUT = 00c2bfafcd7fbd3e2fd1c750fdea61e70bd4787a7e68468c574ee99ebc47eedef064e8944a73bcb7913dbab5d93dca660d216c553622362794f7a2acc71022bdb16f + +COUNT = 24 +QCAVSx = 000001a32099b02c0bd85371f60b0dd20890e6c7af048c8179890fda308b359dbbc2b7a832bb8c6526c4af99a7ea3f0b3cb96ae1eb7684132795c478ad6f962e4a6f446d +QCAVSy = 0000017627357b39e9d7632a1370b3e93c1afb5c851b910eb4ead0c9d387df67cde85003e0e427552f1cd09059aad0262e235cce5fba8cedc4fdc1463da76dcd4b6d1a46 +dIUT = 000000df14b1f1432a7b0fb053965fd8643afee26b2451ecb6a8a53a655d5fbe16e4c64ce8647225eb11e7fdcb23627471dffc5c2523bd2ae89957cba3a57a23933e5a78 +QIUTx = 0000004e8583bbbb2ecd93f0714c332dff5ab3bc6396e62f3c560229664329baa5138c3bb1c36428abd4e23d17fcb7a2cfcc224b2e734c8941f6f121722d7b6b94154576 +QIUTy = 000001cf0874f204b0363f020864672fadbf87c8811eb147758b254b74b14fae742159f0f671a018212bbf25b8519e126d4cad778cfff50d288fd39ceb0cac635b175ec0 +ZIUT = 01aaf24e5d47e4080c18c55ea35581cd8da30f1a079565045d2008d51b12d0abb4411cda7a0785b15d149ed301a3697062f42da237aa7f07e0af3fd00eb1800d9c41 + + +[K-163] + +COUNT = 0 +QCAVSx = 0000000574236f1428c432130946783a5b3aabb6c27ea5d6 +QCAVSy = 00000007908c251b8da021cbac281f123f7af4fac5b3dbb8 +dIUT = 6653b6077398fadc7bf5e60158170148c3dc4527 +QIUTx = 000000071f8b2877d6027d9c1ade4244f2dea12692ef23d5 +QIUTy = 00000005c15ee776221c72b84b347ce383f38067b89c3e9a +ZIUT = 04325bff38f1b0c83c27f554a6c972a80f14bc23bc + +COUNT = 1 +QCAVSx = 00000001699744092fe2b5fe7ecbf6987b7aea0a06fd2cb0 +QCAVSy = 000000035de441df9408d91f0e021df8f0526b8063031495 +dIUT = 00000003aef44754d0ca97d42b4e97aa92156263c0e078f6 +QIUTx = 00000001b0108c786bf4d340f0505bdfc7d45b514611ad94 +QIUTy = 000000022c9c39d5fb9456b8a2221cea4f058f6a8d2cd84a +ZIUT = 05f9ac3a3dd88429600958386c55bef4b1aa5f0c24 + +COUNT = 2 +QCAVSx = 00000002965db159171f5cb7e7a1bcc61611aeaca8c52c9b +QCAVSy = 00000006871d1e9c1fe845268076a995803a6d49cd075554 +dIUT = 000000031172342e6d37cc1e062a4494c39cba48f9ad9a8c +QIUTx = 00000003a27ecaec2b66feac2040f6890128bd0058d31924 +QIUTy = 000000014007e3209b6d7127b0f393e5e58b1590b9f40be2 +ZIUT = 022e0290eda5d348894129f7455d1c766d32d5c2c2 + +COUNT = 3 +QCAVSx = 000000055b68c0c2c246fe0f2cd5484b58814c65213ea541 +QCAVSy = 0000000539c11d2592a2f6393b6e86c54df909b95fe0d5a8 +dIUT = 000000032a511cdcd4bfc567ceac8c24ed04e8894df78ddf +QIUTx = 00000006978dacaa47d8f3bc90b41ec7f4f8ac79a86ddd07 +QIUTy = 00000007f8b0ef4270760376bc2d5faed83da7872631d09f +ZIUT = 037f659f430009fcdae4e9f6e6316b0f5dbb268212 + +COUNT = 4 +QCAVSx = 00000006b8ef5a62d3b636a5a76bfeb1ef8ff4d8b3d9e2fc +QCAVSy = 0000000675a757266718398d8af66d2971798478e2f37d28 +dIUT = 00000002c6f64fe609eb8eeb5b53fab6308898e63ff2e3f6 +QIUTx = 0000000549e1a82ec284bf77d528627e52d832e236c92ad3 +QIUTy = 000000019883aa9b458b35bd544d6882812150c1497d31d4 +ZIUT = 00503bbb9b62f50ae7a8dfd74a1741826f09290651 + +COUNT = 5 +QCAVSx = 000000056c4a3586acb03099d52b2cd4ac59269cf51b8730 +QCAVSy = 00000002426561cbd9da1b23a6003de0e5f7c4a065a5c2b8 +dIUT = 000000026a56867513ddd8ca94d7923baa1f7fb00daa38fa +QIUTx = 00000006c28a40dc4e5503d2c4b8ab0b6b7046e8e25ac09f +QIUTy = 0000000121911654a5836005d8036d976585ff1d831e587b +ZIUT = 012cf17799fdefa2940b18d56e80d44414c5b13884 + +COUNT = 6 +QCAVSx = 0000000741c69a4edb386c94f819d1b5ddd0281e4ff29765 +QCAVSy = 00000000d32f972abac91be85a709eba07f5d16215ae602d +dIUT = 0000000386811079c8021c2d79f4de952cb2e599c42e19ed +QIUTx = 000000060aa42a62e21eea37e362b4d3de837f0c49d3ac13 +QIUTy = 000000069b20d6fd16d13b1883df05629ac7d1b82386b344 +ZIUT = 062a2f926ab435ac14e05d44c27b46b6820b713aee + +COUNT = 7 +QCAVSx = 00000001ef47795fb0e380405ab5e88defc3ced9a92514a6 +QCAVSy = 00000000be6181d7fc03ca8bfdf11869cea28cfa0e5f5f64 +dIUT = e46e9c965268647f2048474c7b1a54dffe728f1f +QIUTx = 00000007a984ead440310cef2e1338972ff2dddb65cac3d2 +QIUTy = 0000000333c1a93427fe6ac502760b7778898a8bb6a40ad9 +ZIUT = 0399b9294e895486bdefbaad7a729353ce09586357 + +COUNT = 8 +QCAVSx = 0000000374d7f9ba8cda8a68de7279d3ff8674032fd47c02 +QCAVSy = 00000003ede995c3a4e8a6fe21cd1e4cd4ca3812c0d692a5 +dIUT = 000000027334971405b0461c3ede67f2ba336734451a8378 +QIUTx = 0000000767c31ee9303b1b2cd3059f81507ef304ebd3102c +QIUTy = 0000000251e0d430dc3f63f3a37bab1e7a957652cf67e22c +ZIUT = 022325a9a769a902c2e64c80a1d35429ced42ae0a4 + +COUNT = 9 +QCAVSx = 00000006577df54e11c7e76202f94f564e6137b23ce6e441 +QCAVSy = 000000068936600aadcb25fd4024ed3e845b2bbf807280e6 +dIUT = 000000019bb480739011235c6d5c6e74d6a7bb4f20f61b7a +QIUTx = 0000000093549075704d79dae772317dd65244fa772569eb +QIUTy = 00000002a8a2821dd39d7e7653ca71cfc1a9ed857801a39b +ZIUT = 051392d5377016358405030b48744003db66440a2d + +COUNT = 10 +QCAVSx = 0000000261d15345ceb492229a8d74597e7dfd19aeb6848a +QCAVSy = 0000000114a122ce28ca15620f7b40a1f26b4234c956bdc1 +dIUT = f4edb58bcc3d6e9d317229420a733281eccff1cf +QIUTx = 000000027183609b7593b1845365c081d45ff66c9ab5e370 +QIUTy = 000000069b981236fe930947b6b77f374282a18e4be993cb +ZIUT = 045dac076e79de2fc631315465d3ef6245f26647e5 + +COUNT = 11 +QCAVSx = 000000070e380f49370a0027954a4ea880bc1929b28c5329 +QCAVSy = 000000046fe3b454af9420a811f1e15f774da5ae1a40b459 +dIUT = 00000001b990491a12fdee231aa2a116e1e3c1c91d0fd478 +QIUTx = 00000003da869d09c4e4545ac1689fc72316012632d0abd9 +QIUTy = 00000002c820f40310e5ffd2f8bf439fba879bb2ef621b2a +ZIUT = 014f7a46847ed6a7ff605b0e52c616e4ad3f0d5029 + +COUNT = 12 +QCAVSx = 00000006e60af77419b9fe0fc5c79ca1a22a1011402405b6 +QCAVSy = 000000069bca34005b578cd7a7a6929bd3f6ce29943b5ed9 +dIUT = e829b9942fd96487f6012908fe04f6d8eaaf1966 +QIUTx = 00000005ab2074c04df57160167735f7fc2d8f629d34ff18 +QIUTy = 000000012e9da6d05bb3e2acbe5ba4afb4a0dd72db07d6ac +ZIUT = 00eacabc34555956995623e60482e5c118e34e2094 + +COUNT = 13 +QCAVSx = 00000004f750e27500e10f0a176b83f14bc26d6bd71ebd74 +QCAVSy = 000000039e5009067c0ee2c8f55b7e84da7a391f08af7504 +dIUT = 0000000157ce8f0b6ce92e426ec99f223ad82763e4bd3ff3 +QIUTx = 00000005d3989cca4ae732de93672b25c9260861b4c0dce3 +QIUTy = 0000000436a331ead24f2807b55260f9dc3de668cfbfebb7 +ZIUT = 0414a622645107f115576f51cdf39d1393a2d7851f + +COUNT = 14 +QCAVSx = 00000002ab9f5ba94102d21a706761eac0092190f1cdad04 +QCAVSy = 00000004addd77e199c132d18ac541b117748d2319db7fe5 +dIUT = 0000000379885f45f2d707be1c11d86c41bada493b2a5603 +QIUTx = 00000005ae31cb29b31d24f5f94c30e9c02f07f38bff0ac8 +QIUTy = 00000004d8d8e39bf87f058543dc8990a91214da416cc558 +ZIUT = 056be002daff11c4066e10acd046a85e170fa4c122 + +COUNT = 15 +QCAVSx = 000000043d25d2de9293b84d351a33cb1a52f5930a4c8b76 +QCAVSy = 00000003d259d8236e9c8d6437f41e6d54611c52238fe2d5 +dIUT = ba8c5864db3efd768b9376fc2b6c1f85f46f6af2 +QIUTx = 000000062f622149823f255b4f86906666f3a3556af080ea +QIUTy = 0000000274ca32c10f9add61a026d20ad3ad56b17fb06a46 +ZIUT = 021fef8e473daeda8ef6bf07814d7b9b613e3076a3 + +COUNT = 16 +QCAVSx = 00000000560e1a421865118bea16cdad6b67aba384ef387b +QCAVSy = 000000058b213ec2ab3942f8f6ad60a956955b589066b856 +dIUT = 00000003e5080484d3730b2248ccc48260d4bd1857605ad1 +QIUTx = 000000058aea6e40b8cb25e6622a7be4ff01b79c92de72a5 +QIUTy = 000000043f6776b6deff3d29b4c703899d705c7fecf525c4 +ZIUT = 03a287fd1cca68db47a3c74c12627fc3728568dd66 + +COUNT = 17 +QCAVSx = 000000038e485de92e41f1caca6c0eb9d811a5aca89bf345 +QCAVSy = 0000000331a1677c46a68e964811a9cc5e4e53ea71e23129 +dIUT = 5d052ba1abea724978caef1879245672d5aef891 +QIUTx = 000000036b84a77337a9de5c1dd7ae3c899381382f0fffa4 +QIUTy = 000000056d4ac39fe881fdb8e60d4559658aaade45663ee5 +ZIUT = 029558b41b8b92387bc22c868f51bb7acb6e4ee2e3 + +COUNT = 18 +QCAVSx = 000000064259e500476dda3e97e25e491d466c2b7958bd49 +QCAVSy = 00000003c2e53281393641a518d1dceffabee8b29bde1402 +dIUT = 000000039180187a9eddcf38dc264f055b07d20b9f9a8bc4 +QIUTx = 00000004b292d1fa09dfc5e6a3ad99fd02feb74d480e34f2 +QIUTy = 00000006e1888009a0a0491c0be6abfac943d377f0b4863b +ZIUT = 0530020c8f6362312bfbe5c1c605b40dc2e032e81c + +COUNT = 19 +QCAVSx = 00000003714276997b4478e2d8b59af5f2e63e22bc4c31e4 +QCAVSy = 0000000673f28d962abfedee62eab47c3b4579a1e5168336 +dIUT = 000000016d37862b195763c6a01d5e39b9459a32507c2b21 +QIUTx = 000000033440e460c475f2058a767ec466ca18bce41f830e +QIUTy = 0000000372aee323d063fa89acbffbf55024ae24e4929f19 +ZIUT = 0521673006a1d9608911d54536e122d809e919d804 + +COUNT = 20 +QCAVSx = 0000000275ec15f27dd2da6e44dfe6235472d5bd3a2502f8 +QCAVSy = 000000058fd02262b27c185dde26b2c77d5a4f4d50dc9928 +dIUT = 6c658794b039c820a8b033008fa8ac7556bcaec3 +QIUTx = 00000004cbfb286691e415081a1785ec6b0aacdb1d231d1d +QIUTy = 00000005dd6acfe91d68a8ec23686478c0ee8c89277aef14 +ZIUT = 0460579beca16cccce314ff3040de4785336fc358c + +COUNT = 21 +QCAVSx = 0000000233af36103039226f416dd22e1a26b73f9093d38a +QCAVSy = 0000000734258a175c97768a9f72b824b99a91f5cf8e3d96 +dIUT = 0000000169c8da22c35a855495047a104be00b1575b652ab +QIUTx = 000000045efed9c8bd2a4e429588f344f49d1e63e668bd01 +QIUTy = 000000025d1af85ac21d59822d7df8f0e4bebadf3b5d4401 +ZIUT = 05ba66964483fe473ccbd00c37ad3ba40cc5969f62 + +COUNT = 22 +QCAVSx = 00000006d032152240f28be7f74df8f6d2a450c1229a5a95 +QCAVSy = 00000007aadac77cc4448985d1794636bc1d582f3d101a33 +dIUT = 032fc790864632630c49a29e9ad0fb6d10f2b58c +QIUTx = 0000000779cfb3e17c902a2584ed3382a8bed8262db98424 +QIUTy = 000000004af273875f8a2ab9a94ac0d1e4a23390b2bb505c +ZIUT = 0277c4a76e1613b2ede699a675c1645a786075009e + +COUNT = 23 +QCAVSx = 00000001f8581ec61df1409227aab7a015f2c71d29e3716c +QCAVSy = 00000001c1f51cc4185b68a260e31b4b00c03a4403f65c25 +dIUT = 00000003c1de5bb40e70933ed7db84ce2cb468cbba299b3a +QIUTx = 00000005ffe0f16018bd4bdee5f73bfdad04d713f2216f50 +QIUTy = 000000042361c881f0081cb0544efab0c3b34f59eaadeec4 +ZIUT = 03c6481dac387af39e8c09a553068ac496eea03691 + +COUNT = 24 +QCAVSx = 00000002ba22fbdaaaa806c8570f14ad4c882a610ccb8d84 +QCAVSy = 00000006d4438e528ca887b05bd2564df93bef9bf660da78 +dIUT = 00000003881275ba48bea0becc0211903467f5d0aae321aa +QIUTx = 0000000776e40fe7149985337ef1b6c9b830cb3608752aa6 +QIUTy = 000000058e6ecbb27b0b2d3cd0e3a7ba538de3576fd5b9f6 +ZIUT = 07b5d096d06d41c3ad6458cc93417e6facc99bc7b8 + + +[K-233] + +COUNT = 0 +QCAVSx = 000001f40e34b3ed4a1b2d40c056fb75f2ad543c897cfd82f542cf746a0f202f +QCAVSy = 000000c130a1abe92bc4c977c800777996ccc50b90df991a2e81dd515c188599 +dIUT = 000000135a5b8c3ce047fbc5df26277d3bf83ac33ddadb5cf4a050ca82be48f0 +QIUTx = 000001a53e5c138b3d83905d563aa1db01274633c986b52f78225a92e33e7952 +QIUTy = 000000ecabd3e2e26729a965604e560ed4498a22b31c39642e1cf99b1dde3ec7 +ZIUT = 00a822b141ca1f5ad32899e68c54d1fec3df8100df485ebf1c5868a9ac89 + +COUNT = 1 +QCAVSx = 000000c864c2a462a9363a4ac3d818211bca0369472d186288a27567433bda45 +QCAVSy = 000000689d4d0006eba054dc69fcc0786780fb5f74d3989213504e2f6e666980 +dIUT = 00000051be6fbcd4878c55439b0bcbbe5ea8e84bc9db89e70a8e8ebf34782da8 +QIUTx = 000001c5a1e5d3ee516e3ede723fa2d5cd3456b116326303c5ee49273a5604c4 +QIUTy = 000000568d0fe7130295541bfa265074147546e9733736ba007559d716d8e094 +ZIUT = 01662682bec2dfae05e38587c8e6a4d18aef4cb3416989c47c11bbe2810f + +COUNT = 2 +QCAVSx = 000001782d82fcd211c0247c87e657efcc5d2ff6b05eb935330a53903fb3bfa3 +QCAVSy = 000000cce830a515d690ab98149579ad3481384859e565d07fa61f50ebd669a2 +dIUT = 0000002ecca595e55e6c85c5af78c59540fdb749003ff4ec361c38b48e7da6bc +QIUTx = 0000005a48fac476c31cad0c68e64e65e687ae4418fb5d3b4bb2abb990dd0de4 +QIUTy = 0000002d9add706626f2859ece110df2dde89faf3e8aac433e2595e23c274082 +ZIUT = 00215d511cb95e0e073ee999908a7a844afd75c9acb7a9d724f7fd322b01 + +COUNT = 3 +QCAVSx = 0000008d800d3767abf5731695754ee8829b858ff4eb604a448ad66490b49c19 +QCAVSy = 000001bc0f0339649ad4d7b7cff3fca9e965a38625e8f45bc9602a33c0798a33 +dIUT = 0000006a7c03892df184d56cdccb9d5e9a16483a6c9388ae212aa926c8fdfb5e +QIUTx = 0000014aaf880e81db69aba2b403bbda7f361e3339b483ce2699f30bf5281ead +QIUTy = 000001b71559bd7d9384e517b87f1138a696fbceb3510d8c41c2158d4aa3e5b2 +ZIUT = 01394e02c70104f2a5308b2d101b02c70ef2d13540602b8e8f82dc6d569f + +COUNT = 4 +QCAVSx = 0000014a3e121add7a5267f5cad204b3f49215084786b23f8d94d9fda02e0f19 +QCAVSy = 000000394fea175dad9b34d525434654d0c86637926cac3a3292a2e4a514b5f5 +dIUT = 0000002e2ff8791bc64c00f3b0f1d5d5cfb9ddb3b193814599f7dbddedefcfa3 +QIUTx = 0000018045cc9e65f6e275e322a62c18efe2d00cf93995feb53561273a3f1306 +QIUTy = 00000164e0073c0d4b3e12e22f837bd3fec421e3bb09e0c0dd997422830f6403 +ZIUT = 008556a4c3a8906ddbcb946099ca5dbe7bdb6cd8f37fbb50c96fcefed32d + +COUNT = 5 +QCAVSx = 00000089667888f8425c5a623134622f1ea9d9af36df9772c410d6e31f2b4db8 +QCAVSy = 00000084430fa47164d1c0eb97042a44cbef400bbb545faea4ef49ba5e3bef42 +dIUT = 00000066972e71566746f2f76c87793774054ea275e2a7e27ab7c2d05c5f2412 +QIUTx = 00000020226dd73e318e4fc8d49dd43e59e260193d1bb248cbe4c06b4d6b8389 +QIUTy = 000000ed12a4f389696ab31c93ea3ec4d8eaf18be097fc9152e2c42b73ff4528 +ZIUT = 004ea6e0e34ec7c9bbad47f0f6f8ec0608e736d91e0e56cf3e5cffe8c370 + +COUNT = 6 +QCAVSx = 00000164da099225eb3c641fc83c77204a396eab9495b12a22f68e7a4b8399d5 +QCAVSy = 000000cd98f2704c7494e6d20375e74528c8f56f867e9dd763298142ea01724b +dIUT = 0000001e53baa16bc0262b5329a711b0eb188a1bca7ef4b5c85061225d41d4a9 +QIUTx = 0000007d6d785fa323174eb9cde5b705428e4019244835bc94702f280c25ffe5 +QIUTy = 0000019aa0ef433074c484d14e611372f03ef8912f1a8246ceb1e90c817db3db +ZIUT = 0160d0b9b92a4acd089738fd489ae39734551e888fd05a020ce26498270a + +COUNT = 7 +QCAVSx = 00000033a8b08a3c33c343032ced1c0f5e826f932dee879ec1607a2af5d46298 +QCAVSy = 0000006c4f27a49b51a89f6d0960160ba5b8fec08dd2cd4bc909a490aebe4f7b +dIUT = 00000042a8032a11d1657755c49e477033b0d341da2fe993a4577b41a40cee1a +QIUTx = 000001f6629697da620d597fc1f51c83374213f37e952fc117ee65a9e766aefb +QIUTy = 0000002b36dedc787ac951d2879d72414da2e7575a6cd7c42e0fa20b32d461f7 +ZIUT = 0038381b342efaa70bb79adb76ceb775de5f45f863559ecaee1ddbbd0313 + +COUNT = 8 +QCAVSx = 000000cfe15f861aa0153485f38ac033df9c8d812afde167b8918bb94a08d963 +QCAVSy = 000001bebf067f85126d114932162164201b1374bf1840aa11d5e250639d0608 +dIUT = 00000043e5770978195f917152f057ba1fb0156d894d32e8bb54c7f62f7340a6 +QIUTx = 000001487d1fdabccd7d89da25685b042980ab170aee3c11f31180e3b7c50a4a +QIUTy = 0000017e383dd65a1ec8a409007f75035e5b161335d9c7756ed970490fbd171a +ZIUT = 0122169f1dff445ec663270375dfe914016c38ce6c2d40d0b8098abc60ac + +COUNT = 9 +QCAVSx = 000000763e286be50740b7f8bd78fa70bcac880df3d7371eb33fda2453b3ed23 +QCAVSy = 00000057be6c5f7d990b75439868339ae327af04a049b38b92332b9cb8cb27d9 +dIUT = 0000004c67c6103e62124600a0d9e923dc217a022f57c6feb219c703334ff339 +QIUTx = 0000002352fe9341e62c609fc1538e0270405e7001d747b87500e644a112c5d9 +QIUTy = 00000041f3b15b714a6f7ef647e23665ea530efcbe19b0740436cda812e83939 +ZIUT = 0054d47c9d0a9fee258122326be25daf35f0ba0b8449e16b4623a8c0fd7e + +COUNT = 10 +QCAVSx = 000000bc8a71ad4c1134def026e4723e310223fb2c5859bc7594054c894da552 +QCAVSy = 000000c3650563505535033c7a6c448d73bfa08fb8370234c7fdbac1b34daa22 +dIUT = 00000019e54da872995eb3dcdccc50418ec351400889fae75a0ba4dcff25f1f9 +QIUTx = 0000015e67eaebe52ba37f5b73a199d950812cec1012fd410581444bbf23e0c8 +QIUTy = 00000022055ef821df33042fb8316ddad76485dbd2590e2f5498a914e4f0ad39 +ZIUT = 0071aed39f5c44a7ff72db3e0f8284da39dfb2d894f278d2006f9d2686e3 + +COUNT = 11 +QCAVSx = 0000016cc1ae13fb348252493021cd6146d531f0b722842a44c7979689f1ff38 +QCAVSy = 0000018c0963ff0ea37048c9f6f47644f2a7c8c503863c27cf21ee6e0a3224ea +dIUT = 00000013a5ffc9a0f7069c1c66148699612e5cfab7e2bf7b3255f181a0227192 +QIUTx = 0000018de4dc4f6a4de5c3638ebba24dc7064983b159f55b139c7680a1cb90d1 +QIUTy = 00000135532d8148af3e227d4a8960e768c565f72c1ac0a1c9a7bd185cf994d0 +ZIUT = 01ca68ead4eddc8847a3a661cc6628e076bdd4b45047ece72245d094dd3b + +COUNT = 12 +QCAVSx = 000000e49e182ac5d932be8b05fe340e8cb72df35647decd679a8c59b5d8fbfa +QCAVSy = 00000181b95a965abd16ec2430c26dd071984e854a967ff114ee7831bd314b2a +dIUT = 0000002f5d2a7e0877a4c99073732386e8d59734a23dd7f0df7fcd54d941e760 +QIUTx = 0000014798094680cbd32fb1ee9dcaa6b8739a556305235933fb27157d319e57 +QIUTy = 000001c855f0d453c1ffb5f668b32a8b3e309e0e8101bc39b6dbe7de214015e3 +ZIUT = 017a893b2e090780ff8daaf3588f9dfc0ac4dfe1f1e263697a9d1f398ab3 + +COUNT = 13 +QCAVSx = 000001598b2fdb5bf1a3951fb9ec016ecb4d28f66c2e9d13596786593585d719 +QCAVSy = 000001ef65caf15795d14a0be89cac7c680323bc59803ba874cb2968672cb8a9 +dIUT = 000000652a11f6c3117f1326fa6877405cec7331c4f146a97f74ab0c44de01b7 +QIUTx = 0000002cd6d4c1d2cc5e34205eadb94f4cfd35bb569da722c4d9b19b8d5cc2de +QIUTy = 000000ea3004e5b0930df7f8bda314c8bc1145463eb60022cd2dcf6c0c824e50 +ZIUT = 0041fa5fdf495b885699249b7746334b76c59e1c917bfc1ae371b96941f4 + +COUNT = 14 +QCAVSx = 000001b6cff3b7fa215e378605c93f86f5cd3845f45fbde8be079dec29bc8862 +QCAVSy = 00000166222efa5dba9e858c245dbb5da668239ab5ba728618fb85a90ddc760a +dIUT = 0000002ad5f71c6384af62689b35c24c4ddfb35acf8106cb0c19502c2ca184af +QIUTx = 000000fe1b52408a712841bd62f0ee51307f26331d402bcc3a5ab0405d1c5e80 +QIUTy = 0000010a731a7d6a6a4f5b40b2eaa810c1902db27b28d297bc05f3714cacafc0 +ZIUT = 015f5adba59d1ee01696cecce4b63e78e68508303ee496ff5abcea25ad3b + +COUNT = 15 +QCAVSx = 000000cf402aebc3e4247a9ab43da9755176a810e011f9fd977de1be2fd534fb +QCAVSy = 000001bac45fa42d605ad3479c7c43e724910716737953cc8504af14f331d34f +dIUT = 0000006f01cb54781cbda6d88deb59843ae0836b1af683efc75650be84f208a7 +QIUTx = 0000004d00a8f0820da9097fe50e8e7defdac29607dd4cb1dd881d4e61f1e78b +QIUTy = 0000008a4a8e9c811b444367952752ab8c2a5198efb28fbedbf3fbd701a857a9 +ZIUT = 003d5c29b3753e89ce5064575393392b377ca657a0b73872c82165fc43ae + +COUNT = 16 +QCAVSx = 000000f38ccccf08e5bdff3bb35f7e75bdced68d3791dcf7843ca88ff092136d +QCAVSy = 0000015ed7697a4b8c99d0147828f6c861ffc9cfb0f33dce9d14b0731e1da262 +dIUT = 0000005dc1ba1839f5d1fea85ab3614c55a9c5fe600853c71a61983c7dc82de2 +QIUTx = 000000b6cb6ffa4e2eabcf7b987ebb520165a8ec9a22a6f9ffb100f38172a0fb +QIUTy = 000000d39814e1852476e56e89ce8cdd64372840c01570a86940ace24bb9cf6a +ZIUT = 007c01f906caa590898a09f46b6f5383658e7fee656aca0f111f22939960 + +COUNT = 17 +QCAVSx = 000001e328571df933acfd4c96f3c4bde71e9175cbcd62aeecd76384744a0f3f +QCAVSy = 0000019ff48aae0c252eda8d340b25c4dda01a2f21aaa35d39baf036696a1101 +dIUT = 000000241e1df5587031dddae196891c28821cc7879ad35832ae718f6e792e66 +QIUTx = 000001c172cee2b76503eb4d90b39ddace825b23c32375cb68eaecd7348490a3 +QIUTy = 000000c246ef9c6e2fadac77c73ee9dd5adee828b7918417395b5997be1a0278 +ZIUT = 019eece7d3fafc9274d361c6fafd9efd9ee485cbacb3baaf6834feb4df6a + +COUNT = 18 +QCAVSx = 000000f4aa7f9340a9da46c4f06728753a4adc5af53a4dcb467f70b4873da785 +QCAVSy = 0000007f321e2bc4e29a68ac23c77cedd3bbcde0bf7b92a27ffa76496988981d +dIUT = 000000044ac55a913a8c7f7ed7fc5679f52f47cbb9730325be21b7993779d187 +QIUTx = 0000009794861017b3debeff302e425327fe269d78753b73bc1bfb3a77f716dc +QIUTy = 00000002581a49c1269f5ec868dc6d7f5c2d8e749632d47ab6d9e68dbad985f0 +ZIUT = 01e4b7e89fb1b51179b8792f5cd581c3917e11246d3846f6344ee82eed66 + +COUNT = 19 +QCAVSx = 00000068d9e55e7a105b7bb44b21d669bb0ef657a91437ad84bf6d5853270c98 +QCAVSy = 000000143c8bedb54db07df8f67083c59a0aa7cd8a0efa42f42fd62e442e0b62 +dIUT = 0000002bc136778531089da5c2fab3caeec256c54b0b35fc2c65f7b8ee6161c3 +QIUTx = 000001fb258a31d166bef9cd664cd7b66cd8c186e7025c77f0bae731587e9ef6 +QIUTy = 00000060dfd4e475e92805d1935d0382dc1767067915cc00ed3b24f65382d21a +ZIUT = 0145710c3ab0780ec233424d4e28b38d29f886965bbcac49fa300e1ed886 + +COUNT = 20 +QCAVSx = 00000099eb91cda98620103c3205d6489e68ad7e57d0a51dc502d6e30588f418 +QCAVSy = 0000003fbf829929edd28e906f58f87abed6d6d177f436f0dd940dda25eaf188 +dIUT = 0000000d56595471435d95fec37df622f18ee7dabb24379c82bbf714c5abc5e3 +QIUTx = 000001a52940a452aaf420b37b5f32c2c337306894a882feea7addadc01927ee +QIUTy = 000000771b9f62a2a6fa892503225275490388b8bfc2df77df3e806bedba7d88 +ZIUT = 006941a2a531083563dd886b06c0860770a4724bb04a4ebb2afb1ba2636b + +COUNT = 21 +QCAVSx = 000000dccaa22b43391dc052597ae3bd07c6e5f021f39e987756f6548171ee94 +QCAVSy = 00000128efd49af3a6b32dc16797a978f0ad4ab0db66ababd6ad5672f4f812c9 +dIUT = 00000019c8ab2b32f2ee93bf2ff6bc44378b60872bdaeb6ba56b514c8f388ba7 +QIUTx = 00000083530fa3df315a8740ac52f4d394b80c4a5f210baba0b6dc2205e12493 +QIUTy = 00000037b9d02ed43e9d41d0dbb8403b9021b4d2c1bd360ee53c31c27b492005 +ZIUT = 001d754ee5351d4582974734072abac23376e24348370934e7b864db0f52 + +COUNT = 22 +QCAVSx = 00000170917b33b37b8eaff2461e5f9eb8f0797b13aabd915a60706cd4f32cb6 +QCAVSy = 0000007651e0742c0d83d4b68552e9b7abec3644ba9755cffe6d4e56943a6b9b +dIUT = 000000503160104d88a0c0f63956e7c3bba702963f9f1b53fc119a592eeea4f5 +QIUTx = 000001463c78e498abf34033ec3e1d973dc12509e2d234fb91403715e42f61f7 +QIUTy = 000000ade7abb98a0308886696353aad33c05bab5cf3c0d4e969cbf4c4ceec93 +ZIUT = 011346b83791e4bea7f6ba6b1265e5050895d84027c106f77353418f75d7 + +COUNT = 23 +QCAVSx = 000000d8ed318382b85c2525a02c22c67f5bf366335d94767eb5cb45739664c5 +QCAVSy = 0000017d8fde7bbc568fdc802a3e3455f3cf35602df70684c8acdda165a02656 +dIUT = 0000004547eaf9be1ce5af1386e311046ec83260b84a2ca91055f60668b946e0 +QIUTx = 000001504938c167680afb8b6d5858cfaa191c40196fc4e500c662c5346ecc90 +QIUTy = 00000137d1ba942228dae68c450b1a033a2c810a995971f01c24089e4a6fdcc5 +ZIUT = 00b4938ed1ed012a9a53892ed9949397cdc4e4a612d54dcf80cdb039f47b + +COUNT = 24 +QCAVSx = 0000017f87f13f6dfee6081bb5cca532fe268c271d2756b31bdf643297cf695b +QCAVSy = 000000f3a746955e12dd0b71919edbf23b2322cab328dd09bdf87bcafdcd2884 +dIUT = 00000042fbe554862f3595184a45510ca53df97c45175584b5d2de042723358e +QIUTx = 00000131b8d61b9cfb0536c588214e45888ebe48391eeecb4d7fb5be8eff4acf +QIUTy = 00000165da49557a0aa9d45dd378d5f899272cc697682276ae91d2c0b675c469 +ZIUT = 01b3d2578bde3066a253db5322c85cf9487ce77b67ece955e281b0d7d0e7 + + +[K-283] + +COUNT = 0 +QCAVSx = 03f075c24c35a9dc9952be6fd32b761dce63f4720a22408e3a14bbd097e012b5694c22a0 +QCAVSy = 0675825b40202e95be7dab5a826147e04b8c51a09b0034577c1f31f8c16a70c8e1c85b89 +dIUT = 015fde49b802542a52c70b23a0b1784e5f8780b56853f9a5f8c3a5266e8727dce97d4a17 +QIUTx = 0611edc045dbe43ecc4ef6b324cd51f70fe3d7ddf877ec68b798909c3c4561756aa30e5f +QIUTy = 00833b25511704af09b62d9f7cbac59814e75bbb9c735f55538491dbfa60c1e0115efe42 +ZIUT = 0745552817b5d729310b7dbebae687648714a9ae695dad20ca1ab6111c3d054670f21132 + +COUNT = 1 +QCAVSx = 0799b430e92320ffeabf2d6cc87399e30c0aa84420ff8eba2309b99487b742d722e8b7a5 +QCAVSy = 0217362801fd6d2d286e5cdf375cd0ae569b700005312e37e8e35b1592efb9b5eaf47b3a +dIUT = 013b911f62f3aa884354634547ee622807d5d106020330ae2b9798c0c4cd0eadb10ba948 +QIUTx = 078d2ecd4d902332b6b3c7bd4ba7d200fc34c45eda30998b6025ed47b1f4f8e68f328624 +QIUTy = 04d5e53647dddf2fccc8816dac8bc70c29807622cc95539a72aa3a9b230ca1d25ee7b516 +ZIUT = 02eb0c1ceb6179232e91cff91fc8a30553c6ed7e0a71deb1bda0a10735a84593dd903636 + +COUNT = 2 +QCAVSx = 00ce47a743d48b86fefd6b5c02f2a97b2762a2fe57e0bdf85c1d6a29de8862c4c99ed53a +QCAVSy = 0322e596069f916568ca248ced57efe90534af4a9f90a4f40f797e452967031726bf41d7 +dIUT = 0177632b69e7edda3cf007307504343cc2162326f62017cbddf360a876dc93b81f04c58e +QIUTx = 03815ab6480e4ad24a6628275ef2ee0ce7d58699239dbce23338842bc58c42cca94d2412 +QIUTy = 02de833cc664cac90d30fbeac603efbbce9276d4f16ab1c46e7e11c81a9aa9e25c82969a +ZIUT = 04a9dd2cf5076814e5329c518c4f27b429dbe01d46682d476e7e78880de368b064236ba9 + +COUNT = 3 +QCAVSx = 0728975839b42c62036a7afffaddefc3024b7258407bed565caea939be33d16ac94445c7 +QCAVSy = 07712630790b05ae04d8d7d9f2365dae9ad24c4c61b3eb20c0a7987e6a4c4b0f598c371f +dIUT = 003bfe9a1c985386e5ba2b31553a55151e78ddc38f07432b5c42a1cd2da278fd0b68e047 +QIUTx = 01d9c3337da95ec6e5a4bff1cc92783989b66c9230107870d4a578699338e38eb2d92eff +QIUTy = 00cdaad7d0eb0f445aa763a5dfb8f38f55355777ce24f753b5ad3d3cbab125f491698d56 +ZIUT = 044e2cd2bc164d21cf4b9833c0aa62ed059282e62b82f4500aeb422d17e1f6e7e8bbd500 + +COUNT = 4 +QCAVSx = 055672d73998451089e2b7c7104b42247dddd132d40ad087b588d6a385da64f5a2f46838 +QCAVSy = 02b4cb1581f9e2b378eb7a4f64f5a7d4320b2ca3d3474726f670c3883bb8da47f3d745be +dIUT = 00d95af52a708e692d02677b21032f7aead6003f124e72013f37c06e0bbc20e3532b3cea +QIUTx = 06e487f91e73bdd344fb8bc8f4c1f476e727fb2671e9d6c8fbd775f1aaa24caf2e9a36f5 +QIUTy = 0663e1cff8099757bb9ff1b87890283aa49cff0f7b12fe184ed2a428375d2796cd81de91 +ZIUT = 04d4f04d2fcf1bcd8150eaded90e467d3d38f753b6fb54eed8f9d29cd3dcc7be2c83de11 + +COUNT = 5 +QCAVSx = 02cc28a4cb76d147d98dfa677dca14e1771347b9681c65cdb540f22c907613fdccb0c8da +QCAVSy = 07d4065f990c8fc37d100ece38fbf574ce444dc37355e0702b80d1eb1bdd670997e8f271 +dIUT = 00c733d9094032cc7aed6c54a8ced753eaf2a48882285a3b4c7e6021f26bece0722840ad +QIUTx = 026896b039d7068d98a326710ebb7a978bd47661154645ae30cd83d60535067e05151ccb +QIUTy = 00d83a263bdbd8c8abf0310bfbfc83917a86b0d8c4be0b155ab7b9e2c705605628bbcdd9 +ZIUT = 01c343540541604f68ddbd63c483760d824ded5c18be7e56e6d36a9ac6d25772afb0a90a + +COUNT = 6 +QCAVSx = 063880eb538c7275ecba4db53d9b68c287fb3778bef514974d1e7e31a9ae365a2181415f +QCAVSy = 04af9f2cf92542e1ff8ff28f8e7c8e809584e243a4902949a765a284986c750b1b06c89a +dIUT = 00db39d7536072dc3448cd7d2160e50c811f648358eb0db1d5428e81aa7a686b7865adfd +QIUTx = 03a721906ad13dc15c311fd4e552f3bc87b7d92ceeedbb0c316a952785ba4689fc0ba270 +QIUTy = 029514f3873bbc3b9e217061f7a6261fdc6268685f9656f1d5eea472cc2db5a8c162e6e9 +ZIUT = 05e38079815477b8a79096ce339c4a255f8b213be74715ea61ef7dd0c0b5f161d9de7521 + +COUNT = 7 +QCAVSx = 05bfd2895a2e66366db7a83788c72bce48f79b5c9524a08ae273c78ceb39ae97559d5ac3 +QCAVSy = 04a2b0a55f80155a1a330fde6cb6d97eddb0a9dcb66c49b392904abe8b381f91090dbb21 +dIUT = 006649bfd641dabf1b9d499d4fb04beb099475d0aa15d5ef6848b734d2d413008b604308 +QIUTx = 008f6576d62affc71836d19adbbc3d504210f12efb61c42057824515290c502f2e09b6d8 +QIUTy = 0021643be87ae6e549b0d5fbb558c1303d14b1ccd77703ec74f9602f35ca8d7a5139bce7 +ZIUT = 0531ccf51d1096982f7c2ec513a92bf51c7ac5069cb15c5e2a053ceae7e5550908a19101 + +COUNT = 8 +QCAVSx = 063547f7570bd6959733c03d2e6c4c88971f314adcf28bc851dc52ed4e8c1a4ea06f8702 +QCAVSy = 0122d3773b0934e900fba7ebfe1ad5ed5bec0fb1a9ddcf4eeb61cbed040074313c0b3170 +dIUT = 0081860a653d6d94446d7766164ff92c6c5c1545c735304b3ad4d5178c8b14d0181e9471 +QIUTx = 06b68815bb83691d16749c4be16125e2a6d6dae94252739ba7bf0db0d50198ea2fe43ddf +QIUTy = 039e0d93018a46125620f6ffaca5a0668343c57025a60c31a9d6e51191cab338993b46b5 +ZIUT = 06ffe79d2b7664ee2d8303ffe0ceca8c49a581fcdb49c4af6a060ff204eea74f4cf39cef + +COUNT = 9 +QCAVSx = 009047f7d77397db70e39fe9e4ba9d97a995a7ee066ecf538179e937ac86cacdac510950 +QCAVSy = 007cd875167f06a2fb9a819e2cbdacefc16cae0eef2cbb0b2d49beae109db753c9506170 +dIUT = 002243e8919bd7a97cef0e9cde63c76d4e107150294fcf8dd7676451ca3bfa5c5edb964c +QIUTx = 03e439e3ebdfa7a23a9deb09de141905c653c4f202edf2cf5f09faef88ba3113701e49f0 +QIUTy = 071d071b86ed0f468fc6019de23fe4ba2cb3b50032be35e92d2e5af40de706ab524e82ab +ZIUT = 0311c430db78b6203e27b52988e1e9dae890c655dac4acefa7ee9612bec32e3e5f52be55 + +COUNT = 10 +QCAVSx = 04bdec19300c8afdeed86499d2703922df57b2ffec37e45c03a5e2909de3c333bd06a5e1 +QCAVSy = 01aa4f40844f2413f1fcbded003b1d15c9f1df7548de2a2bbf71b516657ad8d8c77cf72d +dIUT = 00512a42841e1227fc9fed51c2268731684136f225cfbf45648987e2453a7186f6a7edef +QIUTx = 022f76e5ab714fdf78571e84c2b6ea3a17f12999be483bc67e1b843d209bdfec0347a43e +QIUTy = 02eec1fc0e85f330c53dad7bff4862d8afff8aa14f94756e95b8f01fd7eeb8fc54527787 +ZIUT = 0701d92ed8687138014b4379f1c34677e1744f6ae8c89958a5962f14408d587b95472db3 + +COUNT = 11 +QCAVSx = 0611f53af4b488990e7a52e5c73856a1e74279bb0f36d3ab1989b2ccd99391b6c6b3a13d +QCAVSy = 054ea95a234f65897195bc97b03fa6d246ea5ab5f41da22c08ed817aa7c04adf372982b3 +dIUT = 002a8af497d1a3dac0732a393dedf75394a3f519ce07faed3f77dc0e669f3a1b1c6ddadb +QIUTx = 0571f0c87f88888ec0738961834021765cc4f5c8db2b1f9ea9b8fe9847f8964349fdc44f +QIUTy = 04ef7c8044a609694746ccaafe87fc7f9f1a78d00f8354f5da7ee2f5da7235ac1ad4b57c +ZIUT = 04f2301ed85a5c91c31a7fd125854904340a55e34976a20743bd33d95e476450f301ee62 + +COUNT = 12 +QCAVSx = 012706ec0a0e76425d8ab4e0d55930a4416e4dd0a1af6d97987252988da0ac9627577cbe +QCAVSy = 04215e8715129cc76301791701dc5fe1abcd672b6aa19ba4c7e532ee7a913eea60dbc9d0 +dIUT = 01de9fba4ab24d06e74ae5ad36ae195c2360c728eb38c50ef533329e70c5ae19f489b6d5 +QIUTx = 048d61e0b9b8064bcca8ce40d4f9e68b23684137726a44ea75c8f2f8850f0333fbe985e6 +QIUTy = 05fcaba38d51e2112b6b9f34e6779c10c0c559c3ecd156022966cf92a8c7f65020a79ebd +ZIUT = 0643900f337ed362815f181e0628ed5184dad3e66a1f030e947f116696312d835f7f6e7b + +COUNT = 13 +QCAVSx = 05bb20bea4fd85d0162689c550054001409b6c712d356a52f793d78aa2d8261a43c5b6de +QCAVSy = 031be5cafc8aaef19b861503413a7b73b60b37b0180493d82e9426f47b6587393d08de08 +dIUT = 015d3a222d5709cb339d93cd29650664f39bf3201c5d1e86d3aef8f795b9fddf47d8c4a8 +QIUTx = 01e2b88de3772b09c63d036e0dbba435246987497b6283dab8ccf1002486de0730277b43 +QIUTy = 03ce182b7f0cea21a06a1d4de8722cbfc59b9d9d79bc760b9d17d85671561aeaadd54941 +ZIUT = 063b1a3db331f91abd0af837db9d5f040620d1ddd7fccf8b58e0df43698351ea1942548e + +COUNT = 14 +QCAVSx = 010a3ca2435b135ffea08792b7f19b4ee181207c29be1ce1fdeacdb69a669f9cdde9181a +QCAVSy = 024908274b1e98c6d197ed2783c3c953c1b3b34fa43a8b2f5742584e37fea407269b43bf +dIUT = 0098c570666792efda65fc9e7909931158dfd4477be93332e493d69866b6602c4951de6f +QIUTx = 04dc6774fe46ab0ed2768d379e7564a37c6bb1dd1bfc555727ad94c20f4732cabf2a2c82 +QIUTy = 06c6cf0f421f91fca22b4871216a9f1fe3878f07914e96ae94ac770b6762f9dce08ffa2d +ZIUT = 0516da1d64bc4b25ce4763e6438257d62fb1ffdeae16d68701d63b603ad53e8587927669 + +COUNT = 15 +QCAVSx = 053a0dd6135e43a114e5000aec40ba2709b3a613730f1cc2006b446935e237bfccc394d8 +QCAVSy = 03b66ce6cf01507d462eeefff6211bd4c56070116c6907468f7c76fe01140bf0d5fb7b79 +dIUT = 00f4b6db4a87cdd30029cc3be89e40b9bcb014d010a91a252c56cb28671f354a804cb4d8 +QIUTx = 066ddf04831fd1c72bc48b709061c1aeaaad19c9da3d8c1506fa775d4f5a5412eee0286d +QIUTy = 03aa1d13146ff192792b74a5c64ad3150fae344fa830e0f44733d867f4e0ae053526c62b +ZIUT = 049c68c333b96705eee4a3def0d568b0d4faf24df2fc2f1bf40da0af0946240c38e97f74 + +COUNT = 16 +QCAVSx = 06d4a6f3e87b6d8c49cbe517a975d2ab8c6339135596d6b30cc65cc80c1284508f49789b +QCAVSy = 02963b356f2434ec249bcb6589ede4de36cecd3450e6f5e477bfcdc29ada4aef0f45ac53 +dIUT = 01ab82c5a62ae47ecbccf666cc3323b35128c52d17be11baf3bdb56006e5d568baad8bbc +QIUTx = 00a04ad7a583666a40437f968b02cac7946745b4ca949021c5443deb70183f88e1778fe0 +QIUTy = 02bb591c32f0db3430342f0e37c45449c293c54f6b7df6f797c0992c2829858b680f2bdc +ZIUT = 04dd44c1a30edac2e39a5bc9902625880a18516385c90a9cc6b94c4f111e0260863ccab2 + +COUNT = 17 +QCAVSx = 076452e19d7a10b885123d503f5d0433e163df134fffb8558f8ac26cfb30629f8cfb093e +QCAVSy = 06b3a24b2a4b077770d396bbf154af41eee3503573a6de9afe0f6d18b02fc9761ca1643d +dIUT = 001254af1791cc75694ce590bb518a770a750446171a30edd6c0382a17e6880a1aea5b81 +QIUTx = 02b766c993b398d2426a7a0a49e9d001079d0fc32197181c56eac1805e4f87c9df055dea +QIUTy = 036e7bbd3be9139d4d43a8655ef7d51a062d9947d1a48010ef1ea10eedeb27f0d1ffe765 +ZIUT = 0049c165339e9aeb2b516684b442921f1fef3091cf781e03fb3f56e93af1f3d6e500c81f + +COUNT = 18 +QCAVSx = 018e0bb7516d2c42e9dd96caaff5f20bfddf3e8623fc947d4d70491536790b8741cdd372 +QCAVSy = 032c0fffbda2fa863cb9d15c36545020d5bb24d930daf2fea4555f7c24d6aefbb2c01d92 +dIUT = 012017b9a0599fbf13cee10850a8f8bd06ccc00bd29ac6779f1bd93346b22c98327e0fa7 +QIUTx = 0421c62dcab54ba800eafac232fc730ce70f6d5cc53ff53d371269cf046daeaf451b33e7 +QIUTy = 03d635f55233da3c490a959c6e63a94fcdbe471fbfca19d2c5a3fd12b04db380c3c895cc +ZIUT = 0645d7f4c5479baff5bc0cba654a3dcfda56c0e9d19f50f9d8d8c6357c09a140effbf223 + +COUNT = 19 +QCAVSx = 024abb155e49124282ea32e5b544621ae9b513aa0476da3bddb75260d5f5fa2e7b898987 +QCAVSy = 01bdfb0a079a55bcfce1ca8bce3019cbcae6164003384166ebbb0bb733539565adc446f3 +dIUT = 004f197c85432cb42a1777249ae411ef4bb2657ba4bad35ae538635a151c8d6a564f9cca +QIUTx = 040c88924d5a24a853fae408aea5b3bc827d7315fbb58e6ea1f6a65677dd4c4d304bd75f +QIUTy = 054b82869ada4433f7208f8570f24f06cb64046e8ac086ac57d3707fc882c6352733dff6 +ZIUT = 028017c2a0240fd746ee72a0bcae1e53e05b7af254298094c381e735523854ea5fdd4f5c + +COUNT = 20 +QCAVSx = 07527512bc934938cc5240ce70ef65222db85c13c961c1f31f914205067d64b1a4c85314 +QCAVSy = 02aabdb81ffed2c001acbb4d0b7be539304e32e431e02df8b192ad74ed1b4b0606bfc90b +dIUT = 014e893483d1d8b7621cf48bd24bc8a1b95bb40a08c16c32874a652b59a2252139428dac +QIUTx = 01574e17ce26311c40abf3243f4889a2eae74a8341aa7838551056f4395b8f02bdc327be +QIUTy = 0086e59f985348f3f8d7953800b1d75e141521249c43fe0616913db5d1d4bd5400abce55 +ZIUT = 02603c00998deba52db12814b1f77b2120cbc1dca59009c0d6ea40dcbcabca32c50380d8 + +COUNT = 21 +QCAVSx = 07ec29da2f304ceba8d5e249eb6054a4e4f59534ee59d25c1dc0e12cc38f768b83daffee +QCAVSy = 0112c7d4a37fec842271a0a822d37637e6ed55190713001aefe11b06f7e1d34e00fcdecb +dIUT = 01eb6f6c91a880a5462185c6a700e8637b8f447d09d1b251460fe57f1bf462efddddaec0 +QIUTx = 031b3026104388374cfb7c7b4ef64211a47e20b9561a3bbca53516040b7bda2837309454 +QIUTy = 024f8aeb23a35e1c22225967c7911868c84efdd873dbbccbc763ead67e72a2324aa4c6f2 +ZIUT = 026a719bff31da4b4ebaed7bd043064f9c3930b5774c4a99809332c808aacba4b9e3733a + +COUNT = 22 +QCAVSx = 061ef59389edf8f8273a662a4195411e9448bb1b77fb0800be525eb5a6a03b19665719a9 +QCAVSy = 029686f8477fb5c769efb082cb3f1a0c79db55cb264e2112c0e779e7b558f70045816a10 +dIUT = 0147be4e38667e32a6a61ab980ced92e42695925b113c694a7960aedea2e1d571a42d3de +QIUTx = 06f599f0c149457a32f1a2ffabd4dff916259382912b6402b50cdf5c235fdd1b790e5eaf +QIUTy = 04ccf1d8a4bfeb77ff3290e65ac601ee5b97fc1b1869a2eb9f0b76277e8066c086776c40 +ZIUT = 048c48c993040619536f45482c494a39b32e75fe69e478ba06e376228b79eb83d3ff9168 + +COUNT = 23 +QCAVSx = 079d5760ee6ef978518bbce536b031c655a8acf5604497ba43de0beb6877a547c3edd458 +QCAVSy = 0421b3051dd36396d20ffcd7cf34fca022516dd4bffac73fc995ae9ea814ce0e4027f7c6 +dIUT = 01e1900be61adb7e55559d99a0b7d9354456f5151e2fd7b83c005b10b16004ebe876c068 +QIUTx = 042ecc99ff48b53f6619b484af8fa59b234a981c9c3e9107bbd1cdaacce81885d06e02a9 +QIUTy = 0183da0d7fee7f3e70e117f0e8a4a742cad10aefcdc4aab9bb31458237686afb4facf3a9 +ZIUT = 05d85b16bb2a0d32c73d1402838bdfa512d744fa88c74d3d90cf714c2480e03363d5c6ec + +COUNT = 24 +QCAVSx = 024784d3d3d5e8021ffed8a2709a9f54d5395d98fa442a655a05dd94262b603596f8bff1 +QCAVSy = 03e8e39e08cce55e1bed2dfe0d2f8c141b06401dba037ecb384744930c8178d146416324 +dIUT = 0077e41ab2d09c34c588abc76d4312602e71f60019027b986e0ded372535c2b6a933a533 +QIUTx = 02923323f170074222d3a6a287adafd3d1fe12715d57b91b1ff476a2b4fcc385de261ecc +QIUTy = 04cc498d67c6267cc7c4c2d40a56cdc2a6e715edd8b2a9614eeb33d0b6fd162cbb85a714 +ZIUT = 066abb838b5f12b6fc15ceb745600686bc2d5773e53469c2ee920cfba5459a1cab20d153 + + +[K-409] + +COUNT = 0 +QCAVSx = 0177f736f6116320cafbb5b4dec202d40508182fe011189b81e1f3998f5408607a46bb150ac47bcaaafde47b8a7b72f478bc22d2 +QCAVSy = 01df4ef4b37e0124e55b67f3586de24a88a6c5d98854007d4b0c4b4ccd68d51fafa7638bbe555d60b74def217c6a63c5b4068fb7 +dIUT = 00084b711e3c60822e70fa6828b5abfb0e448888b35b0c8bb09f806616dc1ecf22dd86237d937c1bfde62b75ae655953fc6b2f7e +QIUTx = 0068a3f8b12e02d10e2f52095526bc4048b8f6ac3a84531772870789938f1aeff813e05e509ea9587d2b7e4aa14344bac3ec46f0 +QIUTy = 00d1ceb40c7d5f3297e2955f0f3eb1422b3e6bbbfbf7eb518b9c17ae8d40feb84aaf36f5e5bd96075b2b4dbe538ac011962ac705 +ZIUT = 0176bc5c4036ce5125493a58dd265f04d190f028366f7799f70aedf29ac67b5b37c37238593377a47944f5b639f43856dbd560ec + +COUNT = 1 +QCAVSx = 010c4c68a9f1a62a326556b6d977a79cd9c4476c05b1add4a2cfd3068249a3c3923822428d352c5d74e5d64acceedbdaa6efbe4c +QCAVSy = 00866ae940dd31b5e6e3f20b3b4d87a6a02c78173c80aa510a6edff852c629e6064df5d7c600fd98e58e8e8c662bb4b96c8ba905 +dIUT = 0065188bb7796e451f44727a1a0674440dd33d258ad2fdc7b98faf64b11e7e8ce5e8c21e799f1ff2fd29d4c94aa158962068a59f +QIUTx = 0032c5768452f3c1f3bc54879379ad420891267742b37fb096ee7b8c21ceed0041e9470cec3bedcb799e90bdbb31192083ff0344 +QIUTy = 00f9c6122927fb824246d1dc1ce0fde71a6849a82d41065da1d85256a9b1979bf7f286366fc8b324893ebe34e59c046007399414 +ZIUT = 00575d9e7f70a4a1c5c807b6b5d6b7330bdd764db2aa60f3bfe497e6bfe90f038fb4f6acf7ac06efc3d157c3dc907b2ae093c6a2 + +COUNT = 2 +QCAVSx = 01e4d580d5e9ad81671c6cd662d5569bafe4d75aa4f449aed56bd800619520c9f32c4e230c4d91b1c411f9086d5291ba137014a2 +QCAVSy = 000c8ffb42392ff397bbd467972f3ed251d5a079965da0b1d2a3cc16c31d255dce9886937b2dc941eab0d8be8bbcd15aa6ed96d6 +dIUT = 006cb17c3fc21ab48e5c3717c791118d4761e2c51986bf147942554dc5a18bf9bb6c67bdbba908a1e8ba8e7790f59a397134f683 +QIUTx = 002b890418afc5797c9746a44ca059367ae0663bcf058156860c613ee05e11da3f2f799c70a68fe72fd5dac2469daa18107029de +QIUTy = 01356904b197bf9e0657f4349d252bbb375c66206fc0d8312599bdbefee8608ec948dce486807baa535ed06adac9c797634711ab +ZIUT = 00ce87aa5e7700384df59d3f1075d282c1aa511391c42ef609b8de1264eca8f7737df91565c73ee884ea882d47c56d979141f0f2 + +COUNT = 3 +QCAVSx = 00b7d19354cadcc94708267aed8b23e484e32a03814b026a800f5ba01e9204c43052e4d47c6fcd92329654e0e9015b012f79344a +QCAVSy = 017995c15796c5ae93e0a207a2707004fbb1a49a0d47fd404f12d57849d8397cd4d2c6d2b4b90f864403d4acd16a32b7ff4877b4 +dIUT = 0011d43bc08da9ce5defc94b4ef90d9324de080347ff4df86645d325603a2dffd28ecaf0775ec53caf5a554eaf8b68487df88654 +QIUTx = 01257b6abd470d294b59ddaedacd545dcf43808af890f576288803342fc61eb396f560af74342e10bb94d224c24d8e5900e5b972 +QIUTy = 01dccad97ecef4387a1cf512b16dd5bc7ab615fbc5087ac19d5fc2762f615b4904ea39343bbb185db64a19f7f70ecf0d557b15e8 +ZIUT = 00691dd6b5177702d6a0b1f8b07f3b018478680de7ee079272ff75659335c96afcea7650caa01f996aa37946b78e14a83e579fb4 + +COUNT = 4 +QCAVSx = 00f2a11ccd3a53c95ea98f3144fb77d4a684f9a1f423eb81e3a8bfbe22b680f21870f58caeb6946c6b3b873699cffd314063f408 +QCAVSy = 00fdf26eede6cba7248240720906ce076cc4322d18bc7683d2240ba68476ce79022780b2fa54e0f7c76528b77fa631fe5abb5b95 +dIUT = 000d6b259656d526777dedb5246a192f0c05c7270a3b4e64a9d6c877cd06d2962a1ac84ec2d89765f967f6044f2dfa56903107f3 +QIUTx = 0193afa13bd1e081cee5df1286fe44a293b7d1b10c290a5f2ae7be2d02736009a26d83aaaa9017a8c8bf60efa15fcead07767d48 +QIUTy = 01d02fd66a7806c4c8445fa615254ff32bb9c1d85a3904f939c1061e250d3eb6413130a2a5570994795310e96dc3aff3b8218ad3 +ZIUT = 0136f5c04cf9a56db24ad99bd286feb800aea38d44f819be1c2a9dba15c635c4e122893570233a4c5754a41499eafa39a35aa57e + +COUNT = 5 +QCAVSx = 0117449fbea6b2d5f4e8e4d39a7228424cf06f456bf3ae39bc1fb2a99e4183b716e194fc507465664d009d5bcee3a426ba932c10 +QCAVSy = 01146d32b70f09e65fcf69eb9ae66162d10bd04369de8e8187fa9c3d1b5dda26f10b469cd4925ca37e0994415757e6895e588145 +dIUT = 004bf7351b195875d01f6306ca127db8a1a5f597719c0d10e1d68f5d4855bf07605790691fcd0d8b5db137d3fc2679de75a06781 +QIUTx = 01d386645aaa48e2fd0950e6a9ace9dff62c8f5e94cdba45bd73c6be6bf7b763a2c9a807846312da3ab821c049ac0861f82337f0 +QIUTy = 002a6436ef8a1261aecc38c821da774a391fdcc7750c9437d9dfe64c823350813999f0fd4f07f1d6d98074098612bc52044249d4 +ZIUT = 004f684f9d559d16485f0023bf012006265ed81f06fbc1441334a559e5500a3f77603565013694023e0d8f44fd12dcf69eb8d654 + +COUNT = 6 +QCAVSx = 0119980f11149dee5e2c2d00561d3c26a42a5a44e874765ddda4d818ea704edbba23abed5e08be92d655d79e55c5bc54787b4dd4 +QCAVSy = 01366b3dda3e9879c4481ddc367e51c1c0541945964636d5021687c285c47d40e79ff7f0bb56a93ac560be8dcb970f58b23b10a7 +dIUT = 0069da659010345c6900fdecb31df9babedbe4253398290b34012fb134bc59147572e62a60f5cacced87b0f8d1ff7c049dfe9692 +QIUTx = 0038687019f7c219ddd9567b20f5ea1e8a50451dd40bf5b65f7b2e133de6f36e4a3f8fa2f977efe920f845d176c8a57023cc55c2 +QIUTy = 0149397fbc42bacf85c59e04535df1d52715761eea997d4ff87204866cdc3d4a54c2425ad214a7a0dd592f4a991ab768c8f404be +ZIUT = 00137894f637460a63576824536944cddb42dfe63169c84040a0345ad7516ec4f1ad00bb4de20ea6ea43824b9b0f74dfa6881cfc + +COUNT = 7 +QCAVSx = 01fa39b5d3375d43247ac9500061ebff7a0c15b8c5dfe9c751784386c981860de6e1b9584da0f42119417f32338290910a9a259e +QCAVSy = 002bdecd502ba64a6f21d08fa4250389d4270324456e9441657495c72ad760fb348325f89b7a5404a2c21c2aa07711bcf5f30412 +dIUT = 0006dfdab3ca1b2a2821cefdb5872bb95f023161ae4e2d549d0fb1f382563413584491657db101c323514832c363f636a9e69e83 +QIUTx = 003e9a9b5f282066e233870dcb00c4aed2d73a331f79d49c8d5c2d93908b0ef5e72b748814d1b8840642d75b7a9a55301b1e7c82 +QIUTy = 01085f57691e04afac6e884e2fdbd8df802f4d435bce611231ab3274761ead5e2e6a344a53f33c0fa156e3132062f72bcda3fc0c +ZIUT = 00f03b0b43a351311689eb1d3fc457013f294a7d02ad850c72e4ff9b64ce68a47beb49bc5bcbdc828534f8c8a5e13de5fe522eb0 + +COUNT = 8 +QCAVSx = 01b255d5bb75d25970301de9e0e3959a12205d511f8e64f042a01c950db471b1d6d5847f75669eeb0bf187f1559db3b22aeec096 +QCAVSy = 017e590cfa855349136198c2ddd8a5210882473c9dd591c02e202ca0404bbc9f6391d73ae011dac9965155d2650139fe2e54ec67 +dIUT = 0029b2fcb308596a975c5b4cd1e75267c5424e00774114ec2051a571b299766189fad24e92f96e3d527736ea480367bdbdd0530e +QIUTx = 014c757399be201e08afd8b4a671e7d3b6d7f8844498ab592e1bf69315347ce82dbd785d45922660d4d0d27fa2b0ac62e707fcec +QIUTy = 0098f0773d3efe9c290a992eca05875d3463f0736b2dfef4affd9ff00f96ade53399917dea074c798fc535738f0c5689a2447f86 +ZIUT = 018f55b81f15f862aed042f37433050ac61718c9939d432b2a20e12d647f99753b8dd5127cf8963247fe7e1d5ade1442229bc646 + +COUNT = 9 +QCAVSx = 00ecf7064f528fadae380cb382984811047a0d7dd9a8de8e76f8178aa60069e77a948acfa74d2c77a76851659a98197054da8d44 +QCAVSy = 00b98e13497f776072711c42c18dbfc8eb8c8523ff633af988a1f242ed3c3c565d18cf224f8751f2942e360ba16e0f5830952919 +dIUT = 001b98015c0202ea16417971a37304250839bd6a6e5d83497f7f93f0f7472a21fce4be5be776e90959dbc41a0e85ed225837e8d5 +QIUTx = 01fec09f94571614e7cd8e958ebcd7a2fcd8c248d408cdba359630545c31383922774d3b24e20591d8b41e954e16654fe85cbaca +QIUTy = 0031e0eb1dd1ce467a8b78d10d25b9de92cfdc2773831e6e28a152d02ae2a5a510994cc010462254441ea41121c0677fb4178bda +ZIUT = 002b560d1949297dc7e1bbe8ce49a595762924afcf0271e9c493c18ad5cbfcea5f3900c7b793ae5dd44f48884b0bc3b52c66e05a + +COUNT = 10 +QCAVSx = 004e05c34dac44e6e1b08cdfae6357c20db7a544dc253dff1c23d4dba871b96781b6a61638d73865dafe0a9443c3ec328857d23e +QCAVSy = 01226c427778bb224624cd215493d7a4f32a4f141979236409505d8cf58d81dfd3c793e59543a780314f3cd8ee17664dc2e4639e +dIUT = 00473bcecb137711e5e89763a40f77dbe2ea8c2509d209064e39cf905afaa901085f8e795c9b8017c9a5d0a1b96812c124a3ffbf +QIUTx = 01c8e9adc4816e6606ffff5e1a7d48a7854c35aaf055d31833f0cabde8bbc4d2458e3cd3c82a4af80745f595b3ba12f8b5c0ce90 +QIUTy = 00fc43f193b5589aee62985735e3628374dd45a86a61baaf78c21fa6e787856ea6b8b88316540571825865ce6b8578add5faa69f +ZIUT = 000b43cb539bb4bb42f195ffdbcdeb482b69301c0155a840cd381f55c465a8e57ec51d6555871537b56bf84a1544cae2b2b8eb38 + +COUNT = 11 +QCAVSx = 016f6960fd2357d2f70b5f778be5e0aa71556b9d2f4cceb14f7812da858ab872818b4610d41a8f66200b4343422227d9fddf712e +QCAVSy = 00aaf592a725e7738388896b9be9f78c1c3d6972b9f99034d02cc0f9776a9f6c2f9b7d501f75be18599b088c4c5881c66146e5b9 +dIUT = 0020dddd67134a418378baa0ddfc9111c0a2ed492b289569dd0061bf1226d235bdaa5203d3efa2bd0141d2ace27c3ae8e6daf11f +QIUTx = 0167d577b2a43cc1a7d88a6be883c28dbf48c3e1fbf21ad83e7a7e3d753fb0b6d3f80cd1376fd98be260f494757cdc063256d5b2 +QIUTy = 015ed7003b7d2bd5e0359303660add090049039cf7df396989ea18c702f704c45cf6fde7ad072d31253d1d5295e9c5d1d5c62c3b +ZIUT = 0113dd2cf8732ceb8a893e149f13d52026e5d829322d0f1233a624fd6b74d56e7e6374d70942a25152ce5073831660333fb3e070 + +COUNT = 12 +QCAVSx = 00f549c47dc8e92fecd38b5750895880e449f1e31abe0bb1eacc84298f836108e5a308ccb9578dcbd4be6177752eb231e78f011c +QCAVSy = 0093663ec3fcb54d676897bfc95db5e54ad6eea1ec7b46ca4bf3d2535839f101cb3e6d5f11b6a36bf40363c31c9f88137862674f +dIUT = 00607a5a6532177b52f23492717dd0a7b2af98e04884f77075e4604410c5044a08461ecf37c4efa3edc2cb667c84b86415936b70 +QIUTx = 000a5677ac6c00d2646054dbebfc536db0a9b351a2408a73e083ad62d182fb87cb80322c539553ecdbc213ce84c66ddf8dc1d234 +QIUTy = 01327a0a3769240fda45f94bb07361c74aa8c8d119414a7b5666e25a3ab6881975396325a77f541a1ba268012a82c5110d2a49e2 +ZIUT = 00c8e62ac25c11e86b98642e4ec7adde9d9436f9337369fb065abc9ea784f90b8b8bebae35da92185486191dd9f49370b1148ce6 + +COUNT = 13 +QCAVSx = 00411e5d4c96e35de9b541da5fac691336462c882d8e8ce4d6eb7121417e70950c4d9502f64565d5a6cfa735c90eef83c7b861e2 +QCAVSy = 0096b904e37ca1c2db59a54615627e1c3356160fe175284aadc3b2fa06ba0b30aaa07c84e64e48652e5feb303595066e0f8468f7 +dIUT = 0034da9a453711f04a0b1ea1b9af701e0dc3a55cdd585e43e3ecf41e934ecaf880ff1614dce5cc992a69addfc408dae1b09b8d05 +QIUTx = 01f7bff435547a89516d017d1bdac4cda36041a0d3dfd03258562b2e28f40cd64f6ae2b70457773f9675cffc40c021e4702b08d6 +QIUTy = 0013c59a72f0c83f5bb90a0bfee798952fb91ee329c98c4b5914f445ae7c8483767052b5f529974621545ddcd6377f5e387d573c +ZIUT = 012505746f1a40ef75f950595211ce04f87f1daffffdf8c12600a9e2994c8c1d8b19c0e0559adf9a94762cb983569de6d0d8baca + +COUNT = 14 +QCAVSx = 000fa8243f000a3398808a1f88ffc5a342968fee5c7b26a9e1ffa26efa885e74e1c562027d95db08cc15bd25a3fc11ab4dc13ca2 +QCAVSy = 00fed687c7197ff1aeb980e72a3a7c318142052c2389b0866db3b87e5c8025e79bb4f4f996fa6352ab9cb20172ef78d6ffca906f +dIUT = 003141afbba8b4d9f0cbe8297f365873196739465e3e20a89af9fdf8b01d195aa1052e6176b5fad856136b6b320eebfc08c1cd01 +QIUTx = 01805ffc576e8a45f06297b2335d03abc8adfd15ad37e76d80d3b4180d5f72efc90f3f2b036acd817f40fd49064aa25ea383c82e +QIUTy = 01f22da6b50ac5628943f05b141493cacc0f02bcdf3bffdb43582343b68615761a180bd7d1ab1ddc15f5374a8f665d13b4b91272 +ZIUT = 019a71ab576546e2351aa92b6075e8229813e6a2cb3647147b192b4597f1217223e7197d846c0d65ea0d4aa4c503bd000ba312ba + +COUNT = 15 +QCAVSx = 00be7d58043263ab2f42252d41b582d862c2b243ce18576081bd6edd2f63f0164f365cae67268d227f3944677e1c146af864b8ae +QCAVSy = 01a4bcbc6416d86597a148ca4d610ee656a00026ce6047bd9fbd40d89530196a4693ae595d69956503b9d2ab4aabe7c958a14c69 +dIUT = 004e517796cac9d7c75316eb5e68963fe6324781fab986e940200e711ddbf9882d99a620a976352e2496748cfb61dccbf6d659cc +QIUTx = 0056a452fb1d558079c3e91bf22f86884ca89788806fe7d6d6ca40b5485079d77dc43e466a71259792c65ff6ab7204066c0e67a8 +QIUTy = 01f29b723d9f7d4de6ccc2f9708079c5d30ae5d960e62a7c4f6dc98bfc95b4f531f197c39486705432594203c25147156dfd5b5c +ZIUT = 014f4b7ea93c9dd846d2228c2b6a8dfe616057232b7af845a570cb6cacf9feef2d8ef4fafb285b38e63cce0a09b4d82dbe43a390 + +COUNT = 16 +QCAVSx = 011fea58d9e36cf8ed4ef3b42f77ccea93bf542ac92141dc2c094061985f3df786d192a57bee072550b302583f0f9428301b1b76 +QCAVSy = 01b3dcc1b8a3545264427386329eb81fe992654040694781c0d8b27c1e49442b99bab93ef9666fea14d4843ee4bc5b045ac50c11 +dIUT = 001c80b64d51e8025699e7be2c4b983cfa4b7e91b112e2eca5f9d0cb7e3d4f85aff7b33a921eaa124cb7002eab62973d65e16bc9 +QIUTx = 01fd0e4eafb26c08c9f8e747d4991f468c76b4864166e37642b583db285a4bc4c33979917d9129a91cb0a75c1aee7cd4fbab73ce +QIUTy = 00468efabcf448fcce821f3de81e994d79a7d99ea989ac81fa135f7ac88b154c767909c681f7e48c00b2e66bbaeb8f8688f44672 +ZIUT = 001fe2ed30ad4143c5eeb0b7622e6aa49e4e4d51c1ddc467b3fc54215dae931be0b6b6443e716895acb6570cdc21fcbdae46e5d6 + +COUNT = 17 +QCAVSx = 00ca809340bd13354b6071d073e65b9b0d2bac82e22abfcac7e70afd9d224852f0e212976e5ec823eb8950e02bc759ecf56f79a8 +QCAVSy = 0031281e8976401aab58fa8eaf8636feb013170bcab5781be0a28d27339e9470e166c7f685f2ea9143310dca1b3ab8e1c8e60592 +dIUT = 0043c96c32cf648b036112421adbaa925cd54175abad39e5681bfc9eb4b1b649aec1c876ec1ec4610f1b3b06514a48e6ea7a4a25 +QIUTx = 00de181e81b9e7776d474694a2d124d0b876d9548f20ee3386304945d9131f90457d9b938df098b035bedaaf80ed6d979404fc70 +QIUTy = 0181a3516dbea9da97d6ececdb10f96d54469d273ab366e89a40fdcedcf1bda837d5c14bd10c0b6a2a9c8a47810125c764dd35ef +ZIUT = 01610efb48fd22261921f7484ed6382fceb6bdf28f3bc2340a175b7971b93ed5ff357ed55e5307bbf42e40a5b3fabdaed0ce19a2 + +COUNT = 18 +QCAVSx = 0074795b0a9ca070491fb54a3bc249981defbec037e4040f76656428b1538b978503f81f80ad9ef97c5e127ba51ec040584b9a20 +QCAVSy = 003ece27f3daefe7bdffdfa727b2af95af8591af946cddfe37e85643b8d179ca8b9529106f9c5f3a95a8819225f9d7d4a730fd22 +dIUT = 003636854b8ee0254bb2d0ebedc720b66b20129a21f1a4fe39118cfdd4d137dbe5e570ebe2c48a7f9ac21cff3e5adf47434697db +QIUTx = 01efc0cd1a86ce7544f25f44e63a0913c11fd6b08bc09ad8cd82f3af7e32a7a7ecacd56e25526589313879d4a7fd4382d4114e4a +QIUTy = 005a34ef7403599c2f83f3e83299524893f2418ff95d6c2fdc0a3db970e62fddcf4cda182aa78b54fd8c2e818fb1ee2dd2776763 +ZIUT = 008d990982aac8d5371b867de21e09064fef30e73321337dc24f19ad5ddb6c4ad217136b7c61e360a73fa7571d526c8f514a06d4 + +COUNT = 19 +QCAVSx = 011eb64ed4249e1195b2d1307a35a514d66d29ba6f9044f9c02b4b2d3cb3e3d4c0cdc5489cddfb96226c9ce3e36fb8ff2eef208c +QCAVSy = 0099880b0d0d43c5c579ad77ddae68f2c917f4b062ea8d777b9cdf465cbb59107e70992714e8cbfac76296d5ede99c48d38a8973 +dIUT = 004998a062a32170bb358954d2c2496da886200827fa13566836ae26e38d51926ca3d202589f7bfa27ea22d399973db6f9fde9f4 +QIUTx = 00f71590b04290b5f3cd9ba0e394a3be5a1514f45e53497f6cdedbf839728e0288135d769e4b28932c875823fe256e891997c476 +QIUTy = 009d16ba726a5a9e09103bc94a09d8079ac8edf23410c8469f79f55f3355cfb3ad703624ec6d75eceae3881da20903c71de1f5ac +ZIUT = 0155dc98729c8c1bc65eb8a3ec09135f46bfa313bf56aa3169e312db8991abda338f8ac7a75bce42884068efb7e6e625939d2b88 + +COUNT = 20 +QCAVSx = 00a15e96a776eadb8f8a0b61360335cb5017d7d97116489341e995157f1adf178e5628bad3e830bee54433119164886db5c34654 +QCAVSy = 00551ca5605e4ae0534534a0ab343d039a3ba7a1cce832c4d65e26bae7ab8e5f9c74b3d421a528e559778ab27b59aae1a916d4eb +dIUT = 005a3f805fe3c3266feb3e0bb7da6761bb117618bc57af357b53f199e6e4cbc1281975321403ea6de618ec32e86b8ca1e10d7c43 +QIUTx = 01ae460e1248504d33d67ed750f1d618e53728d55e390dfc18d94b56dbb3d3c0bdc96c92ca1eca9f44fb8a58cf36dcfcc0588cbe +QIUTy = 00f7011fc321ef6258dcfc1fdc2c0a4e54c86ec939bc9ceca6c291750c1ff540b34a418793842a2c5cab6061dbbe9b5be3fa6115 +ZIUT = 0109e85c684d027a625ec5e6df952e2f20a14ed5b092d1b1b38435251303844d230fffc53d84b923555e1e1cbebe20b5d68c3bc6 + +COUNT = 21 +QCAVSx = 016427e72bc57d26a910a6722eac2c78fba8abffccbc11a9f8377bfe213ed9ad64bde2ae8687f8ff1dfdb29b5dcecd02269828c2 +QCAVSy = 00ad4f9abc21da0d31f19659cd3b0c185581436ac08b15c0b48a7ac39eed03e0ee97e164cfaa5abc774412cbfff94a9ea2a9636a +dIUT = 0055901e9b6586b7f3372660ebcfe90249900c902d7c632a8d17fae21d3fde3037325b5775eac5a174a1ee2b3ff2bc5ce69d8cc1 +QIUTx = 00ba952233531b6a6c7ade6f338d24fc65777b5d305297e66d32cb1bc506c5bca2287d3acd33fe19653d6c88a06eca3712ce9caa +QIUTy = 00716beb14f02233630f34603e309bf6e2572f0b791dfa4c582af6a37abcdd64e8d785a95ddff59bbc6fbe1b7fc735725efcf0ba +ZIUT = 01ae814e02c4684c21dd7e58a65ec51ec68c37e59e299ce65608186c0acce08e41c8320b1941a611fe66b1921b558d7f402d0eb0 + +COUNT = 22 +QCAVSx = 012e89dccdf975851accf0294cf4bde1259c907a6d3acef69f1939b558c4d211522e4eaac613e3ac8491c93deb6d344a9f87acbe +QCAVSy = 01a52608ead09d2db123a0dc782ab20ddb793d5bb70ac95c58e62146beb62bb668fd57f92038e4585cde1f91ee8c52526afeb1b5 +dIUT = 00044ae43bd247e75afa7bd8dc28e75bdb9ddd99df56668c831454dc28f3e9a44ecfd47ba8420a286f1ef372fd29b365df9b82f1 +QIUTx = 00202694f378d70965d42828ad5f37137bf8b63cec2c0d158e5ba94cab1f8e61e5a300986ba349b3adf3efc05e65670af88cd3d6 +QIUTy = 00baf0da4aedb972f88a215dfbff64e4290fadc25da3f0d83f35e65bc4177d3025d71d8eeb9c41470f3c719e00ef1fb7552e6a89 +ZIUT = 0140e7db3f6415d884822ccc7316a329dfed177b76c0117abd722feca889bee4e14e65d26c6cc935c0e94205f05fc1a7abfb0348 + +COUNT = 23 +QCAVSx = 00aba93ae1d1552880b31f503fc4be9f91d10247f14c816015ffb2bad29ab8180e7b50a27144e01c21e63c3dafcd251308bac768 +QCAVSy = 00e4ab66e514bd02abeae1c7123788a692584ddb4a909a217fb35de66588233dadef7036ff9d9f24eba3772e2fa3037bbae63cfe +dIUT = 0056d73730753ada70fd801c749c2f1f1a61ef5bd6ecb796a9e15efe9bbe6158f669542787350f4d643bda6f3e8c6423b817b530 +QIUTx = 0025a06b71a0ae252f2f905221983ebfce21ad96121a5c0dcc5ef0d0fec301ec77ef4b915818fedcda7f3fd733c7f9e529079cb6 +QIUTy = 00026890d5303b619c7f81f60fb82b26b0b98d8f24c45cab41a44eeb3a3a312944e889b4035e04360b305043e30d0cb9041a89de +ZIUT = 002ec4deac3e83d60ad39969f2f93b49f31875831ecd51ea5c37ca48de081c0c8cc660edc53a222f3043447f9cb752763be7494a + +COUNT = 24 +QCAVSx = 00aa4eb898443cce3ed2c072d858775ac221c24e33eca6f31579663544bb33a4a068a86d13f167b65304c5f7f25f895f65b2f428 +QCAVSy = 0083cded30211b66f1adf17318b6de50d7724c0584995e068b724703ae08ed71a32b334987a7b31d6c2637152917327d37accd33 +dIUT = 0062b026d49720660cf6a4f569be98dfa108c8eba08234ae9a87f3c88b6c65934b996815322a16f9aabed13317bf7725bea5808e +QIUTx = 000f52925394cb52bc330e06390c0c0a2e10ed9797149fbcc88d80fbcaec173e24a05daef98401d5e47f3b765bedbb8246312856 +QIUTy = 013d99c1710805d5fc7db7259ac9e134b411d00d73fb0762e3d211cdc56bf7f714512d04a630c8732551ee734287476cf511e836 +ZIUT = 01c9cc05d19f96c4d233039cfbc43ab68d657bb507f46a353091fe98fc0f422a8e7593c195d326977a2be6bbd2cb44eb1fe81650 + + +[K-571] + +COUNT = 0 +QCAVSx = 03106a5c1d923a0990ea8c6008c36c366b53e5622b98464044741fbc7840284db8bbf602866c30ccbf5f9b7e59cc1d9bfcc5b970fa624da9b15f6cb336f5dda7e6b9924d5dce4543 +QCAVSy = 005c5c7bbd5a789ac4c6283deb0d0d37c4852baa57d6bc2b0ac6337feb09704c44d1b385b70cc394fa235d83e6e7111787e57d0902c0cb132a190a6e62f398511c0c2c4cd50d4570 +dIUT = 0173cd1631e18ece01b73b3572ffaa7495c4bc81f4078ae50d69cb1e338acf13469117112921166ddf2d29f3a9f8e10c67e88c9a99203a834565be76ac59126436739a6afa029cc5 +QIUTx = 03fbfbbcfba609157f68a23126d805f7c75efb19befb595e3a975e08ff46bd34c8b87b9645c0e86ea0ad915465d5c856c69bb9b722b0d17bf97ad95c4602dea17c6b512054cb22d8 +QIUTy = 071c16df71e1b71b4bd3d9938827d3959093b9db1ff86bed73944a42dcb67cc33102e28c1d0e9804a6450656f4bf33ad72ecf7bb83bd282cde4bc15d4e48064aa8ad2f02979f5f3f +ZIUT = 003198a6b5d6cce847e24348a6a6ceff7a89ed3794d7acedc4e858c80ad04a74dbc02c7038e05ab26b2a299ec92ee0d2c7e66a81872a5157fbc5d4d37ad598d6ddee995ed28a2d74 + +COUNT = 1 +QCAVSx = 0211223c4b729b206be01f8085a997e1dde5cdb27c048925a27369bcca6a3e2fbfc65637f1eceb133be749679a17b1ce58821f46bd1844a89cf0042c8043cb105e01a3fc948d2663 +QCAVSy = 02b1ec2e6e2c2375b464b0a502c5053b5b348bd08178c72c603105d0468196a4695dc267d6e109f1b1274453b6eff14ddf3783969e8825648debc216afff9258f644d77ecd9911cf +dIUT = 00937edb3aa29563d2248591c9fb448985095f913a7458315593cfce87e68fb0f1a525b7310a101176e34d45c1004538954e2044543817cab0d563df6cb0d5e8617bbba150e755e1 +QIUTx = 02363cc5624b06df1956befa597d4c757cc2b1001a3e1544d24408290f694877455ba92e56088462f0ffacbd393cf835b56b7046a15d4b724dc6c3573cb156c0df298aa8b1255cb8 +QIUTy = 0409f773b98d5edc2734d835953281b82ac0e15d902d887a7c6ba75629a37671b101d18ddfdc4193d98b18551414c49173004530f7976d27c273a73ddbb898fcb5fade9c0bb7883f +ZIUT = 00577147459262e5ad42f222827f20ed574b2118924205bcdbd339ce20cfb085d072fd70f4ca1f5768fafaeb5710f7ccbea4fc2ae5377b0cff20a889a2201739139bf788a9bf2d7d + +COUNT = 2 +QCAVSx = 004d48be599ebb1ed602472d7a87f4cd2080f44ec28855fecc3a9cdde25551787abd27cc1da7e77817e94c9c0289c005a0e36e3bcfb0d381e8cc9684b6f7dd05177f16f63f8721ca +QCAVSy = 062cf71af0a2f8e35c4d7f9312bd34a846a380f63f0dc7294c18877103357e20d1f0eeff312a993deb2a1ecfc80aea06a5b71e4f8b9cefaebcd32626919064f88af416d86e3e7af3 +dIUT = 0034099b0773f021ee0d3dd185c704b5158a94328daa09768fad5804df1da2fc067190cf1028c30237bf2a48da13abae35a25c3e6387d3993f9b568305b8bf0818ff527dd8205df4 +QIUTx = 0674dcc4f755c44fdabdc078488107bb64a460ba932c7e185484ccd27fa870031107e9955204b0630b9b4d3608d9aa931d7c766cc2e45878eb6d8cd96bdf711b2fe8b47b8d233ed5 +QIUTy = 05d96be6b7e2ba74c8032af19ca2f2b39d2fd4e8c89b156b6b25c2ea4f71f74a02ca7da2a463acd7605d5350fd16a9c9052534e7e81d648e4060a2b01c459c260cb6567da1fc5314 +ZIUT = 014662b261d0bc2168642bfa4f80c4b3fe8176f604ad3703f443ec7aaa3dcf3c5465b869a8fcea60b8f55ce7118806c5d28a04848bd961db0061209b59bc02979acce9324d7c0c31 + +COUNT = 3 +QCAVSx = 06bf252e62c9969171a9717671da0f7032e9520a497ec831f4dc776ac87e0194af99546c41d08048ea06da9235cf1369c3ea53e6b8cbb7a7fd4296354548d44edf463f77ad341b02 +QCAVSy = 0294d5f7e736dcd8990198e4e0f0b398b8ac6a87764af601596234a2e162c9c667e47eb3d987efbaeb03b5e3699a38ef953c74fb28fd7d8a4ec5a36319ccc44a19aa88201ddacbf8 +dIUT = 001547438df76fcb5e2ae6925845bbfb03b4fbe8255616ec7fbd97b48f112692219f4f1275e6d2453d5bcf3bac4106f0161b8119f487d88b5f8c8e08b3aa17b83fe01102d76392d3 +QIUTx = 0427e2dc11ee5223bd9c3d9418c79114682f91dda06e7d88c339a7e56e0dfb636b6e63fde8a381146ecb705ca202d2b73df408451763c5166066a97ff4e4f32f0b4cc942344b0b2d +QIUTy = 0760c8a388e2eea27ef6838c7d45052e38cbee2096cbe89f774774134076658df90c62c7dc0e3fde995d7a99090993009ab6c535677dbdb376f183eb5092d2cb6a8837b6bea35dcd +ZIUT = 051ec4db0622b7b1c798366453c70f959376ea3942aed2e931ff62a4019eb12ba5ff119214c8bfd8bdb66e62b562400f2d3d48a84b1b3baad3667f735ad4d0f183bdb91aaedcf1f1 + +COUNT = 4 +QCAVSx = 05701e63b01c16c4eb19938265ba134cac7316278e2f1eb40a04775448bded97e7a37d01fed8a4e0b43ff4dba21a47759ccd45bf9671dd22eec65b4aff8b8db89dfe3e490c0ac9d6 +QCAVSy = 02dd97b6415aee2b01cfeb3cd2a03578abfed9ca87be9a26d899595a87bcbd972748fa6a0be4eb557e69c6d28e2bba1580dc74e2751d7ccd918c46b4be6875a4e4c290d959c23c12 +dIUT = 00c7b4252ca9b192c5feaa9a210fd84e2e48320271f10f67ea9eb30b0de8086d59dae04259fd12b086d890e22d45d27d7c8455dcf7ada796e35e3a3138342cc736bc3ed3781c4119 +QIUTx = 0325623838e8b18d81b68060734254eb02b8ebb2264556fc9850c36d3035449aa764f351dbaf7bbca9b9adb11f27cc88a1ac6fb71aa10ef8d0d09392b0ca7eaa7a5cc14078cc18bb +QIUTy = 0098fc7656d9de3a51923dba290ecbe413ef8d951f24e9248cb552309f97127fb9429ecf6dd07b6de894e16ab60e33b4ee73024ccbe866de5e17f1b478dc7727a1bb42371820b12d +ZIUT = 05b355eb5c47d8027b6c5301d2463b99c636db207792e2975ab1a53c1cbb131280288432a79a3b47271d6a2bd777298baf8a675f66be9dc72c3588d299df8b52e7840322b43c2071 + +COUNT = 5 +QCAVSx = 032fa1816fd2317c16b5b19a25d46fa5e45ab15ee9f2b1d1274c2a06023994db309fad56f60b3ce57f32dfc7d045a84b7d805232be34c7e759514c30a25207ba800215b2060f04c2 +QCAVSy = 041469593d5748072b9ac8fde023095289bcdf65ab1bfc0856f83e9ae06c897303bd16f5e45823d65fec8310fd4332b65cff47a799af4f7c8638e2d7f85948c43f10534c980ccb62 +dIUT = 0066cc51980d3851b488c2c181496c83505fb957b1ec4a84df1e105e30d002bcb978b6d0bdc3b7644ed3dfbc33ca6bfe4362cd8cc541740b0de8cf2edcce4592e34fa11ac26ec922 +QIUTx = 0771fa29e5930d6dfd36d3a9e7159675fd23d0b5e1fd9ae6454aca9e8127f1e7e3f5322b5c16b095573b3266d08f0dc33043ffb3d7b08e4e052ed3f0349a329025ea6ff3e1668547 +QIUTy = 022f994f9974692dbb6e58cc7ae5f90652ee231e0a3961569dc646d114522a3777410c1b352d668079f80010bb540e4c28408665810fe61fd60e70d30c688eab8fde04364dee5c9b +ZIUT = 052bd78bf1326c6d91840a351d4874d36b147139882356c595b8607f9998773092a99adf70adeed19e122d4d2fec16285f000161145135d96355cba039a96335e7716724c249f88b + +COUNT = 6 +QCAVSx = 03e63dd4c98c151361c9902b763ae32f2d6de75953fa3d6838c1d613d448fca73bf302d30212a96d32b9549e17c5cf395c565191f6a22dac4da7c1e1a9d9bae86ebfb72c82ea199a +QCAVSy = 041609ab9c12c15e5127005ebeff6fd1f73b6912ed070af87f5ffc21df903dde1d715582dd2f699040200045cdba9ecd758ac4d084d4c8d78219f6fad94d341ad77daccdabb54a2b +dIUT = 01990d15fa2cc90e783d432201784bab56b6d29d1f2665a76cd013eb96f6300ed8f762b78a5596ac7e8c1e76167f107c20443b1ac732101e9f0aca12551a536d152df2b3db0f20de +QIUTx = 076c3d72f0e715f2491bc9d99278a8ef3c390b3a96e9997b37e5b7bd8a5f07af68f8e0ee3892b63ff112a73a849f0e84a782d4fb426eb5f2f15adacce9e5476a6daccf3a7fa9a291 +QIUTy = 0540a763823599e0c86027bacc8cbb30e3a2467276fc4f7e5fd4ed385dfc6f883fed7bca69df21a0668b55ebd292da8fd6356a3ec5cd1c762c01473aa067004cacedad564fe06910 +ZIUT = 0226c28e5a6bc735935f9df2c1b02d096d4dee41ffb95a67905aab8de1b2d8c66e2bb471293091438d3f05df7e48003e58a958b72f839f7f2e2c54287fa3cadcd41a2542ae4ec03a + +COUNT = 7 +QCAVSx = 06f91a7ce11ba9bf2de1fe070f9dc843bb717c306d9c63b5078d2a11323f20c9c0d7b7743d311ddacdcf5dd00f498b199672c78ae25e6864d62bdc16935d6fb8dad2082d3676ebf3 +QCAVSy = 04593c5bad12c3d655c6611c7ca9711f9e32a28fee54b3b8243962a3c55d41f2c185e4c58b7a2998e978021b95b724635daccbd7fc30d20720797bc291362c55b024acb2bdcf3d59 +dIUT = 002b0937e731f59ddddf0e94fba92bb1a6ceb819e7659bcf6edd4b4af49c2ef25c5b6039256f928363e18404b1653d3998054c2c25a3f83a0c5548a139e3e6a180756746cd34ee29 +QIUTx = 0270c4c00de2709010c7cf047a0ce69b87f41dca48d35b71fba4b258886d73ae42defb8653951c1bd3eb4ce0e6175a946c67afa67753475c51fd525b0fd9f5a26dafca319faa5e15 +QIUTy = 06680bbdc281505f5d3fbe29744a999e07ff612576993f6f8be3113db1ee6cf23799867bbc80a140376a9b6327451f98bf8fd1db46f9d9cc05e88704d5712d4567e1df40d39e99ef +ZIUT = 051a3deb052d3e99bb6ab6c6b284db2c998e9bee543e02e57f1b13fe9fafbfe53a89658c58eb947dbd178aea2f6cb28e305c9867bd65bb26f71793f90c984ca11113e1a8dbc8f7d1 + +COUNT = 8 +QCAVSx = 05ab2a7f10ac89f98c409580abc11ad90c93360e6ab282920b59d316ca9f2b23aeb50876cb1bcbe8ee9ae6b5533fdcd11ad4f86d8918d66389da87c98bf1d6323bd0947d8099083b +QCAVSy = 0689e1947276791dcb9527183e32a08072b7e03dcad175fe3cfd7beefc848dcef483380c6005411385c7027c9a52b60a6e537a875380d25bc47c7bf2364dd68a66f21d0f57866a42 +dIUT = 01cd41cff762402a834e7e0ab908fc54940f697b50022a4dfed8cf0b13d7e0ee523fbf33ee9693895f918d94e15b084655d61b2294ca51c4123fe5e0868e9d0d1cac2138f0577a17 +QIUTx = 0610797bbc6d9131180ae54ab66e6780849258369741470e076cf05e0785bb4e7900b908d38d8dab3b9427b952add20efb758cff80aeb641c4dde1eeda5509f386d5658559609cef +QIUTy = 068d2515f425a0e3037547342f1b6ff931763f5052e536ea4f78377b5c941459c8c2201482afcf3cda7390e9e5d319451864ca03683541ab2cd77a9d88fd7a610ca845ee5cd3d498 +ZIUT = 00697c751ddbca7034fb4d3fc1b2618daf78cdae464e8332d1215020c8f896f4864c7a6f2c61a363f730f58fd3bdb4f78a90b40aeb83b4fbc1d8d37cf6a27a6f722c68a82979fa16 + +COUNT = 9 +QCAVSx = 0034091c3ac6fc5299df18f162eaf7a207fc1543aa498e7272e15a92772f57772229069456e219c9c2872bd53783b0fb1345f5e84674c4344129a314146b7030fc75197a20c588aa +QCAVSy = 049e3a3f5ee65875e1401089970638b807df97568a5995c8fe2f502473b83f58c556c5f214ed6f03ef8ece01401a2134bc041f66922fcc4e3938e0c6d302eb42200678a97139f291 +dIUT = 019dff0d72a8b042c4e92f1dae7407bf4a106cda564db7508e5a76b03130c91d5e5cbcf2f578c2e9dee43849f911d7773d4c267e282c277b731f88a6ef0eeddd520f57e743ebf965 +QIUTx = 05bb60a5fe8e3b173cf8413eaf413a3286a5a7aa378f21446c61057696012746d02d10a831f785c9c96561ffc6ad4f9ecdf4937fffd8e698408e660fe896f7ed44af6b3b42ea849f +QIUTy = 037e3a35e48aa66bd851c59f851d4a1ff334e0e589dac30986acd06d6eb8ce236f2a9688f278a14dcfe0660b5fa0e97ecfcebbf5b40d3d3f5150a5545acba6239c00419ac72dc2cc +ZIUT = 0322517da30e010aeaa2ec9bad2745d8e67f906294ecd6b1d16808be3837f79070d0e1bbbd617f4b8b031d3b51ea2acc59de408a130138c78571f8800fa907caf550d23323d1c818 + +COUNT = 10 +QCAVSx = 057b7c65bc51e87bdad37c2b4dae67fb008ce71fd3072e41b77c562d7c41748872a20bef8517ba4be89637dde98e2ba1b3b01f63940713e2823d8dab68a5cc78561de14085e4cf87 +QCAVSy = 00ba77430a5560089dfac4f68b4f34937a384dd607bcbb5fab5677a7fae09ed07cfade399e87ce9fdd9397c681aa3378ce3bc82b007f6de4f7cb96dadf55a4c8734a37f39a5c2f25 +dIUT = 01e1416d429926cabea547bb2776710a52f7130393081020312b3962195eb6ed17c6d436bc46a5b47a7aaacf8f8117fea3cafa16665cc1845b0ec94faf687579b1c116ba183e825f +QIUTx = 065660a58688a16588a9c16b8272040a30afe3150630676023fe165686dfbda64fc85995ddc18c9c5b029bffbd4dffa8f62989c639a68623eca78009cb088ee1cb42c4855b79d302 +QIUTy = 0492c3867f137bf2787a7ab0568d3079b8d9a1e0b0ba5d29d0c7ba616d0bb27725da2ca6bc67bf084fab52599ed42b0ef48743423cbc6f4135692c309ae2630cc4a5390be93f274b +ZIUT = 000911ec1cf82a22c849b401dfe56453a06f4af32644ea8b63135b68a979236d05968eeadca7f0cd339d295cc58967a7f38cfad6e947a71295733e42ca3c1ba9b4ff6195607bb530 + +COUNT = 11 +QCAVSx = 06fa7477edec5f1e742881f8d7b2af56375113e992b797fd387eb5b53c33c6ba7236417b2c7e6e346267f1b8c6d7857d6e08f9a60e86de23da4b368424fb003f96b4c89f5d244a74 +QCAVSy = 073e1fedf62e8c81283622b53eb2cdb27b64c3c1dd78da0c90dd6c3c776ad146302e43aba541379bc8f3bddc2e19ff15d96664ce2d09eb6fb5b13848a82b31b452d8e84da3b85318 +dIUT = 0196363eef1a0e5be97d8f7601fe40ff4010f4949f016908a906ed5cdaf1221d3a593b3a4676beafd1fa14bc0f7c533b17086f207f9c484cfc2fbc3db2be4123a8e86f3b4911cce3 +QIUTx = 01b12e38914ee0075a888d6d61cdc7570c511d90a9e3a0e2738c3a9981ab9aba9a6c61460bad079a28429a5207d2c801af2fdceda366440a11686765e9ba77f7a6bc55012d4c9510 +QIUTy = 070ede5877665fd636adcfd07220d745ed7ac0a9b0202159f450c9f6c1b837192a69ee6ad955327eb9cd326a0588b59723db4e8fd258b11db888a53eb14f2be08512688329059892 +ZIUT = 0724c979affb3ab8d307529759bae5fa67319d441851e5817fef014350e3014e068428c9dac395c5e7b9e5b8877457b3e4625ef49ede4ae3626755eefc3fb3cf09c23e8a5a9f8c25 + +COUNT = 12 +QCAVSx = 018bb6cbfcbfbaed468564b368f0b0abc3fbca47dcc19f2c846bfa287370e1b912f6b70e08519f577f0cac325b79fd66b6b23aa1e2ae262bcd2e7a8b2c2d98d9ed77a54c7295f98d +QCAVSy = 05be9bbd91772bb42266aba9c893e56670cfb66cafbe4401ca2cb5765b469504848597c7f446e99814746787158a83ebf8e3796857363a8e04f8742a09d7eca16386d60fd7c858df +dIUT = 00a19a0edf508347f4402cecbce127dc6410b1967d3f89e6b3ba08b48aad08cd6ca5e5d1228cdcc41a1c380f2ae9052d73db7550e7a3c1d857056c98947f5b2c71c33c4eebc1210c +QIUTx = 0629f70558308708e6929b1ad0fe3128a8af7f96591b47cb8ea2c3454120a6d393ed989d13231c661966a378b967efa64d3c0938e9c0b8b16c99d7349bdd59e2d44804f8fee1fb47 +QIUTy = 06a5e50fd5024d8953e32242823250e998ca602b52599405129735a874e833b3bd73d7a9dc53adea092ba8d24207f5ea5657a29919b88a6d63fd0a943b56dde4c8478481b57723e4 +ZIUT = 005a526588a3a2ce08b20925e83987eb0a1e68f997102df7f9af83823ac8e06abbd29c04cb1f974ba9c9ac49b48b5af37679a39b532d359cdec3d41b3f80a1ee12c80276256b738d + +COUNT = 13 +QCAVSx = 032184b6863e2cb5bc71baff5b6b57a10594831cc11a9e5eedec4804e2016e3dd064cffd12a1eea0f6932911ded345ace5c1ff250b9648d93b953386dae9b5628c3c62527b890519 +QCAVSy = 07f783e0341a871e6256da349ebb539f88767d7dac1511e3c3e4d43b0fd31d5dd2c2f0f176eac544a871f42b983f8fba4df67ab6a239b7df997226304b73165d962f4e1d2d18de9f +dIUT = 004cac3fcc00734442cdd80eaf824412c20ea9eeb03d43b999d49de61873602020a2b3c47965f6f453b91b7a2c1d93e13a89544533e35a122cfc8612c8690b69bb7a557875f960b2 +QIUTx = 03e211c3b4986927c4388d1680cb4770dee6c78266724582c66ccc50c6cb28239474d521facc7206af6bb29cced733edbbc0d20b9264ce63d9437188e3d31c0e0bc3e9f9d88429e4 +QIUTy = 037a7c59012a82d59cc1e2f0fd4fd751e5737acb77f2a0799e0af38996ab5e11090a6396cc480e6f2aabd8fad44611691e5822115fd49d2a000c9b49d1f4964e24d43fbb81fa879f +ZIUT = 049db68dc9fb4cfbad8247ca4fe7c573c0640abead8f319194d665ecaf4f04b61f84f5df0d8a6386f6df04ca1a685a7394567eba5deb9f739b1e623ed6507021593f0e22e2dfc3f6 + +COUNT = 14 +QCAVSx = 071e167e59e2a709ebf4be3d83fb9dc69ed749e3ab8a54e202c35f8d45deaa2bda86c2afa1b0a04754d18898fcdd9b185f1d8ba2e180a47ac291bb4aad8f997f73b1423bcd7e9b92 +QCAVSy = 057119085bc7cb2023d23f88101420f9f508f0db94f8dfbedd5cbe88cec80a9dc708df6cccdf815d75b146280d7cd2eb97cf1a7dd550be523824f932a777679f2ee9f66d4258dda6 +dIUT = 00d514144d4548bcfcbcf57009f7e8ee104b15456f491826bdfd9ba67e871fdbd8fc8490ecbcb269091fc7529e5e55713a81de20c0ed01ecb3159ae61424bdbc5653732587d1e94f +QIUTx = 03ee5f877b737dae40baf91e0cc581dfe8d291f8c451d5bfc0b690df7025875d9569d52021b3b6890e01a2ba95899e2928a902cd5dc8143c07ea26749a9c94068b5c34c596b0943e +QIUTy = 058e1ba516a818cae9b37086287e088083e2b421fef0b59ba816ab031375d09d7af7d57866744687be3bb41ce2276d3a38f97bbb9fb59f24a92f0085b04ee5ed1ac0efa671394f73 +ZIUT = 0343c45daab4f91e02ef9bd6e1cd157b00ab0ab0a3e0d9734918a1d896cdf7cc1212bf74d7bb9bf96bd4abf42df325756c407217f44a5950c2b66af820692742ed7ebe14e48d2d88 + +COUNT = 15 +QCAVSx = 074f1a7b5cfb0eeef1e15e63512c73188dafbe88e8e9c42073b2b652b9f028214f0bec79142d8889416abf7a83e29f479e7bc3ca657ef0a10c2ea3ade3117c0d369dacc2339d1c12 +QCAVSy = 00e8992a54076753029f2c0e9d8c166e6ba84896a4785ffff598c4823e5461ff005490bb7fb6d878ac34f427fd9db48cbdf12eb9826d68fd2cf171d4d61c3f275d44947d4df4c752 +dIUT = 00ccc6dca5a985583ce00812c3d07822f6341c79d78c16b2e7ae4bbf5bffac1acd9deab678193f8f89b0e2aae52e30311444dd11253f96d62db3abfb17e423f0ddf0e991081154c3 +QIUTx = 03826215343cfd4ad968d572bab2dee2279f9e8effa0ff80b0df5dd2ea822b502274e507c87d2429dd8bbdba6eb8ab433b1ee1cad3a97c7d244194fd9a43f3e1ff33144e2db80864 +QIUTy = 070f4508ae391ce24154b38873af0082d95895ac92fd1aa321ba93beef404a63f7b1afa1feec997885523a6688ada94dd45eb32ca7f1bb87e63c4de97493196c3b53cf83d218dc37 +ZIUT = 04a565cb3e15236a7f6c413afeb419c082427b10a6d07ff87e81740716433c06b3254414381e4ff9860340dd6201ab6621d162cd12047a5515ab1d65f20c97eb3d7132642f8ad58a + +COUNT = 16 +QCAVSx = 004b54b3cefd415f5eaaca4ae4e5dacfbce20cba1932a2f50549bcd31630017ad21475df154ff37be13ca61a4c60336b33d0ffc762aa9e9e9fc6e6fd17250b5e4022b55141d23fbf +QCAVSy = 056f7c8d65c568de95bd1664fff71429ec738987697f217de5adf36d14a80b6fe585e4685e03c81838abedfdc05a1e01407af4ab989fc1d1273ba8a182c461856d5effe705d7dfe5 +dIUT = 01886213658bd17e7dc334dd8003926a447c34a197ee5d6d0bbc46e85ec1cfa6802858d1c367276ca572ba27aa7a5d1e216902416b48af6e4277945e465d7d840dff1438543caa46 +QIUTx = 047f6cc42107c40c168dc679a864f969b53f756257113b7502796efa54cdcce704b9344ee4bf964752d68910262bd26ab6b347084404b28306ca3425f29894ce6fd4293c5973522f +QIUTy = 060cfdb5467675a789923be973c6645dbe26d00a39d4e81255217291a3882cfa8f91f4aa8214d3524c95ef6a24e47b3b9d0ef55f670756ae4a4d9c65f075f4170b2d18aafbca0265 +ZIUT = 047265831f1f589b5f30806e2fb80aa7844cbf32b6993384beaac7d992b327b97dfd0bb89ca09e711507e846ed4ad003e7115fa8843b23d38f320e43b5eb506bde48fbd7af4983b9 + +COUNT = 17 +QCAVSx = 07ec71bea081190a9c4cdff809ed2b65a77800cd1b3beffd1e4004d126ac352d24235c797a5a567daef7393d276638132ea7f0f61e550dc251d341f66102f96c2abf7ee37c0fc9ed +QCAVSy = 00efc2ac8705b2f9c9c06a910a304c42b1ad53101aeb0d146319dc24815c7cc1983b1cad91d5f9c6d5eef1677a1f2d2bdd75a1fb4c5796a4c56964aa3e43f3da26c737edd9cb0910 +dIUT = 004c0dd3715e8888dc2222069e7f611801685140303e16b8b443433d5e18a4b1803d5680416aebda7ae7e9449154be346a7dcb36c1db22744673fb3b245e58440787ed3dec6d3db5 +QIUTx = 02fb241eb2c28a1b0675b5760fe5663efa603eb0590842f455973f0573e148a47e63f97e8df9a570b0655d5afc42019fe95fe44fdb02a68271d82df580010f91dff0cb3d9bda8992 +QIUTy = 033f93a9dc39d87403b6a94dc0632dec6757842d0aaf8ad8c41ebb637058bfc11c19a3a9abddf204201ef4f96fe9629233a5070a08794d14470091e30cdd876aaf65407627233234 +ZIUT = 059b62c25c96955b8fb4deddcf90ebe6845ee71ea357739273d6d67f21a0c47d154add9d5d4d2b657fe1988ad614b0b4902faa92fe999abd754ad33cd6b92fe2f6a68a6f2c1eeb27 + +COUNT = 18 +QCAVSx = 06708686b4f5ad2fec457aad5ac4a3dc4867a477eb54fc0d493511b5561ea151dd4caf5d4311983500b48c8043af09e3f4042d5a07ebf050a4e801daeef3317be093955020452b29 +QCAVSy = 0525c8682583b55f7ecec59b920846f75d11d021e9ffb20018639f6ab93022472c192d398e150cdc630a11fcf942e5d238cd6c14b30f44a24d2f843ec5d135ddc7abda56047abc21 +dIUT = 007d54194fc226cc39f640d3d17b9b95b70b51f98ad5ca1991566108d839e377e21ba48cbf441530b3341ddc61b0a58141aaa66530241fa529505d70804b2560c5be481310b9962d +QIUTx = 02ed5f3a2efa4ab0f9db5fced7b1300de4d457a9ad0827457e5e1c4bc15ebd183775de4b73c1f820dd4033366100e48b4164d04e9fb6cf1a4bdb55122a86005fbd0bd2cddbc95fa7 +QIUTy = 0327fe654ef68563cc8888acca85163c2b154fb70b0f4a2b58c36388a0c25f80a4c887977d46000dc4d86e95cfd8f9065c00eb28653c8fb477bbb5c63dd47b83ca5e0f871e9eed3d +ZIUT = 02777c72853b76b29f69d3aa27a1659789a025af0633d833b22b57bf328d231ebd128bf96a4c8a7ffd2ee7a51e5ebb7a8e5bca20e4ad49671a2123dfbc0d6c40594e04765186de06 + +COUNT = 19 +QCAVSx = 07ce7674403dfc62895d71e2ab587ce735f279f12f7df3161335be43fc2908ea736f6f58b932d793aff66f332735d4d38f05cb03cf275ca0e00da1f57381e08bfeb5017877342272 +QCAVSy = 07d6649f3d91e7bf5f8de611bd971818106df2e37935bb464cd9e7469629c6ae7e7f2b2240276cb0eedb7a26d0c7d377f4009a1dd48a793cc993fb0d4a04db1dbad4493304bc5c0e +dIUT = 010740b958285242045cd5358d7ff9232b7d7d413af7e205c285f88492ef27a2fb850e0567ec24c480c75ad32f70342025c86267dbe4ff80a2c509e5b9a45130e99e7c7cc8cc6ece +QIUTx = 03f3f585cafd46a663b6cf8b8323ef9159d5195d3118f3edf38732ca0ff73b2d065d9e69ae1e3978b2ce6dc61500f7b8bbf6f6a70b47bb64cc4fd195bba6ac932b70beafe174148a +QIUTy = 00b1566fe619f2cc00aba05e24a6cccbc91338b2eef553da0d477d6c8c0ac4c656e134dbcf31ffb15c67d589bd2918f1174909e5428c71c90e38c4e11b56236abfa1de6a8579eb4d +ZIUT = 02c2ec1632e83416182a9a438f7360b88061bab84f5bded3dd8a0c87baf44507df94fdcf99353b107e61cfcfc8af071b3aa8cec7b34a542bf2ab8ea0bd9db67d66b428c9a6c14458 + +COUNT = 20 +QCAVSx = 0483ad7382e348afc7f271d50d8d39b814b7d6dc0c562a6ba556568045bd2d620906ab1106f9137ff725892e8436a8cd7b88892a32f19ab269e2ad30d7f0ec00e3a052fbbc466307 +QCAVSy = 041cc4b0f195dc73c4a8e10605f2a382923abd2381f24e4abbd401e087c50d18f6dab01a25db7e89dfff68c663494fb4d087a816b85444d882bec2ac25e42fde78ebcca79a6fddf0 +dIUT = 00c85e5d2ded5bc3b6b553fe0a02311b72bc5cdc8e96df179ce57511c26ac9e873fc1f76cdde9a7d8e52a7e9be5c7753620331e8977a98902b48ae9899ce8a6a6636611276ae2383 +QIUTx = 0289aa5209fe7b1ad7b9c5e0e630ba5e02929ea1b1f114d30a0648012bf029e066453f2d28e1d503665dd0833f0ba37e4583b434dd9956100a1ae6e54f96d9347d806741d3a76e31 +QIUTy = 033afe87b29edef447ff5a02e63f64905b5f53ac856cfd7755ad542812ecdd568e8ae1f9d32fea0f02018dcfd0e16d6a6a2797b7e3dc855bfdb6b0d0b2525e143678d539bf8c0672 +ZIUT = 07e1d202a54d34020939f7aed56931f21b206761e4fc79b9a7b320f81077be322ae7809446b5b3ea701618ecdb0a1796ab80407a281bdbcb4d580131b61f8743bfef7a4d9c5941f1 + +COUNT = 21 +QCAVSx = 07a5e8eb4968497a11b90c60e13d5f3c61c6868573a6b6db7c208a856d54e74f4368e28100b9e0bf49fc3104e146fbda784623a36d9f01f23ebadfab04d7f48ff66506c698bedd11 +QCAVSy = 013db968fc7cd338cb8e3042a171fa306f9ab6f6c865ddc5ba5fe994a30d8fc1fa127191f08e4e14b9aa086a52fbcaa46d22107fd6df53108b53fe0bb96bc974c03a8c6528f9792d +dIUT = 0053a48cfda8ee232cea3549927b22f375d6096560025e213161d43eed02d07365d9ede7c93d457ea51ea2369e87463eddbf25a06bb1f080fb4763074a8283dd3d69f1de865295e3 +QIUTx = 04790f9db600b9a0a57e03d274a3d23a55aa0d86b2d6fa07fafe3c9d4c3393771dde89c70a6470a31bad105c21d4844cd7bfc3b59738f9d6c528c414d524f88e0c862e4e17aff454 +QIUTy = 05dc12db04e2489db8a46cdeff9f8d9d2e00d024f656c781eb4d2db167624b3a70addaaa158ca00601d4cad065917bebe766912faba9987fcc5fc8a78dd21643aa650e6a4a7e2061 +ZIUT = 07f49ee5d822b17e3f1ec9946fad8d0a0a6b327242afe675806b3e6b7541745e21cd1b70df926af057a9f8deae4cb9a1edc782014426152e8aa4cf6a4080dad4678dc8ff0d9e1af9 + +COUNT = 22 +QCAVSx = 013caaf8ce2e2321cf256f2b64aa89add6968c298624a22bd38ef94deb3a70ea44ce87a948ea56bf0ee9407134f8c97b17b1f54561ff7747e3f6b656f80d60778d05b8c4cbbbcf3c +QCAVSy = 0047a2dca3eb6754b0a9fd16b081fca497b29dd2ec9e6a7596d06b059c2ab18900fcc58715247276e390df1dbab26ba81235a4dc6738237fcefd3812b7ab436c926c50c600e6e907 +dIUT = 015a5e5946fe2c9cae6d412c618c1bd07724432b2f1dedb1327d8a99ce830e6b030f4025c14b4e3d1912ea9a78290a1cfc7d0189a30c614010c873146a182f639193a2912edcd04a +QIUTx = 03140887e87039797869f5d9db50d91ba69d0bfdc5a677c700610562f680d951a5e0517cb2f966367d48e423b046db4e68bc1c4b3183dc80bee126e89014994cdf83c4312a3e5ea7 +QIUTy = 07b8d706962cb192f0ed14c4da710d1b1b073fd8ca497a94379a7454c9c3d4ce6e5fd2e6386852a77c5435abb23536dcc83986cedd4512752f295ca500f055f462763c29fb678caa +ZIUT = 058cd5608dd9d64d4d822baeca123358a4d7e56d3777ecdf569a149c2f85ed35479eaeaababd0b026dc3b56aedafedfc8491040413f85b669d8512a3ef7bc8fe8706b5c7585370aa + +COUNT = 23 +QCAVSx = 0743b3c965a83ee9f6bdb9901a1dcc1f78196544a88b9cf8117f89ed1574e5c5d804fc451112c257877e12b0a66c693c6655c12bba4535d99d62405f4a9dcebc056d8b7cbbada120 +QCAVSy = 03efa58aa3a8c6a24f43c5581fec041442ae955275dbc1d46d10156059d2637b9a82994b024a247d2a66724ba90d02787b168b1fa1f4b6749645406c438f8d316d670f1e0d8b0301 +dIUT = 00bd58e19c05df7e99bd962070e0b4c7576042858447e023b41bb29745a89a4874dfe325a15d38d2fb9e870f419dd15f4aaac65dbbc5ac2c540f57cdb0e45bc86621726d922d14aa +QIUTx = 01e4b2a277ddd78f2f119c05b6ae1ea7a2a744961e08940f6569ee8808c53bc7a12138064ed5c8c222eef2774e70c28bce3a6c05f3a654e121006ab62bc94381d01ca0d1b08234d6 +QIUTy = 07eed8cd7a8a3549b0d9ef8786879efdc9c0f4ce90b3991a33cbbb1d3704db93513138b19a50ecac880e578de21046f03a200048180884bc42cf9aafe58cc1eaf536d6d25f1541d8 +ZIUT = 03bf7a59bbdd688682c45664d20c19cb2d24fcca6772120cbeed1cde762d449ebf22855627eb6b2be6e7f7c0f0034d02686f2a4488549f8cb198e02b46972bcb88914bea66dd6400 + +COUNT = 24 +QCAVSx = 0722f1e7a0607750dae2d62c5d3d470f006c3254558eaaa294eeedbca8d30bf4abb955deb62e4179925f6cbadf3bf8776f15dcae3556addf797105a77b7f6f71206ca0e6ea91e188 +QCAVSy = 035d108ca0d620cab96b7cbf617d1b5ac06e37792629886564fd147c58e55e423344ff4f1fba4af0fe34152b384b7685caad15d3bc270e43422ad874e71e408a71a6c8a90d2ad978 +dIUT = 011463070fcb4a28be4e2a67c29c7fa48a4c585a307405d06a1a0678e909dd6eafb898662cdd8bcc019deb14e5d92d172ba1c438ef0f64d80107c7e8e68029f4e0aa814a1099ca38 +QIUTx = 00939398e463886f0dbb48a74f573a1215000668e10b57989dc300b2f9a8c08cd43d6cbb7f46ec77c1c294b23f86299027d2b93fd6eb18210a8230bf46e3921f182c9260c30847ab +QIUTy = 03d48ec633b9da1650ea762656b3e31f26aec07e7ca6aafc1ed7cb466eaaf3993e0467048c967bb1e9b4ae073a230c1e2f74e2e618666cf56a06f2b65ec3955b6ffbb06a908cf616 +ZIUT = 06d410e9ba6b8b87b00d0f676de8ba27f6afe7e308c2e992f318fc14cba0a447316ad86e8e6c1d3345d8e4035735232c2c597e760b8800a89a521567b09408f9c7be279c137c963f + + +[B-163] + +COUNT = 0 +QCAVSx = 00000003a647ba32dac71ec6780b0638a70cd24fc3bd4c8e +QCAVSy = 00000002e69e961541844a4aa33769a7bce710f6640a560c +dIUT = 00000003edae173de8fa0cf0412d6a7bdc81fdbd0617adf8 +QIUTx = 000000035466701d0b0030d098b6ed2343d355c24c907271 +QIUTy = 00000000d8bc02f341d261860dfb65f0cb7f0b488d8296cc +ZIUT = 0100fb42d177ffe6c31378e2e04e0da7376ffe8765 + +COUNT = 1 +QCAVSx = 00000001282898936486dc2e3cd1585f32d5544264e191e4 +QCAVSy = 00000005e9e98bb7499bf895f77f8fc8301d6e1c7a9f6191 +dIUT = 0000000178dcc8216425d4bf71c8f2925dd1af86dc04a268 +QIUTx = 000000011e49430cdd06f2e765b8f2cc067cd424e2e75485 +QIUTy = 0000000083af15b22cd7dfd1dff7396bf3f3038f50524991 +ZIUT = 0681c9e59eb7eba769f5b6f2b06ddf1efd12997995 + +COUNT = 2 +QCAVSx = 00000005874fcc8c484c014173102dcb70c624ee6108d31d +QCAVSy = 0000000049693f4edc714b0d0baa5bfc5d8bc6ac04089de4 +dIUT = 00000003ea1e79e52a070898d6a3c4e748e95ac8710d77f6 +QIUTx = 0000000137860ba3458af13c22af8225f561e01331cd87a8 +QIUTy = 00000007720356e15dc73f9fee7a1c021feca97cd41204e3 +ZIUT = 01e0749a21fc508f76dade85435bbbe12c448bd8c4 + +COUNT = 3 +QCAVSx = 000000003748d798f140268f1e718b3b23aa2acc0333c074 +QCAVSy = 00000000c42a927ab579696123095575ac949b07a7d1d4bc +dIUT = 00000001ad5ca9abc8bcdcc482995ad1a977e4727150bb36 +QIUTx = 000000025ae78311b0fcf369566a319f89849546aeaec305 +QIUTy = 0000000640eb0fdf520480afbeb9f2674feb1d6df482d7f5 +ZIUT = 0320398f7acf791e0d602d7b94742cce58e9fddbac + +COUNT = 4 +QCAVSx = 0000000380db3df2b1c0154a8e8cb304aecd581d35f315cd +QCAVSy = 000000071534ec2e8b357d9e069d7f1fa98bd44ed8b06826 +dIUT = 00000002d28a8aa1d89fa3e5e596ffd1808254ee17a0d0fa +QIUTx = 00000006e6c52494ab63c89c9788556f716677f3b48042a0 +QIUTy = 00000004e98258b9c56f02d3edb4ca5b0aeeaa9daaa6fe0f +ZIUT = 03e4de43de85223d818e5be6549c29cdfa1afe1782 + +COUNT = 5 +QCAVSx = 0000000136e0d05b4f398b827e198046148b2f41573fc07c +QCAVSy = 0000000739934cec10572852e1f619222e2f5ec4e0fa5aa6 +dIUT = 00000002e170f7f4dc152fe4706f99d9be229e1317d82bbd +QIUTx = 00000007900dac251de8a944cf0a1bf2eb2efeee14676e9b +QIUTy = 0000000091e7df67f77622729d59b7e34b947127e7fa2e5d +ZIUT = 037b178aab014d5abab305e37deed7f4798cdb862c + +COUNT = 6 +QCAVSx = 000000076c3ae4a781673627d0e9bcb615f626a160a55dda +QCAVSy = 000000058c0ec8f2649c2ddcd9c24b643433b14d907c5903 +dIUT = 00000002923d2c802cec42def2633debdca759d59744d3e8 +QIUTx = 00000002cdcb4f91ed7d17768db80be2b3ac9e0956b1d971 +QIUTy = 000000032433f455a6cd253e91582d2f6f5a712655da1d69 +ZIUT = 00958b2aaa6061222dd248a6b9700fb6839dacdc99 + +COUNT = 7 +QCAVSx = 00000000d65f0516c1b3eed9220e59b3d049dd1153179ac5 +QCAVSy = 000000020bfe107a89a7360cd2e217534d6df298cc4bc458 +dIUT = 000000025b17bd6e4207d9fb1a3af02fd5db26af8348aeb0 +QIUTx = 00000006f6f5b1f3b18f45db4fb3777e6840fb5a5b61a914 +QIUTy = 0000000737ce14aeb24e0591585a7417b89256749f461de6 +ZIUT = 0393387e1dab35748f20d506a0e2b4dc0ee6c3ff39 + +COUNT = 8 +QCAVSx = 000000040d903ce2b30f70a6a03849b0e1758fef8887bd31 +QCAVSy = 00000004abd8bdb7c1327c99b33820dbe18ae114fb435949 +dIUT = 137e8132ad288923e64811e92298f5c0dcc95705 +QIUTx = 00000006f2cdd1d630dd731ed77f901c7b0e735515e26d4e +QIUTy = 00000001062f2f715c4d2af97bb1be8b6cfa2e3ee314253e +ZIUT = 0212358d3f8bce69b662447333b3edbbc9b2f7e805 + +COUNT = 9 +QCAVSx = 000000022ed24643f0cec68c8e4ad1aa2c4369d8aa03f594 +QCAVSy = 00000005ccca62b6dd1d316dedbd0f1d530bed6e556b3ad8 +dIUT = 00000001c48c50b7d3ecdf3b901bad0eefc3e3826e3cea9f +QIUTx = 000000019175573117dd851e6eebfd9fb1e5a884ebfefee5 +QIUTy = 00000003adf37e4ded52573fa57c8cb2bfca6c65c3674462 +ZIUT = 023472fa59846f7be07cf060cdd69a9fbb27d4fe44 + +COUNT = 10 +QCAVSx = 0000000793f4b31172eee66f2769eb305d03b5c3f7cfff8b +QCAVSy = 00000001f3ecec6bbda9bde8a4da14db3e5ff934b9835b17 +dIUT = 00000001162d9ed3a660455e8c015d1e45d1515749a3dcd2 +QIUTx = 00000004283eb0e5085d198b378fc95f6fb4c3198b4d3c78 +QIUTy = 0000000107a1168f2f47b963e4b3a9024e0c357a5ebdf92c +ZIUT = 0173a056c4c9ef6707cd23928999c4680f42b71f7c + +COUNT = 11 +QCAVSx = 00000002ea7a50834602f112f6dd0e6d25f064f9d05eff26 +QCAVSy = 00000001bf3f69d14acc8333533a88c2e8824863a47ae027 +dIUT = 000000019a1d16f4a572f3c1b51ea2ace69280e7137b8f8c +QIUTx = 00000005cede96a70f714cd68963f2d6ca236269a938f311 +QIUTy = 00000006cdadd54b6f733c80934787e28c2ccf58b1227bc0 +ZIUT = 03d34f411a297d7c990fa4a83b5f54759607f9d33f + +COUNT = 12 +QCAVSx = 00000006dd1305349e8aa08020073a0de5afc5dc1b6a62d3 +QCAVSy = 00000003497eb7bf4089ef02cd0a5dd0f86bd8798a44c56c +dIUT = 00000002efd4400dad3cfad8d1637fa9290c4b758a3015b6 +QIUTx = 0000000513131b4bcb72ef68ab043ee84fc8cb03b6d8f187 +QIUTy = 0000000120b7d5772bbb17ecb1c9e80c36f808fd54a93aae +ZIUT = 06120aed8d4c1e506710e2cfb98ca2022e642ca89f + +COUNT = 13 +QCAVSx = 00000005a0e341118e69827d6a7f8282fbf0b94400f08240 +QCAVSy = 0000000423b993d4367fbf4f6504d9e09a64123a3b53d128 +dIUT = 000000012b0d64977cfc13b48345ef7072d1a3890eafb95b +QIUTx = 00000001b9363cf48735676878d80ce1481b8588683f7444 +QIUTy = 0000000768fa7327cd7252c8f696ed4947868915ada1fb5d +ZIUT = 021a58087968c5df57afd7c343a4cfa2ee8e7073f1 + +COUNT = 14 +QCAVSx = 000000001a923d6191634306124c1e267309b07dba32decb +QCAVSy = 00000005a3517f5426a3411a727eddc29a3ec229558368d1 +dIUT = 000000033ac953803d0446b3cda4ebd071b4eb027c11bfd8 +QIUTx = 00000005c446e9896ca44cca733e9f4e5b64afddc0537211 +QIUTy = 00000006bad1b2522692f970b38be6935dc7d1c09dcd206f +ZIUT = 03da9c0879219e48c3df56174898fab9ee5b0a6bcd + +COUNT = 15 +QCAVSx = 00000002fa8baf0d6128add9b902aa181c81e24298451e2e +QCAVSy = 00000002b93d1f6913914ffe1559c7c114c631bb6b29617e +dIUT = 00000001bd79145ae7f42c6b25d1c38965ec08fd27533a7a +QIUTx = 00000000e9d8fc3a026925c8add508f920fa2e5ff5282688 +QIUTy = 00000005b7bf631259ac7d36936c130ff206d820b13bde81 +ZIUT = 05b33fe3874d32aed99919265cc0074902e538fe54 + +COUNT = 16 +QCAVSx = 0000000353e2da45ab7c4930280c3edb4ba90012d56df62f +QCAVSy = 000000026931e30b97ff5ef7bacc0de4d9490708522e3b2b +dIUT = 0000000330ca1f5ad77d7a66d87423328020c91ec79f3764 +QIUTx = 00000005ba37d36997c4f2abe603dfe042232738e82b0b3a +QIUTy = 000000073c8cd950044972a005c6f1af8e4306e0ccefb946 +ZIUT = 053dbce9826af4d290036feb46875e975b7848a9c4 + +COUNT = 17 +QCAVSx = 0000000721670884daa8cd627638ec90f3448efb0f2489ba +QCAVSy = 00000004f84a983bec6b2889c8211bf231149b5bebcc75e0 +dIUT = 00000002d23140074d6eddd5bc099b17de12afb9ddf2ecbe +QIUTx = 00000006e06cc7c30f5ed7e686c3a75a1d44257770601cb2 +QIUTy = 000000030dc414c4afb390ed467af471aa9bd2b75f32dfd8 +ZIUT = 00d49b971cab937f40908913fe259849679ca076d9 + +COUNT = 18 +QCAVSx = 00000001d6319ec2dc5c08f0261aed0231418d6dc3d0cda7 +QCAVSy = 000000038e64953f7cdac71d052e55855746b43d44181b91 +dIUT = 00000002449c1b9ff09e7a9a03b17f5ff461115f5f3f1a7f +QIUTx = 000000073f9ddddc4650933deccc9546d392a35dbbc66a76 +QIUTy = 00000004de7558dde649f72322b39e31c8e29ce6f599485e +ZIUT = 0483ad0b7f8a716273f624b8979c19126705266e4b + +COUNT = 19 +QCAVSx = 00000004f167907bf4b98e8696d81da7d2c1056efa0dc14c +QCAVSy = 00000006cb9ab65143832b9cefd5d9ce69ec4db2edd067aa +dIUT = d08b95d9a4ce724ec462cce12701fd8c3d53fdcd +QIUTx = 0000000026a770d86e1c89ba7a86aef649ba7ea86fc7d5b2 +QIUTy = 00000001db1020e0f764df54a53c23c938cec98d9a77ad1d +ZIUT = 00f69dcb547119fc9b8c454335aab184c3ada5f1c6 + +COUNT = 20 +QCAVSx = 000000079b6d14c743271402d1323603215feb3c68b14455 +QCAVSy = 00000004e3905686a538c25a02bea92f42184021b5ea2593 +dIUT = 00000003808efe6ad50d250d87192e16499ce3259428f3b8 +QIUTx = 0000000013a02e25fc927875afa557bd673f65870459e671 +QIUTy = 00000004038dbae5c5e54084708a24bc3fd072e769c12377 +ZIUT = 01bc5ee5261b2bba55b10cbaa6cc3c97b98d00ffea + +COUNT = 21 +QCAVSx = 0000000772f42d272a057de0ff926c9f94605c6675d21526 +QCAVSy = 0000000602e7e53255de9bf58c057eefb79bce431b5c3808 +dIUT = 00000002ad232a7a41e6cc2495538d87b023cdec7b6e1f23 +QIUTx = 0000000549e30780d93f796fdcf691905575d85c66453bdb +QIUTy = 00000002162a885bea31344543f5d06191369dec6e70e967 +ZIUT = 008574d838d3de87965fc1b4343fe4f078588c4ea1 + +COUNT = 22 +QCAVSx = 000000050b2429460971739a9d6d5670bc6d759e5656768b +QCAVSy = 0000000492bc2d3f638d4978e4ca58ca5a4ef19c5eccea8d +dIUT = dc99b19f3d8847875190e9588b2bbd830dbd3a95 +QIUTx = 00000000f65d984d71dcc18bf172abe4d3993ce0f7cf324c +QIUTy = 000000001b49e6a2cf1173aadac3af6c09e966f31141abd9 +ZIUT = 04579b477a92ed961cfdb2014407e88e7716452a4b + +COUNT = 23 +QCAVSx = 000000017d52116f0c95587f1b7b06c76e98d99c82dcf20c +QCAVSy = 000000024ea22bdd990bd79e63e735b21282ae1b5ea66648 +dIUT = 0000000356ab85b04d0851b8f66b4a796526d3f3e3882844 +QIUTx = 0000000776a2e1af932d74519070bfa941eaa93e9ff5e97a +QIUTy = 00000005abe9ed46245fd0146250d2a563c46ebf7acd2342 +ZIUT = 035a8c10e64403c52ef8d17c5f4dead0df81fb1f21 + +COUNT = 24 +QCAVSx = 00000003a7ea10ba1d6aa545700b40b737951a9e736dfa0c +QCAVSy = 00000004f9352fb2ac2444e928754e3655fd62e3a42564e8 +dIUT = 7a7b547550c758a9de7f06e2f38e55f5e9e44ce6 +QIUTx = 000000045952c0b517e685cab09470327f9d4b212751b049 +QIUTy = 000000044a429a6efb04bcea0240ab5805de740aa61f994e +ZIUT = 000142615e3607ac148c4de8f334be849235d01cdb + + +[B-233] + +COUNT = 0 +QCAVSx = 0000004756baddefc3dc337ab27b5452eb10affd9e31f5b55c330e90f0f686a2 +QCAVSy = 0000012a79f65232308a21c98c01555ccafc7dce15c8fed3025a760cbd6c2327 +dIUT = 0000003c3ee474ac0d0bc1df567e3c35f5f766c5332b2d6730ff0e4d8e75aedb +QIUTx = 00000061e8a9b517fd05a026ec376616229fd8639a1fa76defe5398022f9d9c8 +QIUTy = 000000706b5cb08738a94552fee584b1372fead4af79040909fcf6f50084bbfa +ZIUT = 00e9f3d8c4f1bec0f920e763ea1bb7415899f01734609e7547dc425ec946 + +COUNT = 1 +QCAVSx = 000001186a028f9a18db927f63253c203eb26aa3aba0d40b1a3abc64e47a22ad +QCAVSy = 000000cbd8b95f89e421128bc73a43c5cc254e3867096ab89d788b2ed3b90a96 +dIUT = 000000aa41a5a01a4e66a67997b0be16f56b160b0561ad07f3af2964386461d0 +QIUTx = 0000002d91402446557068c40fc075dee93916b0f1a9392e47e56b747125ae1f +QIUTy = 0000013ab0915e4acf779516826fa1dc1885a06abc5d0809c92240ccf9c3d8a4 +ZIUT = 00f1fbecfadb158d62eb1109c085124fad67a8795b58815eb396c95db4b9 + +COUNT = 2 +QCAVSx = 00000093bf85621602238e98d09c98828d51a49460362c23c5141d3d1b235296 +QCAVSy = 0000008497152187a8b3b2958a1d0a2eecff4492251807cbfd03d5f2685bca37 +dIUT = 000000c6677c28068b462e34862ce6c9d8ad8c1b3c7efe80cbab41da419278e4 +QIUTx = 00000042cb311dcff2482a2cece696c1eb64c69ac2aa599209a5c18763a3150a +QIUTy = 000001b0329f36c135d002f08be3e3ffa9da18c5d6a70c360f4f871f12bf3f95 +ZIUT = 019ea831c51d88a7cf754495a1c474082ed481c8eb83190a77defb09d479 + +COUNT = 3 +QCAVSx = 0000004549648692af95d88e4e1d4914d8c9769aadac5a0f75783265f3eb9657 +QCAVSy = 000001b094b4802f397663d0e682fabf1c94c4e214e48327b95eefcb92b771fd +dIUT = 0000009c61024b3dff219b37f1be6701804adf247414448dd0f0dc51293ac913 +QIUTx = 000000124120d8409850e71e33c9e2d9c40ea32bed11d77804786e9b076892ab +QIUTy = 0000006dae1ba4817296ff63073bac9ce065d4331ba1a5c899cc1c07405dae3e +ZIUT = 00088425fb04c2ce408f08d81385a322703a077bf00ba0791e4e79b80419 + +COUNT = 4 +QCAVSx = 00000073c5cf4a01d09e3b41b5e7778c6b9ba52daf88fc404f8e2fd09db4027e +QCAVSy = 00000070391edaa76f0e3970394cac0338061058858c3c73d5cb512e5326304f +dIUT = 0000006e69d064dbd9a794f68e699a0e941bdda6a53a1ceca3b3db82925b6f8b +QIUTx = 000000c57d61fcb1fee90d5d8c97cbf188c8ef8259b0ae2587ecf1ff8cd2e2fa +QIUTy = 000000b8ad86c6805a4ab44513dbba2f5098b9e9c1e05b679f52937aece2b182 +ZIUT = 019b5efb23bc18a4f18c22fe2fd5cdbd02372cabde5e5c9f4b4f9a49438f + +COUNT = 5 +QCAVSx = 00000123a6b081a761e86c042e1914af47f093b2655543e564584b60642539a9 +QCAVSy = 000000518ee3c1ae546404df1eccd69aa6856431d1c8881cf0578cff4eb8c11b +dIUT = 0000005ae5de30c7c3171813a2dd3e3ea2c5ceaa0473c39457e9929071e1a420 +QIUTx = 0000017cf9fca05d4a55e4b68fee7a3bd43f047303f2a266d81bb5e1ec7e2558 +QIUTy = 0000003b0af43de05003397de1d4b27827ad2fcd675cbf61a445a1ec40a569b6 +ZIUT = 01f36d9519c3d47f030eeac3338db583b96fefa551a4b56cc5567f2d9d7a + +COUNT = 6 +QCAVSx = 00000141fbbf2b361c2c8ce5edabfa22aa4755581e5b1a66600362a0ee7bc574 +QCAVSy = 000001aea3cac203f8c780475a2609b2970cc86f96ea4011c348da8262b334aa +dIUT = 000000c68796955b68b5f8827e38ac0782b1ac2c4552caef0c60958467cd85c1 +QIUTx = 00000034789fbc60f1086034c8f2ce86fd4aa335194c9146890357dc475699e4 +QIUTy = 000001d37f796327f71ec31510468463d0b2905488a4a60267870dfee567c250 +ZIUT = 00e54b1c916ff3ba1aa0b2b99f0ebde4f1a4cc6a10d959bb2f7f4c777b84 + +COUNT = 7 +QCAVSx = 00000096a0d3f36e8f753791074cea697b2471627e0c9e7a294a029a9d3b9429 +QCAVSy = 000000b767174a2920b62f1f02fa79097845d51d93e0c8104410831a2dd55c3c +dIUT = 00000074245cc97dd450935689ea3fca7b0b30c1d67ce6e8be17cb1192575caf +QIUTx = 000001e1c570acc653c706fd7740194a554de7f3799a12b820d6a941197f761d +QIUTy = 000001e2225e8d0d41c808f6ead7af320fb25fed29a99098a0f0e11cd869e53c +ZIUT = 00bc0dcf7585753cc79aa412d2740b4b2d1c644fc9755cb0550286bcf68e + +COUNT = 8 +QCAVSx = 00000166be2426b3bf8e6d05a24d7d1f2c0e329e4120cfc8e6ff52486f095586 +QCAVSy = 0000007371e288145fc25a5a9cb5f2a386034f2f328c6eaa24c8b096e8ab1f0c +dIUT = 00000097beed4b738a6205cc9ea046b448b523128b93101a02d964435eb17806 +QIUTx = 0000018358da94079a700a10b20a2325d33d80e95eb4fc4a98101c312635939c +QIUTy = 0000000c4f442d0071c7bd1d217cf235fd031dec309e85ea2014e68b50fc2ba0 +ZIUT = 01b7ef3148be331115321b1c2a68832fdfb991b26224a60dddce3e060d27 + +COUNT = 9 +QCAVSx = 00000181f3bb0b097713277c5f3b46cef02aa9cbe29ab95c76e9b60a1f7a51e5 +QCAVSy = 0000002e2fb672d72bf78f7cfedc40d3726c6b4fb585417c7476b655e32bbd3b +dIUT = 000000759c55da55e1fdb5ba7f8b893abaae5925b9b08184a3d554957acf3ec0 +QIUTx = 0000002af25f810e18a81b69da254a65b8a6c7ab80ddc27c85622e2348add132 +QIUTy = 00000128b753e4b21a8c3acf85aab92a9aa6a7b33f2cb69d7024baf8e8b07142 +ZIUT = 0041249865c913b287a253150b207e2682efd96057cb0709e9bbb48c0fc9 + +COUNT = 10 +QCAVSx = 00000065aa4115e59e6045aaf99ee1beca1fab923bbdc919206e0931620ba996 +QCAVSy = 00000128d00b775899a58a59bcb2ab79d609e2dcda98e6523bb67168554f84e6 +dIUT = 000000ee639d89f0e433c075e2ef57cc243581e95b261f8a93b8ef6f5ebf8015 +QIUTx = 00000006638f6bcd85043395d01d767ff77e9d677f37ef400f2e16fee86dbaf2 +QIUTy = 0000006c12496266debb1d8343b9684e27c5f7129c17024a8e6704672a5f3d63 +ZIUT = 01cf480fbc2be2c2c4448c88890972c7ff9cbe08a75e26c3809596b8b5c0 + +COUNT = 11 +QCAVSx = 0000013576e700f36367fb741842f231889f36822aab2933c245eed57b9dacad +QCAVSy = 0000017910e9071a3e42e7f21b363f0e687d289810a4ec29c36ece14854e1dd1 +dIUT = 000000929b09b67b29aa4ff15d6779a1733065049faeb2c227012c49f277ed51 +QIUTx = 000000ca0403d95d85f0cb0ae4d2aeae18e187b79c201ed68c14ad24ed003922 +QIUTy = 000000cf6b0a502b290d0aeee820661accf6ea597687c45c7f93a773d25f62a6 +ZIUT = 01ce8abf3c8ccfa30e5f35ddb75f5e106aab1e67086156a1ededa1717b77 + +COUNT = 12 +QCAVSx = 000000e9fba71a64abb177fa436cb9739c9f68c0155adc897139c1bf3df99a53 +QCAVSy = 0000019af1131be47de08870835da14946fed73034179f809298d0149b16dd36 +dIUT = 000000e27af04efe2d86ffed6ecdf718fc0b8e049ed222e7600c3ce31ce4e97a +QIUTx = 00000145ec0db5fe62b92547792012268af21ba928a8fd98d0a1dee3d8fb2559 +QIUTy = 0000010a031cea56b183e93093008ab705cc9099e5b65c5cb4407324b96fee90 +ZIUT = 0025df759a20312361b9f6767efe8e8d69979e34639469a91fed9fce04f8 + +COUNT = 13 +QCAVSx = 0000011f994a416cc1990b8c61767a3d68fbea73af7b48b655e47470fccc791f +QCAVSy = 0000015de988835d6812f0bdd7007a895971e1a06f4d22ce1303c9f55efe647c +dIUT = 0000001a726d7b9928691eb0149ca8f0edee47bd0c734113ab6003241ee193de +QIUTx = 0000007426bfa8878fe59b16a9b8c63910a1e2fbc6b07ba995ba04c31402112e +QIUTy = 000000944e9616676cb2fc7fa0f9e1b87a358748243e80fb62264284645a6a4d +ZIUT = 00437ab4a53756ff678a1f580c0fd1f33b23021d62060808453b4aabe627 + +COUNT = 14 +QCAVSx = 0000010513620aee0d0478872438e99b23ea4900153f9366eb17d61bdf35aa19 +QCAVSy = 000001136dfbc8401bbda0d675ca06a0cff6bdd467c0ac9a978293300728e7dc +dIUT = 000000f459c7672169c1259e4e199333964c1fffbce75ad30dde1264f5cb86d1 +QIUTx = 000001b44a81895d2105fa16a6e09526c09ae7f6cbdbce210870f4e33db8b6f4 +QIUTy = 000000b1e072c62a2642975f06c687c6467da295ef93f04d1c5494a624683c80 +ZIUT = 01ebd55823c57d1fc7b36cf1ed2051ead64db6d114014d3407186f50d957 + +COUNT = 15 +QCAVSx = 00000035dffec9117ed7167627a24a3ebddd49a3f45d91ad18401d3d449b2fef +QCAVSy = 000001931754ce5cf557a1c1acedfe5e9a7b0b91f81643da8586a6865885f042 +dIUT = 000000656a47b8772b08b1d907c823fb6c45c65f9f18f8b43f3a61e6c74611e1 +QIUTx = 00000153cdbad92eb8d20da0c1c7aad46d08336cbc976e8d6f83947e4f4d6616 +QIUTy = 000001c977b97a5e1205ca66545df3a526b6e325e087c0e070839fe7ec1ee788 +ZIUT = 006d07f6e08b11a060ccec43b07ca7d9eaf6c3ece06f4785519284bf6f0a + +COUNT = 16 +QCAVSx = 0000004845ce661b1eae34c1699f1bfe38dc87ef28b8b0a7771ff366dc21d863 +QCAVSy = 000001096b1954b06eaa7073ed939801aa2974da1d60d66e97c31df0f6876faf +dIUT = 000000f14f5ec4efaf86e43fece65f17ff91b1a8d61be3416eeeb884f4e2d14e +QIUTx = 000001d9f8c01e9c20f6150ec7620a75e39e96f9247bece137b0365bec54254c +QIUTy = 0000006008373b9e087805294dadae00894667fdb9f6b8a4d16295e5b9d21a6d +ZIUT = 00aea594f092b4052f7564b2e5651bcf43ef7e336a064d6bfb1a89cf5e51 + +COUNT = 17 +QCAVSx = 0000014734192165c96fbdb794cab1e2d1ef111e1a20a7205db01aa803a032a2 +QCAVSy = 000001ecdfc3940b7d0618cd6315441751f663df74d356492ef934b4ba2b2ad1 +dIUT = 0000001fa5cbd88a146f6ccf5f79dfbc70868fd9bb4c8115976c96270ff7bc5e +QIUTx = 0000014d276f4281cb50a26b29ec81fced96d0e909994b2285433855256d58db +QIUTy = 000000ac4792af62a0dc4fd4eec384fbf3fbb82c8347486bc1eb1338bc7f3ab0 +ZIUT = 0099d6d076e14ccfee15ed7e7ef384bfee12deba8c9ae8f6cca3486a1494 + +COUNT = 18 +QCAVSx = 0000007e1f3251e2a0aa6de1f8df86b85ed9d11da5eb7136add45ea7d25c867c +QCAVSy = 000000d96281e0756de9daa55d2ef6573bb2fe2dd09b71d91191a5a043bae0f3 +dIUT = 000000f58684ea14a68fefb8cc26b267a13419c62d7261bad14e5368a9819a18 +QIUTx = 0000009a65a85394070fe0e5a108164eb289cc3d77ed0848fd57f384e62caa20 +QIUTy = 000000e7f56f2c27be4faeb20e274c2604c6dc2d88597030ad2164fad03cb904 +ZIUT = 01b1e977c43afd203132c085b95db0e2046a4b6ac2c046ee9ad665050578 + +COUNT = 19 +QCAVSx = 000000be1ee750f2712b2acb20c45e97357c50db3be895b33f830c71bc9f4f3d +QCAVSy = 0000015fec810cdb179fcd1ce8e4dc1a2499e40de8a4a49a9420f00e56110cf4 +dIUT = 000000eefb24789b32b436ce39622c114c39a6cd1e58ec9443c8870e5ee2f801 +QIUTx = 0000013fb1ca9ed709bb386fba02cc7862fd6c64e1087be5f61ea733946c1634 +QIUTy = 000001cb4097e44a730700debfe8143fbf9bca3a3d6c46985a27cd5043b2ca5a +ZIUT = 000e4cb704355cba1b40cee3da102cb048519a91b4c789b3757cfdd933aa + +COUNT = 20 +QCAVSx = 0000015c2e2ce0bc722cea4cbc7c3352cbe0d28b5b002e44d93705895d791afc +QCAVSy = 0000014f616983ad08e745315c4767b0ae21a6fd8a629c258ce7aefa4c17a8e0 +dIUT = 00000017524d506616bd205cb3978bc75e3a3476233e49b6dc206f9711697557 +QIUTx = 00000150a17327845e7bc79d8ece12930dc2b77654caa1082b57b0cf8e05b1ac +QIUTy = 000000151c76822d8df5effd8c6943395b6a8d538431d42e846e9ff8de7eaee6 +ZIUT = 00d8c13bc5e819c6101daef3f6fb5be6bccecf233c4b7fc65054e8e8d3bc + +COUNT = 21 +QCAVSx = 000000bafa9bba92725eef0c4a0afcbd4263e55f5155645b5c58a96bc3e9e965 +QCAVSy = 000000d1b3d0e35d617e09e078c571a5f41ea22dfd112d67a94d8dfbba66e9a9 +dIUT = 000000a6b05d30a703f1179a80f8a864b34ca15c453e82808a1095e435e9bacb +QIUTx = 00000093b3252251fd9d6d9c81d78cf1f134cdd554d63c2a1e2f1afa14e2d4e4 +QIUTy = 0000008aeb0a8ab3ff5e4fb023f7e1917f0108890af11abca7da027fadacc3b4 +ZIUT = 0129af50fa085133771753f297a313bba0d2f5882e7634b7ef5adce760ff + +COUNT = 22 +QCAVSx = 000000798bf5ab761bb6acfed0cef1cd71b3ef46f2504323cafc4081592dd6f6 +QCAVSy = 0000016277aeb3e1cac0121b07d9378a3a0cbc6567b48423929e36dc855e9d1a +dIUT = 000000168d09809eb9f6acf31134eb5eb1af966e212b9b6be68cfd22401425e9 +QIUTx = 000001710a05f02b5505729516b1ac73d45f3cf08f1c5134d2f73d12570243c9 +QIUTy = 0000018611b10dab507583f2be10fd4296f537d4af09576f96979f1eadfe291c +ZIUT = 0077c4ea1095fadc4cb4190a3fd530c7d15325e5d79b8e8a2b708e2344cf + +COUNT = 23 +QCAVSx = 0000015f723da9a38c2da5062c17d0b837522f7c69c793f79c17fb6965d44a03 +QCAVSy = 00000132b17760ac2e2bb9f813ed7790c5cd3aa0d38ab64e2e272ddf4a4c2c1a +dIUT = 0000003824f71ec3255bbd03642d782cc6794e1e54aa8fa5f2a331ee13f78450 +QIUTx = 000001a4e35a8c32717f2aaa3eeef177848e580e0fed6c8096868f6acc4e1c09 +QIUTy = 0000013727604e81d3a9d93d243fe79e2db8a442334a8ea1852b9f83cae1bc3e +ZIUT = 00d9eb3c79cf442595dad03ed4a38daf358b97d5dfc01cb61ff200a47958 + +COUNT = 24 +QCAVSx = 00000051b70bb8b8e2341b86821d54b974b696bda443acb7ea65965d27d2ac70 +QCAVSy = 000000c7784eef889c471c9d26b3e0de24ad2b4bf8bbba6fe18f51a412188058 +dIUT = 00000090adc0b207dae381622cf92e04bce7479180ec6e1771662f5c3179bd99 +QIUTx = 00000106adbf9bbfdb3083598a7f6db2e91d2e7c174f705fc216631b7d05edf2 +QIUTy = 00000190d84ca6f4695fdbca40d26a74998a05c3d761dbf08981b645c0ea239e +ZIUT = 0124c19cffc0b9549bfa378a548e8ce11ee7fca28d2d898de49ae1f2ff61 + + +[B-283] + +COUNT = 0 +QCAVSx = 02504e1a17819d39f010a4a69a0568299402b58f944a384c7d1a62c9c93ea4d1ff300e13 +QCAVSy = 0265132f7b4c64b74b9179ed0f2e211f4328d625405022f554170da932b80fdf7c1aab12 +dIUT = 02f43455842246a2cc8ec068e9d6c6e4160f6ba4e3b5d831d93c1daa8fd3d5a9660c7bb1 +QIUTx = 0561e495563018169804d4c8e2435b4afd85da376d914b69d39246f8e06113aa32e642d2 +QIUTy = 0781a7f59de7f42f5f9d6c3481f33fc5deb357c6ecf4c758e370d2435de3d8ee737703f4 +ZIUT = 065194e26090e74047ee75f13f9769d20e1b52189650011e283daa090732cc53755dc366 + +COUNT = 1 +QCAVSx = 01623a9675e8c40366e26131e47b1af06c8b33acf5e92f54644816dcb844382c944cc21f +QCAVSy = 029d280f4d4c0c5fd70f7e24095950128bea3cae3ca46f6a5f70b739fe1a990268804e38 +dIUT = 02b941e692e0a984c5ffa883c9f9f8256a43ab1fd1ad9782a42e429a94e910e482b91c23 +QIUTx = 07b90af116b737d9008e4c18f6ad539d29ee1790008a1daf2e856fa672eca4aafc96ca63 +QIUTy = 06aaf78d0f20657b77b97cca30eab79b679a3aaa90b10907f979cde988ce718491010c2a +ZIUT = 075c535cc70de19c92d7314afa2f33200903431f6990ad40ac31dadaf4e492a799b75b05 + +COUNT = 2 +QCAVSx = 07b8369728432f7528d3eec8a6788e69cd2eb88162c47512742ee0f027ccb4157a28a223 +QCAVSy = 05986eb7f109aa1f8556eba2bdc88e4913b65effb944eae639636cba7e01dc3718bcb361 +dIUT = 0287de172ba50f327bfc7d5a8c0156d25a1f0b9f71d389852f2e3b587406cb74ef3bd041 +QIUTx = 00a03490765fc90c23553c0e2b79dfa232b51a73f21554e5eb18da4c994d925f8ed2bbef +QIUTy = 0304ffd41c5b0ab2a70b82188e8f1578d6ab7d3ce3ce34fa45dcc32207f163e91c5d6814 +ZIUT = 02956f63d48a49a330e2068955cc2886dbfd5bf72a81b10ed83f2d758dd315eca172927d + +COUNT = 3 +QCAVSx = 073b092a2a4d7c9a17bb88e75b40a9e4e43b99813cf61682d49b92905c2dd606790aed39 +QCAVSy = 0566ad452a2d8ef0a327ce8e2856146fecaf09e4431ccc04256a077f60701ce4476b6dac +dIUT = 0153bbb8a3ce4a1b99960f56186ab50207f588f30c94beef28408423ba44fc875faf38d8 +QIUTx = 04f2c2454899623af13b65820aba145738407f77186abafa52d24b35bfdf5808ffeae076 +QIUTy = 0111f448460ad2430aaec788de291548475a1e5836dac520d8e493c9f601275e70ea29d2 +ZIUT = 068a3f6938c44b797524377508585842c6a7f1af5ffe9131dd3ff786ae56e1739345d3d7 + +COUNT = 4 +QCAVSx = 0455e87bc230ce7fc586312dd207c529e47e3c74cc0ce5d073fbf4b1c957f8cbbd9113bc +QCAVSy = 021ffbf62fb2531db39ef2d0bdce0d9c141c92e9cdca627caa39b593fc4a0210e8ee481f +dIUT = 032ac0dcb9aa3972401f9f58845ed765da36b7d6f77355779bfb2439827ff3556a75781c +QIUTx = 07159c86b9c6adb2160c28d86118f84564a90c149ede28329463677a4c87729f897c2f98 +QIUTy = 008a78167e1690625992b0efc2e0ef6f6d61e81837c8ecdfdab51d15340e37e7d8d05120 +ZIUT = 019b48d5eeaeb05b58801ae8f345ad9bacb91daac885e506949b849ebc67bcbfa308aab7 + +COUNT = 5 +QCAVSx = 0652ccc8921f439af42a2301236b5843a42f1fd99ecfe1b4134c3de014cdc76035347cc0 +QCAVSy = 03341d80749f1a5ec9f7ac6252384fefd38b6f2bbcdc18febe86c160f5e78c003f066e06 +dIUT = 02689bf21475d32fe71a7355efd9a7787caa9545ebeb853e5184ce42152429051f40cbc4 +QIUTx = 00d7e5bcfac578fcd728180645176d7e088b68d330a209f18b968662fed16342b3921a20 +QIUTy = 06f750b3b5e98e0099b695965aa1d16475d1074f9231127ed703e2696d4b56afdebbceaa +ZIUT = 061b3bef1766460f6296ed47d39ebf5a710d202d2b7e7cac0f0d3b235405eece99aa30d7 + +COUNT = 6 +QCAVSx = 062331b933afb4384fa3a4d224551ae8120bc55fc7ea73f2be749e217afc4e1ba79e760f +QCAVSy = 02bf51c44f8361c3054cad640f92446fe3820b063cf4bb22ca17c0a274fd46f50504fbec +dIUT = 01052042988dddf470d0a2e36fff5b93ec69f4d240a8e37c064cc4d599467ba27af3c9f1 +QIUTx = 00c7c9ff77e018b8801bddf886702556b126a6d9a1831a1f60f35872e524c134d553e4a4 +QIUTy = 0035d767b58b499d9fb54562c3830411af59e7088a4a3333d5dc7fe5b0f7f1e1c5e3ac2b +ZIUT = 055d579458860a3dd92ac6570847632f04460755c22a4c432cf4dde9611d2ce1608ca185 + +COUNT = 7 +QCAVSx = 021e82d6af6d321198176ff8986c2bc786a0081326cc85f026b71b32ac06c0bae6b4cba2 +QCAVSy = 01e9733fa9d29961269420db24edc0d5ae285d78c9ae14b38b1019f13652f190277dc47f +dIUT = 03bb9ad5fa552d38d1a77cb553c631e2d0940db6b04f0bd7011ea735be50d045da9a9c1d +QIUTx = 0687071805c25a7d0b1739f7cf681b2f295c4f9d8937351d21d1d43f634e9a57105bf127 +QIUTy = 0633ba21872e379c50e448372b1c0e65e85d07edd712d7dc06fa69a299f6037dece660dc +ZIUT = 054fa7c6c84fb89e5892d9194540860ea31ae2b6e37a86971344230ea512a3f6c0569216 + +COUNT = 8 +QCAVSx = 045d62d01db5ef173d0cff315a92a9a105d1ad784ff9b08e721f3580e06265ff538a194b +QCAVSy = 06b764c1ff76985496b94451b756c4f30fdfc638d8990312bbeccbfbd73e8c5a855adb75 +dIUT = 0133aa445dc80d7d5a097d1da11d510e6571a783b4fb235402717d68ba8fd1454e6b319f +QIUTx = 02d26e46a6ed9fcf1d2f89c63d80e0172dedb4f5aeddff092836aac8599094885557ead9 +QIUTy = 07d6713974701c160aedec8f94e6446bf7d3c790cbff8702cc7840a7818e5b626271f723 +ZIUT = 0353ff03afda3772984aadc4000e1275656607154b06c3a59c664945fa6fde1c255ffa86 + +COUNT = 9 +QCAVSx = 04a561b5184aded9c7bd9868f3043b5e2de51908f9c03d5e6b08a3088bcc50ee3203e263 +QCAVSy = 05815b579ff5dec6fac977ba7088b333bf4c0231da021874ee00d71fe25d3f4d50a57ac3 +dIUT = 004661f107a9b570045ddbb0738ab69b1c17a9acc11da5dac7fd864b3dfc36a25282d6aa +QIUTx = 061babbefee5211c4917506ce5f9f9e3d1e52b2506f38ca096e1b653ca9fb69f46105702 +QIUTy = 0014bfd2ef228b5a03e26230c1e897ad081a704013cee55166ca46de395fc52f5d21203a +ZIUT = 050795ba093d2e02398c358951f20c9e3b4f60628a96a4d0c46cb8fc0005e5331b38a09a + +COUNT = 10 +QCAVSx = 01d7d7536cd8383e1c0b1b8aae02baa9fd2c4e68b21808c1754d0b151361157f81245930 +QCAVSy = 073034da416797da95a3836eef27b1fa271f59a434848e980bad2fdd53ffd1e366ff6917 +dIUT = 0036bd21f84ab9db6f4bddc94635f19f80acb2813da5399e0777832c2febdc71862abe33 +QIUTx = 068ee3245754d51df7780046af39acb407c4998c620bff94fb374faf4b498006eea0cf88 +QIUTy = 0366a449f09ecfbaecc49d880307f57246c11c5bea00af42718677a8def15e5926da1822 +ZIUT = 02ab08d63cdb4be2502558e67eab27570f2d029e7f981d153b973080585d01e42f7187d9 + +COUNT = 11 +QCAVSx = 02042f5a3fe5e3d3335bb7bcdb9dcbd8716ed18d7fc2ff4297bc1feb7cca310022e2213d +QCAVSy = 07bebb6c0e046d5afdbfa87ea98ca7f55e9cdbb055d0cc549b4458d6998bdbb345177388 +dIUT = 016597ae6e49e79d069034972a63525a3c3e2d2c253b9e1dd3f37816812cf54ad65c546a +QIUTx = 050ea073522dbe51408f85f0a6086bd4c8efe572f80aadadd7e70ebb4b728bfdbfd4f1bc +QIUTy = 07da520017c7ad2916a2719b8558958f77c712d352cff9c0ad99fbc98a0e065eb7ac7feb +ZIUT = 0599757e3ffeb484b32d3b47828b6823d46786d35477082ceacf3a5a11552394fe58f53b + +COUNT = 12 +QCAVSx = 067afdf788f8f4831c3c7d7604d07a5bdc59da42d932731faf5eaf0753280966ab693790 +QCAVSy = 001b39d1d872b65e31251c1f584e4fe3ed75d53ad90e836fe90c8db94fe77cef0bca7204 +dIUT = 015ea8567c7b82b483fa365e8e681c0a635f563a1c81470b4dfe44f194fa91eb7842181e +QIUTx = 07afe2b22b54fe895c242c20c054989fa804e591970dda8a7ce109d6bd31b6daa8f2fc74 +QIUTy = 060733bd5a4ea9b5ea7090acfee918106b7f25272f3f7cb36eda38bacd21375610cde928 +ZIUT = 005e331af55e96153d8a7b906a4a19016a26381977b49f80b9d70db099053c6a3b8e80d5 + +COUNT = 13 +QCAVSx = 018866a4fa2f7c2534e563a291de871a8b3052a674f5dbc23b9dea0e8cefda06abc32c8f +QCAVSy = 058dc4cf1bf985d1b566970847cba6b8a4f40c7e62a5808b0720bbb8cdf3b4531e380be7 +dIUT = 002911d938d9508aeccb9877e127d1b1461acdaed035f20e0f744c774f1c72703b5c4b49 +QIUTx = 0386bfdfe60373be114b417c4dceb443223fde67c0fef29ed0f867b5a15f5ea0ccb4dcca +QIUTy = 02fac38ec8494cf7576233ec8282de384b67f0ca8048084201039d194c8bda4f6e0aff3e +ZIUT = 07e132ea71a16c7cc261b9d6ff6fc52cc490da616b07d92f9e591fc1e630d3442572338f + +COUNT = 14 +QCAVSx = 000571d7bef056089172f13423a585ab979f4b8f77e752c042c0c65263b476981e5f3157 +QCAVSy = 044bca693e9d3b1a7fa6ad42db7f36b1a65712d09ef3bb715e2640a182f436620686c0a4 +dIUT = 01662f554856c0208a31b195148f828e0b5c92a4ea4c033248bebf957b586b409ed59850 +QIUTx = 07055264c3de3a622d26fe7ad700bdea045d4b3ce718f4e6ae44cf376c3a96a2650b3221 +QIUTy = 00f45cc1138668adc8150d37c072bb4245660c18785683c7b17aa1fb8591ba6cda23657a +ZIUT = 010f26817098ce1bbd6743784d6fb65e60699c14933a2c8d854027aa58b58db9e66a53a7 + +COUNT = 15 +QCAVSx = 016eb4bbb3c386e0f42fb037bee478c4c0dbfbe55cc68e33fdb029b9e5e724aff4fd8bf6 +QCAVSy = 0251432f84568a44971e86ab715d3879e614e10725735ef8fb6652d079c7908f11bd1f01 +dIUT = 012c0100a9963ee17d7acf4ddf8e02d8ae75f3b99114f5366afb4a00ade9a3c0ee39a887 +QIUTx = 07794fa19c6b10d399e0f52d36f483c7851848e62bacf95b5af51eca09ad445ee19ef34d +QIUTy = 06140d2ee16cd0a6cb1960509a7ccc664be97644a95ae16f4a173d9a867015f0837f0560 +ZIUT = 00bdd8ccd1b40c5bc2efc1c105999350fefaf784710914ff639582f1277678699491140c + +COUNT = 16 +QCAVSx = 02417c65694d850c7c866f7e11639a5f8718ca9aabb392fa8610e2d5d7dda3375a607f9b +QCAVSy = 05133938dc99144d16ea7525c3fe4e32e320ed075b96527e13b2a99c9f27ade9ef9edcb6 +dIUT = 0345c276b05ece9e7c86811f8c8af48b22db41d4066275009611b880d7d2cef329c50e82 +QIUTx = 007afffcfa31c110aab3bb394530a41c416af566bfba8f159f984437e799dddaaf8cdfd2 +QIUTy = 065fb3c68446a74068bab7e36ab80e984707e39a4a143f5a46d646342f9f12f26a32291b +ZIUT = 014a83e747c90aec6101c0a752d92eef7475b00051ecad3d7c2e50cf4eba1ef3c80b8c94 + +COUNT = 17 +QCAVSx = 00c5d6149f87174ba37f4c1c6f67f6905abb319f526b7aa1be1dd205df930ab1c91bb1f8 +QCAVSy = 00c2e21e1206cd4bb5b622abe97ca3f252cbc68d054a77f8ebabad593fb1863306928bf7 +dIUT = 03afd5affa346b5259697d9217952afcd03ddfec04631bd995c10ac2583b0ca8d2461f5d +QIUTx = 06b4c2c3615b266543de189c896cff77b5557c782c215961ac7324185fc9a81098f2ebea +QIUTy = 047fef1960739ae0aee39a3ffdb82e890d4236fc22dad395d490bc3a5eea58e8cd03edbb +ZIUT = 00afd29e352779a39021536ea50c24fa264c599f8f8fe8f2ccf0615a6547a064d7c1a150 + +COUNT = 18 +QCAVSx = 0173044e5be63997d7925e431bbf004cf0f0ba85aa295a341e8f5857a120be89d77653e9 +QCAVSy = 0737cc049690f970824a7b0c2022439682c9d82f4f23e48e5f07fea96267ca3bd4d730a5 +dIUT = 03d5771f8485c3b8be62a56f3936513e3b631a561a942613df95140f473214df617c4c4e +QIUTx = 05906cc4529b220228efbb0545bf55ec03c86f87e2f4e3a3cbf404e07b73a5b1a5f528cd +QIUTy = 016588e480c4856cd2ee9aaf1e302812fbc0b33f527c29b77ce0f4878ea089d025a440c0 +ZIUT = 0477990f17d65589289c28e54a56a83bc05ef4ea6863c5ebe840925c9fbef64ccd6e69a4 + +COUNT = 19 +QCAVSx = 068587e69deddf4b55ac51f2a17dd8bfd6f94e721003214215bfb24b248281e75a3c6594 +QCAVSy = 044eee9c702bc4c1e210c7cc214524592568ac0f9fd67d6ea02b4dc3efb42cfbb2263dac +dIUT = 00e2c0c602fb132399ee9f31008365ea22cc1260f79fe3ae61089b8a6fa4559cac91aec8 +QIUTx = 06e6e318c0c4c0b661dfd3e722090ecd32fdc9ca3d168d9c7174c1d40adbb2ce672d9252 +QIUTy = 040bdc1dbc7b163f7c9551f47daa8294ac2dc4fe0d472c4e2f2cfefc95d523ff59e0e880 +ZIUT = 067a661346fe052ca27f3f03e75bbdfc8fe6d0d85c62c8f79525252aa241ae9de97d56c3 + +COUNT = 20 +QCAVSx = 03f1226d802c575f871a213b8150f7818bbd625663b73e720a737f071896086da0b14cd9 +QCAVSy = 07d1cb0ce19c98a63aaf7b314f1f5720e32887053384ac0f5eb69b6c471a8e3d3d16e76f +dIUT = 032d573fdeb85a4da2297896631414518d4ba07dc4dd72f731728890d0b44d36f2309c0e +QIUTx = 06f6ffea0a87bd9eeb539c48a3fcbf388159862259c7f7840e64809fbedb01a83812c0c6 +QIUTy = 07c795b8f2847fc39fa56c2de1e6cbbf4945087cb2e3b919dc776b4cc1c83e4b1c79b8ba +ZIUT = 06476b0620eef165941a4507e6d798d6f150ab29333c0552281b629170d3291b2f9b3f41 + +COUNT = 21 +QCAVSx = 02a911e7e6d2fc770d1eabc7df701bb119084a685900d22d52d598fe1d28fc891b31b487 +QCAVSy = 01b8dc6713ca453e91b2ec4e4d1f834b08eebc7e8886c3a458e70925242c4b22bf0b2053 +dIUT = 00a6aacb5dd3e835814f452d8207d15a533638f70e94f87c06196eff8838d48eed2e2674 +QIUTx = 02dd0093a8d419831f34bac6c60a570c51d08e699b181c964b667d0d17ed72a49119acd9 +QIUTy = 01a91976be5d5e037f22350d67ab7bfab51bbc4fa6026d347d28fb4407bccc40dd10a00e +ZIUT = 0746719f2ad08f8a8d6d6fbf15723f336285ce75d3a2fcbd5a0c54c577517a22bc264161 + +COUNT = 22 +QCAVSx = 07541aa51d7302e2bb557c27ec15d7f9c3ae3b76ec2f86cb95e8dead7fa06b578397f1f1 +QCAVSy = 017ea22f6b5474f0f5f0f4ead54172064051538d3e232a530dfca5f2a0dc67746c8bb1da +dIUT = 00112fb2ab56443765676a1e41b3cb91eb1a6790e964ee900cfc9295636ba4c6fa87aad2 +QIUTx = 03f507d99cc2498e2c7f54fb3c9c032f382548e2e3168fa140125a526048568f3bb3e5a1 +QIUTy = 05270df77efc7d6c55f9259bc82273c9b6bdf3676e13c3601b1b3022b962de1129cb3b14 +ZIUT = 03cda4b5f44b5d3dc248310f994419fbcbd665115d1876046652251ad4aeeb1dcf184288 + +COUNT = 23 +QCAVSx = 021fb14e52cd4243a520f630229b1dd6961c49bd96f43fa9cae37add84da7ae72dc3078e +QCAVSy = 00dd638bf9053fad6aa4ff2d330b8a4a20bfe3020f40b9692302d0b0a3c2d877856ec46a +dIUT = 03e4f1c4f30e2a8d6fd559f7fe8820e886949de87c01d8eb64c7b40f1548cb617a926033 +QIUTx = 05e3fc56ec162885c1291e4ae9c19c8eb2bb559eb7ecd5817549b5a2ea3a66d951880aa6 +QIUTy = 04c004f2ae4db4f748b437bc115e06ea2017a87798298dd6004616fcffdcc7ec2dfd6db9 +ZIUT = 015c892f95768a96ab5a4f9523b7fd466e101f63b88ad8f1fecb3027cd70aa00735dcc90 + +COUNT = 24 +QCAVSx = 00d08ed3856abef7d4a62243c92d6e670ceb3af32357fdb9d39c19175a10d1cbab36ce78 +QCAVSy = 05db9fad7fc8afe79c8b9ce48e62ffa0d46b805a9e5821e2761c25c0edba92b120b063f2 +dIUT = 00ae7eb3d40354f9f8fed18f2162dee38156cae0535b55370da3638f01668aecf9708be6 +QIUTx = 061e8858e368d9c917f129d932ddc4cca521ff419f1d74230e8aa5b1b3e9ce67f41c4b4c +QIUTy = 02b0d7fbdc636a3bc34bbdd2a89291b567b0fb2af32383868bd40d4ba4cac9880c2540b8 +ZIUT = 01adf5a96358e18d69fd383b4dc7b20dd646b68a5c9f1417bcf426240ca22b8f32bdf1a4 + + +[B-409] + +COUNT = 0 +QCAVSx = 0146989a50297be373dd665c45455a2ae4c221da5cd424007bd97f9e8e846f96740f3fa58c3c94129671cdd4d7ea650a2aade9d7 +QCAVSy = 01b42bffda843946a14ad6080f95b8fc6b7e173528d08ed36fe640aaf85aa00fb5edd5905a38b3c7961b7722b77b8dcb44bb25f5 +dIUT = 00ace92103ffe262ac17ad42a46d4366f4cb4c580eff3ab1dde6bddfdbb7374811d52b1fa99320b4af5d4e9208c14eb8efa8916c +QIUTx = 004ebc4d4acf9b404dabc3af3e8cbea8b88b32999d3ecb7f367b12eb3a6280b840038e22681637a7d16436e014f69616abf72e45 +QIUTy = 009e24109541c8024217e9ab2c963fa9e373640095a6c25a26eefac58e4342c0c85448b2709592a12402fe2b68a793c558ce8cd6 +ZIUT = 01d48a586be9285fa38dd3e70b0330b0ffebd327ceefef88fdc1521ef2fd61cbc9124e03b0c926e70fa56acb3edb54c3c48fab2b + +COUNT = 1 +QCAVSx = 017e9f01b1d6e5702328330d232a1dd3f2c592cc409f6caef0708440837f3597510f111954aa51e5646ccf47eff1f07a4f8ae1cb +QCAVSy = 003714f6ea1fd143ce751e2d85baf54c5523976108ed482fd6ae103743131ca716026b16a1e496231f991cdc8f6db447f5f95f8e +dIUT = 003ff22f7d7c049989a43e0ea3f5d61798159c178aa792d79d1ffebff8db70ee1fde040a4b5f1ed33fb3ff23c44e7c6b21b0623b +QIUTx = 01d5c9260e73ea36e4deaaa4b8f4541f678066b690771a86f0dadc580fdb895981e6dd02dd264ed9f9c1763bd54a6052a2d3dba7 +QIUTy = 011a706826365ece28e38b33620bca016d2d9338518dfd6868370476dacb41e3b947465769ebe81b620731673576f77451d0fe14 +ZIUT = 01856c92b46d671d8a7f6cc468efb60a61093d006c95bb931c1fccc336d4a8490fe17fe163c972bac39fe728f24534a0c34d2d21 + +COUNT = 2 +QCAVSx = 0183ee355a93cd13aff1756a08e58e2195a826298d43f6d07bb1c382b4e568d0080939260009c6afcbed0f23252e01d6d14c6d8f +QCAVSy = 01b2309b3819c2454a48ad253ac97bce3c79b51f50ed6803cf05464b74a5a1de22113e23c018c5ced9186ddb981c629e2e9db3ee +dIUT = 0096de2c3929c4085f9cc1d3778c2dbf3db7f0f77e7ba7bbc4e408c7d65e2c8b88b0755f160badb524e7697c50e60c8d99e56da4 +QIUTx = 019c47d79914c8bdae754ec5ec1e81c8ff329a938e6971eee3c945c4ebf489e14b15e6135616c898c80b7b06b8af67061c769ab5 +QIUTy = 000088022b4fb0e754ec4fab8cf4fc636255426755fa99b56805c15eac04325155dccbfa4145e161c40f189bdbaa3dd3e0c3d6c9 +ZIUT = 01972e225e08b47512e92c0da9a1bdddb1802be402222cac5788b322e101feeb06b66b2fe726c1cd8aec92e02f37d15f4c97e64d + +COUNT = 3 +QCAVSx = 00e85de9d63e34e5c7bba6ff9b16f4c84d95f11dfe92107b1fbecae98ce6eff3db96d86900bfd22cd423dbce1e5726be8e597933 +QCAVSy = 00b7141771f7c816d55ec8c53822d2e7a192fa54a17e5b99b2d90961b54a99fed53aba4bda1a4074ad3d23f9c911205795b5450b +dIUT = 00abd5d61cde31180301c269d52af856baa39b89f5ef45367f5519210c71d77b318d053ec0c2f49bf46de05cabf23c7d2bd7d23f +QIUTx = 01a7ef3d17c301e8661ba66c1cdee82a9b44d716909e3663b423dc06ef6be4f616cd179321ce7a572da4bca2e89b768edc8459b3 +QIUTy = 00df743849a20bc3026062b420d3942f18e2d6c5307e6e1955e33b09d5951dc59b31a2b1d58c233e2c896e2d9ccaa8eeb8e8f113 +ZIUT = 00b6661a866abbf1843dea8f220e360fe7cd7d9e85c316138fd2532a57d7d2a6bfe6e5518019c603a2d0e338ac6a8690093c2883 + +COUNT = 4 +QCAVSx = 00ca870acbe4eb3ae65edd95d6944eb090e0e550712be3b1369e473203f52b1838654f7a4342bd8309704fed6933ae9d162ccd7d +QCAVSy = 01796cc286bf3d53ad636977374f8356e45730b7aa43805fb52801f73be3e9b32808984aaebbed7be5e39e51335b0dff34782948 +dIUT = 00f323c8ee433c9ba15d3708069834acc4d937be5017e1d182ec76466aba282c73b5e3e96fe106143641402c72c62484ba1f12f2 +QIUTx = 00b74f52520119fc08536cea584220de9b062401e64ff6359305c2e6b0c04a95f77baf53e23c326aee76211495c30b2c150b9275 +QIUTy = 01540588e2fd5688d1b35763908c1f823eeeca8942f6216ce04cef66ed6991df6a22fb74411b13d06513a65b64e62815ee020697 +ZIUT = 010889037c707d90b833d03256ff2e8a5ffce16fb3613486221494a4fee82e74625a93d966c2028d0930115494f9456cec4d2b6d + +COUNT = 5 +QCAVSx = 007eb61dfddfc3c0d083fe2213967986381d9e30e684afdf2bac8f1a362e8c6d6358df95930600427dfc1eb14118fd1239b67b69 +QCAVSy = 015ba87f98114cec8b2cb45bba3dcf006b287e07e3bef1da27ce08da9e4f48bd241f59a1f9c93c837884715750f4085f913f4f7a +dIUT = 00133da2ba54b36244c8042f0e2da3718e56dbd2848ef427bddb24177f624475b53400afdcb18879e8fe6b4609a4f7bbc2152b13 +QIUTx = 00e3a2f4e63cfbc1ee844745ab3e1e5be573204609aece5e28b8fb8ab8ae06898467a95a7b59c0898a414abff2703ccbcdc09209 +QIUTy = 010d73c43b630170395104acad6c1a563d3296632332a1481ddc2c31836bd1a3ee1a7364d7f5b8295db95a3745b4bbbeb8095bc2 +ZIUT = 010a8aafbb243fc9466bf381eae173c01be95d88a9c131b07ed54d2f117cd3af4019ffb196ebe8290b1269622f9df26763ffa211 + +COUNT = 6 +QCAVSx = 0082f148ec34d1d08b26e79e3772e12d659598b73b6fff0bab1845e9a5b5071449ef2759fed63aa80624b83a6b2e9d739b83f6db +QCAVSy = 0109cea048a720ba749fc522c85af5fe783751c39fe8d0515ba0f0d3dcd19f18c22da3909f02d78735aa11b2feba0f8d330c5703 +dIUT = 00df7554c0132fd4e4a2b9217875f9924a55cab319b76a7c179cf0222937579996cf94920bafd453e52f5d2fc48001329fbd78c4 +QIUTx = 0160851cff947ce72a118aab4dad4ce2c3ce9bc330ce1d06efad7f630e45bbcf37097d94051d9d310abffa8d96ed22a847cbe693 +QIUTy = 0079a3ddde636bc62af41e6ec0e073fe6462e38ad4b9e3a36ecc8113a2c6394ced21abdc8ec5969e58e009ea13dbe929a96709ca +ZIUT = 01e17b8844c4c757553a628d6f4c48f3a337ed2bbb6e4047dbfcfbfd02bb81c6e096f8ccbb7f2e5d10ee9cbcc960e3a99e79bd09 + +COUNT = 7 +QCAVSx = 0083ca04df8458e5e6ce6e13b937dab498521d826fb9541234567e995f0683c80f438516eeff0cf8918a5f8b5262ccdca3997417 +QCAVSy = 005f8b3c20e3fe2559efe0e85a12276df922ef0f4257fe703be2529f6effb6f299a1a251c01e38d43ca6ca576ef1e0beb6c9121e +dIUT = 0032735dd7f118d29f9f3cab3a072db8c886d42fa5de7bea65036ed3c8d44a11e8f96f4e1a6f254888cab214305191a26dd1dad1 +QIUTx = 002d39e0f89fb875151ee3b354f8ea159e7fba6f23f8a764d49e07ef43f18d3cf86e1baaae0ad79d4000709a50252f1ce3603135 +QIUTy = 00ce44a9b775b03cf42b310249660794c25e0422b03ad9babaa23610613251fe0e54046e04f9210436dd376003d18f98dfdae189 +ZIUT = 01167edf7a3c50e13be126eb2caf6b5f8f761cc8dba413246423b877df74a3aa3f48144b44cd133ad9f2d05ef97a08f7ca511d7f + +COUNT = 8 +QCAVSx = 01311536a9745b7475e6c2fd724c23d9ea66803a139b47e3ae263b0fb7e42e3316279bbf622ae262531b2e2283ecc1a6127c9b09 +QCAVSy = 01d48ccc781f0bdec3130910044b76909a9abd7fcb18407dc42f63912fa2667208003ab2d28102adcfb93ddc053760e53c2daa78 +dIUT = 00b04f33b68799630d62f44337c77c5a6b6e0f7606b5c87244aa4e7da698cc8ff1d3311b48ee7c9a6812baf9054379aeb61c0c13 +QIUTx = 01c5940c2de2b3735824ae2994c15086fa958750e4d83123af047e9b3c264746c9b5d919da215355d8c28b2808a37d0cc5f2f6a1 +QIUTy = 000abfe6f1510a182eff78dd802e9ba21e668aea5732c732ddfc5df9301f5899f02bae80f8282601ef3eefe414ef2c726fe00258 +ZIUT = 015c0d202bfdee2dfbd4be91625171992e6c6b1a1d06cc1b2b66ed64c9d928bd4f062912900d3f89045c7190f513d3b019a634f5 + +COUNT = 9 +QCAVSx = 010c273530f54fe174bbbd5c2771a55a42e64050c3bf2523e6082af476eb025787696edf6e438dd056b598f5000633c264fd7ba5 +QCAVSy = 00443e72da93b0c7825f4223c796826fd1322345ea25adf3df1a2c6958908c0fd9b13e93cc005f4ecb155a2fff7ac54fa8180785 +dIUT = 00d4ebc31c9a65ee3b1abd9d6e6495780c54e633f5a2a9f61c8408d767d0916d91cb54cfcd937538df92cfc45938e33b77d724f2 +QIUTx = 014dfaaa70518f367cdfca89795a0db374bb7b407a58caac24ba46824dce78501067d7e0467d30b9e1fdbb0a7eace15fb0c208cf +QIUTy = 019d62be2b12a17a78f6c9f7e703669765f763c6235fe7af78f25044e99c4b1b90653640b3f0ae481a55d47d1eb17b86c5bada1b +ZIUT = 007c32383aae80e1111207894c8cc5be66fe538af4a19195742a94a4c3f5c765d9776a56177c485ddb53c038b70478959d374627 + +COUNT = 10 +QCAVSx = 013beb8d36d1e7f53d80beea33efc3e0098deaeaa17977da8f9aae9c576e7920e8f6da55a20930ce60fd490b4fb0154d49277d99 +QCAVSy = 011dc1d87f352e12bdb41a1b7a1f1e516629ed323c5d5b263ff036f023f0ff5f722d056c24a411f53b347d0786d84f7be879105a +dIUT = 0026176aaf98a6433566f1dcc1919e94453e9cbf3c97e069b4a17426449167f6a1089ac16a102a4b3e432a978bfb46255dc43d1a +QIUTx = 01535fc949b49030308bc0da9793d57088766ac8cf22e8d6c276d8f3f7650f30135e1f6c00300c1344e2f0306ea0e270b09a80af +QIUTy = 00b8fc3fa61dc22c55501f2a6b2944946d99f7bbfefbec7acf4fb200c1002e322c39172ec0a2b6ce0807f1e3ebb1ea3400353143 +ZIUT = 01166107ab98db1dbe22c5888a70c992af4faf4623ef593802aedfe433809c53ef4ab0b2dc4dc2546488b356ef3265356055d8f5 + +COUNT = 11 +QCAVSx = 01690c74649e92e1c1004f43fd6e4690be595904c56d2acd85a49af0a17d34368c8768d039ede9c92ad26b26306b5ffdef7bfd19 +QCAVSy = 0081275f7e2ff068a6c1b92dd38c034256ed7322b027702994c74f5b818124d34a190987fd658892fc99e7acb9877bd6fe946919 +dIUT = 00bf3e7395c72aa84c0960e5c69022ce39067404534473c4c7829424f81f1d44b31f20e2b982e251cf9ffb327a7d834f59d1948a +QIUTx = 011cbc4ed9036a27effc89ffd55fa1e3ead0fb93bacfa0a78bcafe3914ab1a97860fec1334caaba07243591603e67791aea4bcb7 +QIUTy = 0101074c444627630ad0a5258e24438d71f26ab94d05bb47d1ab97858c4b92c6ff1cb9be66b984fe8e16e44f393e63f9d64281c8 +ZIUT = 007e7a249094eb52bee0115b8bd5545f81bf0b7d66998fe124c9a3dd3c5715d03b2f973d47c19af5108a2ae005fcca65e61f337d + +COUNT = 12 +QCAVSx = 005c24f4ad9bdcb1460685a22da54dbddd1507ef6de469da4170ce30147579a54945dbb1bce9f02e470033bb15fc1a70f831e79b +QCAVSy = 017ca932b90a08ca2e3f55c50cc0e13d279d7bc9119c573c3f741410bb7c1cad1076c3ba42aed1ce69d56228b082fb6de0eefb68 +dIUT = 0096d403b0fa601c9a75aa7de9fe9e11d42efa93d96dd35102da05d3ac807e44194e18e79c8b5be11c5fb39c8bd4e312325afaf2 +QIUTx = 0009833946294d4aeecdb6f7254ca489c0ff13af2dc6e2ca5626835d5dd22241440c37a63690cd11867581ff61b7252d07afb8ff +QIUTy = 006183fee6f4d6ef5b723c53c96c5c1ecdd84652e379c937878d766f83370500412359c22d4778bdf807b3c84e5b83350910a1a9 +ZIUT = 00b9d8b68642b2729340d8b7c5ed3b3a8913c4a3f6b947473017c0e105bc7edc60daa9b0732772220f93eca4878085f756e3adad + +COUNT = 13 +QCAVSx = 00aabf6aabb3e90f956d7004ffc893c70f8e90cdc31fc0c7a88f16320541d58443af39405d888d9676557cdd394b27dc5449f945 +QCAVSy = 0127f26dba06c33f8fb45d955cfdb5cedda93dd8a45db42ee0b9264a054c16a87bedad45c0d9a0f35bbc6aa7a1295622e83ebe8b +dIUT = 0067125ec309ab5dc7ea568f8815a2b30cfac3366bb4f0160d53738ab995ce75681fcd5e492f3a9725b4cf75ba4301a786049342 +QIUTx = 01f1d1aee5fc594ca4a22b81bad707d821bef3253966f5d77956157483961696f4c60476a42b452b89c1ecb3615475ec9c96dc87 +QIUTy = 00755c5ef55889b415cefa0e881a3efc9be86f36c67615423b452eab4cd5611aef4198ddb31aecb434eeeec12edd05913af19fc4 +ZIUT = 017d60394c7ee64ba73db91484713370daa821255807349c237e5849411bf0bab3a1b353be3cd07eeddc5c2ffc74336225dae6f7 + +COUNT = 14 +QCAVSx = 001f4ffbf22f67c1591b0a770e563c0aba66fe01561c5e227e522b5dde23c748cacf8f4a02290de26b47767d388a5c836d3eff4b +QCAVSy = 002d273f2e8516e508388f8ed2015ec9fe67c66f832cf2b261dfad5856128042fb4a61a91a37b341de4296d4bf63bf67a3458a74 +dIUT = 006b2cc2387f69afd43978b7f66bd17666257081ba4d66ee6a9a82b7c87c4ac5f0eba6bc2d981ca1da9ff202ba72cb7fe9c06cf0 +QIUTx = 0086a44d6ee4e8c50d1e10d7d1d113a9610750210679e0e4cab8c62267842938ad5d933c980eef9d4644791bbfd35bbac649d213 +QIUTy = 011da63212631605fea0e93f5826b1929b2bd1db950615fcb05eb47bd9cb69eae03b1c33d7a9e47b335a40498238fedb8999b04d +ZIUT = 00b19e052edd44421ee2f5ba845911fed9183d885da85d51dc819ca565ce574f7db257509876377b40c5a08349019563b60e13e9 + +COUNT = 15 +QCAVSx = 01b0833eb3440450e3fa5148c25c2df2e0020626f2407422217e4ecb8bd8a751a72bab2ec5642ae90fd29d8c4d79e9cc191b5ba5 +QCAVSy = 0023078905b6a33009ffea1a1977db943579afbeb871970059696b29ef90dd8461776b343a09c853a538e4f22fdf854fcbf3b734 +dIUT = 003e098f3f195e89da71d6367000f804079adca3275b2e793e8d312c8e402cf0d0ce5331742f87515f4dd9cc668246194b9572b6 +QIUTx = 010af4ae334ba40bd6538e0f095aa56f61a2bd2b5f38e954b7617d92ba10603cdcca836554d0242ddb37d5e1576b0be69f0eece7 +QIUTy = 01b335521aec305f314d7f23ed28cc0c4d23f33a6785fc6c6de93e5fabce271302f9557f6d2ae77c52720eda5a2e15436443dfd2 +ZIUT = 01697512676ae56ff5ab778c411042d217ad24a24ea05bbc253e4395fecc8a07fe77ae0ca4ed977459f1a14d9b83931bccf46107 + +COUNT = 16 +QCAVSx = 0174bd233f861c7b853cca8f5a383574849ef2cd76ef22bc0e159f713a1d07387c4203b11f4c339b669674fcf1dac199703beb07 +QCAVSy = 01e2c778cca64963d87329e57c8bc96d0f6737041fd087dafc07dd670e2ce725547e1a261c43fbc54e14c3473ebdbb31fda8473a +dIUT = 007d849313c6499dae472b0bddb76dec45806f82e098723301df33b6bbb97f794bf26879fc33c2973f86c1551549641a819b5711 +QIUTx = 004812af1937630b8ea7d0ff723cbb05b7a2740fc4c9be792db204f929674c32e47d85e4770b903d3290a6d62c274cb257b76837 +QIUTy = 008c6f61711786bf5c54eb0c1b3126d641b24a6662b67b257302a9a61aa8cd503846bcbb1b14fa5c97454368b6c27dd2de2ae80b +ZIUT = 015960ea8b92bd77d52874e3ea82ed1763440189d68728d3974d4c01d6aafdbb5274648f6f3eaa4faf3fc72d09892ab038cb2fb7 + +COUNT = 17 +QCAVSx = 00c1dcb737d253035bb91d2a4a85f37d00142be81fc9278cb23a4d1d79d27c8d3c4440b2c842bc1e21f6924e14dc831b0abfb845 +QCAVSy = 000c73d5687b0490ccc07f654101acddb36cd0c2eecce165df276f83be211d01d30ff5c243f0900572ee6df07f539df6a4689b0b +dIUT = 00bfa594856c67c2836b7fb171b67c7a41ae43ef3450898024a9313654fcf31e1e1fbac7ad52b2bc4358975a5c61ab9f4e3e4e9e +QIUTx = 00e1b5309a44800a916ad8a4d19b82a58b00ee048248050a6ed6c33ce1bc9701547e93d7c9042f8490654b73a2cd7d73f733c0bf +QIUTy = 0180b20338746351faccfb9a3711a4e138457550bbf58316034c6f216a53749263dffe2359bddcdc89ec6446a9a4a9f4ef90c86d +ZIUT = 01127491ff33a67ffc4757416cd02a081cafb723aff52af35b069b89963e8e3ef5bc19c5a093ccf511e3c3c19be789280e986809 + +COUNT = 18 +QCAVSx = 013d96a267d1a2a9ea83aeb1b01d8ace22e251c82f5f5fc3ef5997a3011a74a10115df60e98d139cdd360e74d76fa522eeb56f4b +QCAVSy = 016b655ab7cd0d39f588fbefec54e4f45047664c8b3be8e57ab113770f5fe0c62300f4a09fa2899e73bbc9823265f55d5cf4ae18 +dIUT = 004a020e06c400ef2498c111cde15087cda48a6fb2ecc01d985b57f0d3921920e92c43f3ab688129dc01ad29fc31d68e9622319b +QIUTx = 0167227f62849594ed63f247f780b2d11dd9a2c2c71bd6b71294cf8b59ce690bfe00da9bc1db8d1daac9bff8c00e7bdf071fe0d3 +QIUTy = 0136c3ea77d093d9739fbe6891318b14959778599bd1e7d5a97bfc82ffe85fd5a9a01b82f72e11fad96d2f5cb5798f59efea15ed +ZIUT = 01254508553eab09fbc2fafe13fa9b324d9217d7d0ba4cedbe5dc869ad68de4f87774dd17d6428ed242c71956f252969e6bd5837 + +COUNT = 19 +QCAVSx = 01787b30b3b204e298690b9d711ffeef167adc5792068b5c8d422ec90f94c2bdd284cdbf8bee642f70bd7be2da906b9edbbc2cd1 +QCAVSy = 0043078f912110290a13d90160f0e71582fa39c0e75d8190eb811d450220044cc6d680d956a98860e6fc85bb86d65990a160c5b8 +dIUT = 00c19b391665f50353547fc72c9ed019f5311690ee41e7c895aa7ef92c60fb9f3454dfac575245a6869f1fdec745d63ea56c8922 +QIUTx = 0053a7a62a8b4044b60af76efa5b44429bf65f65987d6a062163dd55f08dc9a91b8bb9b6270f8a026123f99eb9372ccbdd27ca3b +QIUTy = 00add46f7ea7092f48ddaa2feb96cb24bf92d2628fb6e4f7cddf523e5f84011cf8aababd6009a13f29a63b6b7ee664c66f3829f3 +ZIUT = 004b9accc21d7122835fc21410ed1d83767c47a54ffee5f0c180fc55f3d0e8484af3ad38020294be92f02f0ba7e2b4f4eb1db07f + +COUNT = 20 +QCAVSx = 01e9da0ad1a15ac3c431f220954ed2e502af7b746c3fd57b2eceb7748658020a095664878354df0aa181e57e5ead2c985ad3023d +QCAVSy = 009cce73a54708348b48f8f3f674bb7654f441f283d4e8a4ec8f8592ef52395f24c112d5942d3ae08ffe8d999efde399888a7cf3 +dIUT = 006c9098b53d10f2ac0284a99902658f667ea4cab28698af3fa07006a1bb46363b103c4aa4c92c1c3fe7539097fa70b8a4fa46c5 +QIUTx = 00d3edf652f43f9c9a92a2e4d34ba83f5d7e950c28346a2a6851bf75547050140a4e9c1c1b500e1d2ad364c306b9a44af503a621 +QIUTy = 0099b26c64367f1903da95df51562d25042c01a1adda75bba58bdb0d8aab350b52ecfbe98488c2619de01cd70f5e008953bca547 +ZIUT = 0093e2581c159d74d11f8667ee03399208b5c1a4ee5b20070ce8d97d251ef1236dc81dd688b2f07a730e6b8aeca0c193a28b178f + +COUNT = 21 +QCAVSx = 00c49294fb712942221a2500324af7bd8c7ec1cd1b8094ded1bac0010a8696083f7efaecaa5103d6762499e1be4857d320030281 +QCAVSy = 00564fa1110b393925dfbb24ba9a6b3373f4624ecbc3e12f9706f3ab0542992d8db6c8d8bb25fa0614d486f6d1ac9f3d98b9edfe +dIUT = 00a7fa38a8ab8030d6b497a23bde5e5007e39d14da9f82dc564ae3cdb4af5fcf41bcfef7adadb59171e6d7d3d3c3ac67f7be7073 +QIUTx = 0013bb3ba91d5d2488af572d995cef8fffb1fd85d113421e8d2c0c3aa97cdb8a933fc0d3f05f4646ce841ebdcf1a98604bffa3df +QIUTy = 01f2e04ea16a012d4864cf2ca7564846de73a33f24578dc4d221359c4f2f86ca823cb0596bfe4760e9eadcb4ad508ab1a171ecbd +ZIUT = 008e2f1c4bad19c46a5134afccf7f4ec14ab591c8b8ea48d9c3d1e7354ab43ba20aa39a65fd92cdc176cf3dedecbf9da49a8d855 + +COUNT = 22 +QCAVSx = 0134add2c499172df792d94a9b3895e245b84073c325263a858c1e9f7cf30a44f268d3f8358411dc0a9caab505c0abc016130bf5 +QCAVSy = 0031c236b143ca036c883641f7f9b957f4f798a31667c41560340279fce0962a21bd8bb52fa23db71a84f35a5794ef5e075972dd +dIUT = 00ce9f827bd24c014c3ee59edef747178d6c030c19669ad8e718ba1302bef4b5ad2c1233448f5275b29a896c0b2e7b0da92068be +QIUTx = 0176e31012d9c604b2d1a1922a28d8a574f060cc36388b2816d2f8117da20c0699ab0a08f76fbaa476f0a9c424bf4c952b4754fd +QIUTy = 011fedc3e8f8e828e0ffbf02fd85d29c0201fd0f53bf2614c10ae51ccb58cbc4900c38cc4c9a52d86d89f9b8c2de4e227f4e228e +ZIUT = 0190a1693eebe287ec980236d8762804d23fdb6f222763a0efc364f9280fdd53394c2badcc51ff09557f3b97cae7f70d790bf9df + +COUNT = 23 +QCAVSx = 00f0ec972dc9fdfd08cd8dfcba7298b4df2dbd80c20b2889e663ac58cc348cbf8f9ffd31ffb50618d6c38d72a99d5c5d2eacc001 +QCAVSy = 00bb0b48893cdb915e65cd5d797804802017a295343654246a37fe3a60d7de987e6a9a10aaf063d96b10184612ccd26407d7e03e +dIUT = 00e36f3b9a1341995b13fe70bc545d279e6db1482c92b13ce8cc0da1c100ea2faa803a64a58cc7eb1cfd167570835c522f659347 +QIUTx = 00d1ca82393b8d50bd1898a909bf39333eca3bde98b0b0dced66f828630e69e6eb128b7cec23f07260047073260a765331dd6f57 +QIUTy = 006c535ff943a0fe750fc6c39904a6912ba1ebc0f46c1b0823e4013c77475ea29b3f32481966f1b165bedba6c17a1494fb6d4f3d +ZIUT = 001469dabcf2210aa7de0040b201221eb4d1a4725431fb5a93212a66ddea4187e078f5e3d82606f6cdfc0ffe6b69574d1d0ba643 + +COUNT = 24 +QCAVSx = 01378444e0deecff3aec5ab6e74e8123ba98d8b91a507cfca0d85097aad944c15b4fd89c8cbe2c7451d8ec641045421b4bf6978b +QCAVSy = 016447c213c9035de7bcc29bdd61d6ee6ed5579c36bec56bc6b44f9286bf9e99fac97f356708cd0310dbf6338f9af8d7b1359102 +dIUT = 0008a06716ed6f4cf728f9019928f367c77a9052490b9a8ba87a59cdca84e77c6a299853f5496febe652f4ba333501c4fcf2ba2f +QIUTx = 00a045b5e6bbb7950495f6d5d645a2b7d72006725d0223c7ff75534022c9260ab0d2d8d333789a3dccfc3a89502ca500bd0c1f61 +QIUTy = 01ec556e1b1621ec1893654e198d5923e311478a8bd2ffff280c9092ffc0737289a997492b6e9ebf931947634ef7f43b429cf36a +ZIUT = 005c701a93d7790322aa7c67440fdd9ee8057a0dae86d1e856ae89e7893da178bd67777f86db2be5c8e31dc50ed8a440aabc342d + + +[B-571] + +COUNT = 0 +QCAVSx = 03b63f5fa112ae6b5f113c765144fe4cbd6020e26d400c11609a3a634b9a325f416b0e3d3215734c68a1c2c8fad1d0bb9eb3939a41af22421f68781e7eb0664b9df5cea448deaa3b +QCAVSy = 008e6cc77bcddc816e84cfc1f626824fa24d3d5fd33d8093cbfe1fc4d881b63b494123bc759670edcb1887bb3b9d5a8b516bc503828163709d4dacb594d277a15a92c064e5770d1b +dIUT = 0344f22be87999b95b2287f67430ea8fe646c62fe38b7ce61f1f956597c27bddd9902e20d4436abf3bebd8243ec29a00481a8a2c19f550e99641b5f14aafbb5bda953a7559f8653a +QIUTx = 06af71fcec1a2904116fe14878663764c1ec74870e5d2d53919f0b635912db80dd5460d9e699458ff8494c5bfc74fba8d3b12f65f015e8def10de33f1800191f4cb502d21938b951 +QIUTy = 019584177b189c6641ffb678b6d7833d8d4bb25dee5018dda4e4c0d219048c01cd0da9eaffe346d53cf1a07b33b3dbdd4bc3acabe4832f9981eff2660991aac852147985eea3a51e +ZIUT = 06775e1b99a236e02b020bc73666e5751c1210dcb6e9b02a69f4075376e49f7a1476d2209e861abb73f5e3ad189d268e035b1de93d47b3a64de5783c9a09bc223e1cc612f26dcdf1 + +COUNT = 1 +QCAVSx = 0575cbb059f423309f993b6c06ac71d7bcc5d1e6a19afe72811cb612a6238c9ccc331e67da0c10b88cc2a5f1ef2ff6d6b744065d242f598da2d6335d4c3becf5c3953940c60efcc7 +QCAVSy = 06b433652e3a36a07018aa8ad3d2ff31ed785ce5601716eff7710fc13c6ff9ff75c7f3701d459fd8fe70c0b4afceda08681717db9821d8c858fd39e274ff37772f8e84856e706745 +dIUT = 02f4d2b7e63660e6c20949e06dc670be8aaf82530e0b6eafe21011fe9d0f4407c8549515734528cda299e9fcf738a97fbf43c4bba26744b327531b40143e158bc8645909ea888456 +QIUTx = 06ea711827ad8ed589b709ef35f6a9cd4625798bd887e5fe59c51f0f41c328b7ecdf84736c43fb70e3986ee5e5f986e009f641158a75cce6b39f53a8bf0682830194e4007148deef +QIUTy = 04c6b9f2a6099fc0367fa9609394c3221ad8c6fb111d2bdc4305053804788d32eaf76431406e768a448cb5c8e34c81225eec9015abbd92725c002712ed3192d807b36afea853f722 +ZIUT = 03a80ea8cfecb858f9b77bdb46b6cda26320ee8c561a2fd6b7e0a2b62201fbfe60f577780c75a98a11a69de4c4ee911930d2200b6972bc3123d7f278615ecc65984a59fe352a1cec + +COUNT = 2 +QCAVSx = 064aa66830ff44324a67ae8a907896897b507566cf52dfe13e3adbb1e793665d2b718358754efe809e4496218502feb5604dbfbc04a1107ca9ec4eadc7d10a9d6d1474cedf578145 +QCAVSy = 06f63f69f8c18b67f11051b3d30236a1a249088b2bcab5cff830cdb9eb3e75c1e87252e5d8e61bb1a66348fb681e962d65abc54d5dea2dd72c554590740074f7c66c4b8dfd307561 +dIUT = 012b6313b56853cf8d0273049cf7ed2ab8e632e59256ed043366857648f3f2a9674caeb6fb0fcd5fbab0bbabbce17a0fc4a78148499c389af57486374641695b0e852f3152eec724 +QIUTx = 040a78763d170459dd34b5c04ec782e698cbe903a5a348551c5248d9dacf19bcb9a498ea05e80e2d6cc1f3ea5ba3a43855b801c8c0356fe3e29ee224bb91f4ed0c85678379b72542 +QIUTy = 01ff49ce0a62e9edae6aa63a9848e44f185412d0feb46b87f91424bdaffed5168321ed76f235f75d33667f6d7d6a9c857bb4f85442fc40f9a20c04ae06362a46eceea15c45d69beb +ZIUT = 03edea7e47ded7c2ab1115f4ebcbb42677c7fba6e0cfd811602896251ada1d5a0b461aaf4e000f4d4231b96d8dee7630d9f1b7860e6418dac8c3b07b66af6fd1acdb44b2683b29b4 + +COUNT = 3 +QCAVSx = 050671af65cbef92f305e5facb4288cc04a4c6978a3b78afe4049c6a995fe8c3c0bb609abe49d152b1eed6c714d254fe6eff159a9ebd24ad16919ef76f4470057eb7c265a4bd96e8 +QCAVSy = 051d08e21d264d8e4dbc73408842ab57cd78d323e7deb625b3741994b8affe01af4461622db419afeead045845f6c3db6d982f45b692bea11cf25d18aca3c83bec840c7582a7062d +dIUT = 021997b5481c0cf6cf436bfe360c3b119b9e4dd56f3c2847affb2021cbac4b57dc18f5075d678af2ba6e9eefbc4138d818053f2df32a10e8ae5d6409f5b2f1f3cabf36f808fdc07c +QIUTx = 0560cf91328c26bba13f71c9b5dddd05c185969d88bd0e9d34a3607a923b23a5b675452167003ae2f0add5141ea4be41ebae91d3a6aa15c393dbf585ad6c9214b269e86b4f054bf5 +QIUTy = 02e32ec240418a9a4f9017e632f8a77897a2233d6f1f45b8f7aa818f847ddb3ceab5a5a12c754fce8d57b0320a076b53441dcf9f65ef3204e089191ef156ff762294897a72fca932 +ZIUT = 005b640015330f8416f2bbbf8b5660e01a7abba8b0197a29e52bb535d62f89ad0443e08b6e0d1d15f4eb03c0fe35e3e43bd7739cb692092698a2cd13126cee4432831ec7423b3434 + +COUNT = 4 +QCAVSx = 039ac9e91af594074dcd338da4f5240574f01e413a49b92246ba3d6de855e3dedf6e7fdeda9ab7f7f8476e770ce9bbc3a9a5eb984543dcc37f5f11be6e28a1d1090931f5c5b5a351 +QCAVSy = 0780d32dbb134899bda2e98848941878387aba6665fd24252160ce3123f68f9b5bd8f254a38b84ec536525fe007a863b6fcc489f937a05a5fd946d62825328a09f83a7cba27fea5e +dIUT = 02b539acc770758799f439670eae85b9ba34a8b4f371cc935a20ce8c566521eecd8c4f5aff116ae0db2ad6eae1a3384434c599379821ad05d81ada0548299dfd98cfd6d3f1573524 +QIUTx = 06dae538c820443977415cef4e79974ba762b69b434810200cc6fff326a2344cd21be19c153642df82a3e57a5531a8bf19767e1995d2728fcb661d58ec561ef23a34d8607971490d +QIUTy = 0504243c792b903184ea725a947ca89218ca9c8fa1e09a7dd68de88eae90f9bd2a8df414dd69a8b2b1a2ded2c6d7f514c8907997624eb0bc9ea933a2d474ef8f83baea3243834de2 +ZIUT = 027af05ecd0332784d64b0b1bdb45c310fd445c5a6d6b34f35f4eaa3fa3e171ab98763d243a1dedf46aa29864620a47d05eeaefd748186bcbcf187c01e7ce36e2a53ded071036b59 + +COUNT = 5 +QCAVSx = 06f6588491060a1e88148e4bdee38bc674713fe384d7cfdbf5bd90c9dbb6e1587e459dce6e0d69b8b2cfeb5055bee56a73c13436060198ad4750dae8253ea839a2e246d541459775 +QCAVSy = 05b61b8f7d8d6c8162a2269e7287d459034b8faac0360fcf99fb21da34a314e6735319b9d03626b9268369345f3a624acadb219b207188d0e945cbc67c982068d32613fc21f8b0f4 +dIUT = 0318a96e382782d4476f1bebf697a1076f22e1d2ec84747f9fc42505d5547daaa08d814721759659958685cf4ea4bba12fffb66af09f6694521f11c09b6626c8ae52fbfb336a52a1 +QIUTx = 06770f2fcd2e9b7f8bc5c292d283abad85155071fe37ef7ce84f34c7616da3dbe1bdce9ab04cea7bc4bc258c5d2ab77239d3d084568b2dff779988288d9fc6bb364f519d0e855ad3 +QIUTy = 04f6a1f4e5fe00fe9a25d8459b88803988ef2bf2fef5a23f13e7a7e7f3459abfc3d5c00303abcc5080fab81b09d5be0320ef990519a06af13c29562ee955715a82cc0daef2c5e0eb +ZIUT = 0763c0d659a7c080912005a2afd60ce57e610619b388ef3d5dd3c9386ab12069c6ef3a8e72eb741cba2da5c6f9267f6c09fada6459690ed4e432445d6f0f72dbcb059c87df36f665 + +COUNT = 6 +QCAVSx = 05a52cebf68103cab0266cf2c689c48f080549fffc70db9809c2a46f908b7289be597329f39ee1e4cca398664ffa9bdcf01293f43593d188e12411d57e559b3f6a30e9554869f049 +QCAVSy = 014e137165fb0d530e8653d7cb2a84618dd3afcfa3f08560179142aae972790ce746a2fd4469d41558744378c640ae73a489bb7f81cdca6b1bb167c794c26d6238a0d256afc3ba21 +dIUT = 028b4319eb7054cff6382820c52f9c332eae670d1f07cfc8f1472e9260f5e47a385768016cd2006700ca7bdc5d1d567d92460af7c2a425dd0d78aeee3d15fb28d71167e6486b81c4 +QIUTx = 05b1b114cef13aa5df306ce74197d680f9b8c9d8f6753a09db88466a6bb04eaf1eb873836022d7504f45fae85a8e4a5417edd7ce3a0e5eb9e79264884ed783577b3fc52d825f0b57 +QIUTy = 018e3226e36b4b336799c4684bba505e984dc8819166f17ceb840e36125b283a8c8635ddf7e770406d9856d82b37cff1fbcc5d3f5cf4b55eca41ee131f21ea7bcb19ce05f6564245 +ZIUT = 0428413f2d2aad4d5288885c2edc8b976321ae1dd4fc6b41275fb88b8c5e7776165effce79025163538a0e83c919220a407ead6cefd616b4b05294488c2ef5d30ab8caa55ccbd1b1 + +COUNT = 7 +QCAVSx = 026e2f1ee64e7958e902547a7db0a1e14866f3d2c0127c2bb9b09ee232d3d9518ee44ae8f5bb433a088069fa386cd5c8902711b762ac0da3a7a3420472c47e850f988dd60a636d7d +QCAVSy = 0677ff510052d4f460849fb8ef0d4f3519cd238e4e1c688b736cf6e3759550d134a1e6ca3cb479d68b4dc5d0bba1aee178bd6fe15ec196fb1f627d87079394f6f7854e053228dee5 +dIUT = 020115d17e41e13178b42a004c01d5e4ef1c76241049c7d31bf0ea85d6e070a2e2b92080e61de546fccbd4d991236bb360ef3f206ee16d8843a0ddc803463664a8ccdc2d87a10277 +QIUTx = 06c8ac34364acae35e3c417160333e48641868fcca04c0d577be06f58ab0a55fd7db779fe737779da33d009f57b5bad49702eacf575acbaf27df833070cd893a7924770c92eff3a0 +QIUTy = 061b82e545d41c62fef068b34cdbf01396115d2a1417f9719483d26986b6d52f8f6de06837795f6d9dd7cd095741114318c6e8a6206b3deeef014f0e44b0dc6684e100e4ac361650 +ZIUT = 031bd2a84369e93dfa00581446d52762100d985cc7bb91c4fa8be7472e2e8e9781c52b19a54330442441bacae23f4bdc76486eb475d51f26aafbfb272a5ab5db184a4d3c3006e5d1 + +COUNT = 8 +QCAVSx = 023ee4f9ec24dee203acfb658631313c7ad4394c47f1794d08b599ffc15f0e5dab2911d97e030ddf7cb4bbadf8a5bce05c35358fbd0cf95d3d5c7ff3cd8ee6b54e379d8d0123939b +QCAVSy = 0606be23e7c5746dbd38404fd607fb7f278ee249dc8e2740cf1bb9b1c07b1cf7e0a50a432567d1869799a803122510db437981a2aa126eb9aaf3c7be05a80fac1495e1c40ca1c106 +dIUT = 00847b545ef49615671f08be73a49147063184493340111ea4dce13c2f921f07bfacffc8441f4c7c9d0479f57f3a13f4c33c63ed47c3a43fb2f06d06a9780e5c0b3ac30410adc491 +QIUTx = 06994ddc5ae2c5b6f45dc32b710f1a49391a47f3a0f8c2d7846552fe487ef01cca0431155bb54533b067a29e8367373af95d6a7f0bf98d869b708f48f95f1b88a1530fe22547e97e +QIUTy = 04f6288d4d704f33a898031e7d0046fbf1e34a72c8af190f4d33163343c897ba0c0d8af8a86236a1c3b655b979dc4522d33d66a665b3b6501570f076322af0ad2bbaaa04ea2e995d +ZIUT = 04df20154fa49a1d6e04dc2ba6e55a7f2ae575de5e2c6e4091a4d2c36aa93ca9699b890f0ee4df53aa75d0d9babad68605bc027ec67c187a6826aac0f4bc596baae788b376110216 + +COUNT = 9 +QCAVSx = 00d4a0b11c1739bed094e72d7a6923836836d9215746c72cc680045a36d81adf5e25394f269a2ada1d9439ebc33bb931d6fa595a25261c244a1e17b046fb10fb54bb312288cf2e8d +QCAVSy = 075204f50d32ab8a6abbff982d1fe372b8c5415bb5b726b346aa4f08be32f8ca282c1ef6e152423360d97b728a074e6b3cf3b912718b1692cd983019741a2541824234bdc8c323f9 +dIUT = 034c2458302b43857f12ad8bd9a875237641a21e21ca3cf9a0956d3cfeded96a5e1f533d827b528fbb586da93eefbb66d0778b19b1a7fb6f17bbf9e79b9acefcdd7b9605e7898f26 +QIUTx = 032d3a7a4099f089fea9189211f7366f2edc4abfb316c5c05948d8de57fca023bfb6a11b102ea4120ba62192c0df610bd8d2f63fc57727f4a6b640abf8d299fac56c4c7af88349ea +QIUTy = 04e6399f1ced2669d3a5506d35ea2bebfccf0cec84bc97383aadc3b48347f629626e6096f890435e5933675048fdcefcdede3ed616e6560d42e9e17c5492e30bc2de4689c0592ecb +ZIUT = 037a380f525590582658e2dd272a32de67fc0cf5390b37f4d33c1359f075d4461ea38a55027317892a3d1d22f5ea333ad437667d2f3eb8781c39504036ae33e4b0a26b6894722f0b + +COUNT = 10 +QCAVSx = 03bb84032b7fffce27accf354b89dddf646cdcb56634df0f8520a7730f8abeb05f9933d8a4352d1c7767cc3f9b80ceffcdd0cb3a97b59283fd0a674dc4fd240333f020c82b4804c5 +QCAVSy = 074499336ac3a805430789902768252026b526ece54ac28e8cc878f18baf9fab42ba4ce34e4968aac1ee6a0bb15c9a709882a5372af56ea0b36817385fbbfeac4b906069e53fbfba +dIUT = 012db785a03c26be3a6e9a582e5c32a89570ad4308b713ce5471ea193dec1f32d68b4fcdfb1600fdb1ecb6769e26a0e057812dbbf0ed495592665e6b8e9a97378a30b5c660fbadc1 +QIUTx = 07edf7ee0ec77f5a6c3c9ec4ed8fd3cb814a342e9cc6470b54781ed6c141e2115c86dbd7ba27993eb7ebed7a38be488f96fddfa982f3691aa1c2a697f7706bff3d1add7396066194 +QIUTy = 07b3824b7f7b266fa42fe536adc2ac79b9d1e5b408e7217b3a99ddeb992f3123ff2d168774d300a818a32692e265afc6f6f578d9bd3121132b5979841f7a2d060e8948901d657c1c +ZIUT = 0420de313bddce87d07321e3f0af404d9d13e5369b79506e807178711153c9b1837cd055562eff3aadfc5954a221eeebb1bec1696d3df1cccfb8b61172a50d83cee95f4140ba070b + +COUNT = 11 +QCAVSx = 06556a4cc98466794a93d03388536776f7a4b3344c3dc4eb960a4a6458fc7869cd4e45b2f140c468a7d4ebba84c9482337a2a8adaac88a9a629da03dd247526642b0ab71fb7a8c70 +QCAVSy = 054b97d952b19f742856dacf4e50df0c3103baf253f4de65a3d9cace63fe82906d2c8e8a3312fb535e00f9b5ca69f87dbc7fa3f7d87fe024536604aafe4640593cccfef6fac028a6 +dIUT = 0202606a76b6a13d6e29280bc1613e115025770b245f5561d5883e135e159cc437b1c9355b2eee2b3babef229fe545aab2bcca155e8972495f1974bdb1ec0e60c4e6c79c48f26a46 +QIUTx = 06e74dba4e0702f186d334d3c49e2578e1edfac564645dda8c4a588158f8d7a3ef63243653c0d507427734fb4cc87adf4a36bd5abca1f920b9bd6e3bfa51c916d5710884594e9485 +QIUTy = 05b92147a2db48a3830ccfa28951a2b7e8eb84313b99b0a99031c7834c633f865a2f9844952528ae5dee02428a824cdfb7e20928ffc53420df38ead0b4240d0659d5adb1ff2e2dcb +ZIUT = 0606228f5a05077aeefbefac23c0d5bac7a6062bfc2b02ce8bba6698ea96b456b1f0d32c6e05dbb9be61a83090428eedea18c74f41238edede9e3a12e28722d2f314613c2e84d6db + +COUNT = 12 +QCAVSx = 01005182b029a48528eef5ffd0221ad87085abac6a72705203a3c1689abbbc0e12927a5e83b352a1bad97706101f44a1022ccc0d5522dc5d1ca1433de03a2ba1df864875f522be61 +QCAVSy = 018b02a98f0b3e4ccf44a96939a2083ab1f2a04dafd5bdcee3cff438bb08bff12043aa192c5fcf34e13b5c29742c5d864b9cac46bea6e96df2b1be4493acf950224d71737f990658 +dIUT = 0048678348ac33b92f2c59677103ea409946b5593d105fc4983351c4ede929c4b93bfc695876555e3ace417b82ac05b832676ac23e2955a09ee64a20a5f98e62499f43ba7f7fc8e1 +QIUTx = 031dd4808d2b341b8881f5e50a2dcce38df839009f92185978dfd9a60cdaee005cdba82655647736d407afb90c67cddb13ba2b01618f45e8a274317e02f770f80ef87bbbc1b11056 +QIUTy = 050a0671c9c0ce57a494e6911f1376cf1fc3393885ba8c26f6ddcbb5361876860a35afc1f4560f2970c30db3f1c817dbc8af2b025daed3a9da12d2fae9d714cead80445e6a0a0813 +ZIUT = 052669336019db5eddef5eab2336abeb60bbc7295e4bb663ab43e373fb6d888d7433ec89a487a91d4a59c289a9509ddd1bab33cd02a7bf37aaad78dbedf0b4ae5f2f35d15cb4e628 + +COUNT = 13 +QCAVSx = 07fab4e59328c700f74649bd90a7d51ff28958fe720daaab328cfc9b002aa706ceb39934db9ccf81deec95689ce8c776b4fc6542a82358cc51ebbc6d8e5322cb3fa6e4695e170fc1 +QCAVSy = 05acd45cffa29ddb34ee42e7410026798e37a8d1a9ce9f9294da5198164b69010c68c53281ccbfc407d141097da137e7849f228fdc1a07aa298be26ca771f47ac4feb2723d5a6666 +dIUT = 0017bab72d788f8b78b9bfc4912863c5a48922fe69e8a4cf5e6e91763efd5477a1cd439dedd0afea504e3b3af6823ea3089c0374ed9aee24a88516c8cf3afabe995b9b9675f3b5ab +QIUTx = 0161c14bbc84e42ec7677a8c3770065ecd1f0f44eac8242a715a61971e7e4ffff78ff57a1bf1b95cbfc2ed957d1195f9ea50809715c2439c7543e573520135426d47535b8bfc8533 +QIUTy = 01253633d02251464edcc53ed9e8a9ed9329320ef5eeaf35d64c59b9735c96e07f1a62ec17bcee4f04cd9a85a3eb504aaf37bb388c6c7d08d90aa0b68556b5c068ecbf0a5984460d +ZIUT = 062de5aa98b440c6cb7a1428f6b5e47452b30454eec4d651982b531121febbd5a3833b180017f7ddb5ce38d7bb1c842de1a8a8fc7fc981e24733b7662813fd010a4e757ca4ea5c28 + +COUNT = 14 +QCAVSx = 072676302ad18731b76202bc51429ebf7eccf6325f4e084c2f92e3288ed290488b9e36720e29daa2db1993a7d17ce8ef9d8ccec61de8a407176e2674c25d57bff2c46596358b3605 +QCAVSy = 03c0022d53229091e14af0f7450deca1cb5db821e71590608fe0986d73e88c915e5ee8dfebc8955913d9164f992f56394a662ef11c8214e8ada85df1b17b0b97414cdd662d188b5d +dIUT = 02ab2d43027b08f8abfa3598ef0144399a60b6037b17a3ae413d422efa2167e9ea4f19d7eca98d85c67c1fe85fbcbc1f12bafa30a85dbdf542466889315f1532defc5d181509f008 +QIUTx = 0328c0d67fd552ea10e5bdf7b87d50bf4dcba34dca569aeb869c5c7dc7d832ce30feed32e25a723793f97c557e2f978c5e1349e69b73ef9916001ffb0d6cdb2c6343e34538386e6e +QIUTy = 01d151b46ed004263cd9a5c0d46a840d03222631f92ff9280e95a35746cdbcafd9fed6811c7614b9d50aa2828dc7a275b39d3d418a349dd1e2b73211f4de9a34b42fca11b9760eca +ZIUT = 07c7eb4892816cc3388ebcdfb412984e05910c112dd15b8e5481719401701aceba22fcf35aab0c3b040096161011f6177097c505395d9d6d8a713f6a5100fb476adbe7b9cdf4b68b + +COUNT = 15 +QCAVSx = 06cd7931fcf1935f81f301479ed9ad0c6f9a05becf4e573a2ff409bafc442ec195f7e3fdfd08e58161d4e0fd37f62a969421b19cd48fe848a5d7f74b8137a7c726a9cbd37a2cf3b4 +QCAVSy = 04b5b2cd83b27895751c34d3ac5b960a133ec18b039c2e128d3441db4f76e8b75064094619b122e5fb2f1c2796559ad953c711e330dc7bf55edf29f095cae45557b7c8d5843d89bd +dIUT = 0049c6e4c05a197b24afd2707243ffbfd55b0088fd33d87dae4d21048f75f2b862563075241d2f36fdd0e9405ab42aa55cbf2095dabc3daedfae9deb922220783e8591cfd67600b1 +QIUTx = 001fe29a4c2dd000bbed129121b88edbb5c39b34003f170ac19fa9a85c5fe587aab821361f4963440f25acb49758810552f06b719a9eb43b720e9b7ad6ef9d41248d5f335f99515a +QIUTy = 01499db95808c719d24eb05c633db8b05cf969ca0bf656435b1fdf1b0928290f6a6bf880adb9fd53c86ec76e0f62ce89cbeb4c266f64a876d778231a0030c38aa00d66c6bd680785 +ZIUT = 05c638349000ec30881cd190c067e7f12b6b42d5842a8285a8ff0dc7e9c9eaf483309e48314fdc2ce7f9da6a468e549c8e70a50b68d07aee29708a98172209e5cd2e8c09cb66d982 + +COUNT = 16 +QCAVSx = 02984b653074c36a259ad956d5556512c2c731fa50f2005d0049a9d977de5c00b7a054c960cdd707896321490be433bd5effd44c564eaa2d5021175050c5bfc163cdb1e81df1335a +QCAVSy = 01a786d29098b334f5c1c4ae86a41bf275cc6787da7206916557a4f433192141034567e041d55d794a7707c7aaf28842d5c8f590375a43656918aa80e55b0285347cce8ffe1f15e8 +dIUT = 0186b31ce490c7f28f2793075a4ae645acb39e71ffe944ee62bf82587f1c3cbe288ce6024d8d035f107d9a4faed57a7b21ee1d6e7129a098004f22ccd52740c034a6df37b53d0732 +QIUTx = 06b15f1a859e3d80924611b20c1b94dff6bd0574fef81937f1e54d148d2d31f8c21b0ea9ce031c9455706f085a69fd492418558c7de9aadc2c9a996e7ed1feda329c7d7609bb6b22 +QIUTy = 032910544cb136e2c29aa33572aa6c3471a52ebca6b228bee749fa9ffe29296a4a5b6aa0c6dc9f095216e7b1513d81cba00794a3f558f74a1b541c73b2308f4f8e74028b5c2bcdf3 +ZIUT = 007a40a59b6632156a43158565a4eeaf80618e501c5ac5afdab4ce3cb76ac99a0bcd17e9eec549373ace8c96aac78e2af6600483a2c49ec81298a083d5237118de96a953999beb26 + +COUNT = 17 +QCAVSx = 01a8682e09eccd1868da202916a561ee8513c0d73470cd341aee79ed93556a3a6e7c7b20302ec74a0c5170a8e37d78a9b5d0de3900eb2a663a7247cf7943fd381d95b3aafd156167 +QCAVSy = 052fecc68f7695d4e41a080c47650d202874da163a1748e550373958e31bd0aae520996d30f384730f4854f5e54e68cc24958adc52e2a4c407356514f3ea7166056dc67e4d118fa8 +dIUT = 0341f8e86182de4fc3f43857250a929a41994d331da154c0249fa0d1c26a6de0e835fa08a8cc524e3dac286383f90bd2f4d2c75142f1d38108d9c062143c8e6edbbda0af87a76ad5 +QIUTx = 02c5c5eb7327402672573c37b492890343ab422b51bc65b600766ec1d07908ff03bcfde7694d832bcde52946339df0aab4074ae07a89f821f5a1130d2b73db0c423ae7a023ae2c18 +QIUTy = 0476ed3dbd936d1c36987a43512c8f0562e316122d05a7edd4e4248984c11f6eb85215d5aaa0262a95f20666c9dbf45248ae177d2dfffa3a6a950533298b5c3f4a1b62da1eafcd51 +ZIUT = 021fd2726973405fc30d2a1f2115907cbd0de90bb6bcb0496452e389b1b10ccf38e2400617040cf0dbb188f345337678b0ad8603dcfe926582d4321f384daec0943e2cd267f48343 + +COUNT = 18 +QCAVSx = 02cdaf139a0cda2800d61128ffe4d7323b34a0fcf48c9400479ff4c8291cbf46f16c41e4409aaedf14bc60a642b2d7baacde8e0051dd8ae01bf5ad2e6e6490c77cd406a999c565e6 +QCAVSy = 078edd29db6a3b87a11505b57c543ffb746a5b40fb83d7206180f3ae9fcb222c5411a77476660c7b311b646310905889a95a0f2fdc35d30fc61cc5560a2914232d62ad36386b9179 +dIUT = 0207a7382d8a22571226e0c06c2681d09bca19b5db7e7bbfc13ac208389df8168d77615e30ca86103936e53dd9af01cdfe24f508ec609399775ce84c8689f8d5f96f652e014e0de8 +QIUTx = 04608dc0512bc55c734cd562ac5825f7ca38b793f8ece9b981cc1c4032ddd8039164d0c646b42b2fd453b5a1d3a74ae23c32c7d584007de3cd34e33121b90fab3ada6621b3ac9785 +QIUTy = 06aa9ffbfd65c509370846707674ac723dac24a6f33a1e0bbcdf8b24ba32cf7bdec8fdc9233b757bc073d64dedf484c6fa01ef28e874fb0d34f58b0e32b18645c30bdcb516ee3841 +ZIUT = 07a47bdc7d54ecd391672f131b3214d0efc4d40195db1ec993a62fe9da875efff5403bd708fa491a01a94f4bddc7d516baffff9fbdd213ca1a4905f9aa679d65da25c0f1fd2afb0a + +COUNT = 19 +QCAVSx = 00051512e4a0dbc535c97be10ffa7425758382883040466601d5391bcb3582c11525293249f24497cc807216b34c92c1e075781c8391c3f6d3d14f88a1d50ea9fc75ff8d51ccf933 +QCAVSy = 039da46cac866ab347617ac5a8b4f1657034e3b8ddb66bc4273e2e1ce01641ece636979de8b2492dc69e88537c36b1c3ad0d35227f867e43df9c8917dce9f8c1ef3ba3cb5ca8ba52 +dIUT = 006ba8f12cc6e0e78df8cc6298848a740025e72c62d099e92584ac76f595ac1fc724cb06a85a07f0d4440faf3ddea2f265f2015dd059a16a03a29915b8731d604512ceef22b841f3 +QIUTx = 0636f435e80600666108737300773a8ed6ffa8ebf8307c81ff5f44353e91bad086331b8feff3f1cdb86e061bde5f71c5fb938f117e2226a97d2b66b098e9ff525182c816e702c6a9 +QIUTy = 01c1bd8afae6a94108fc2c755d5de3fa2a4b3471fc2a5cdf4adda68529bf180ff28db154ab4311247b392e93a335bbe8796608bbd6013f43cdcc846ec22267423c3cfda2ce8a3d96 +ZIUT = 07326196a7decc92c81ae5a0779c9a42f53d94cfa4c3a13f19dbb554138e0e864eee6bc93e39214e2f74705a4b172aab510444c93b5b3e62517bbb7279337102db1c61de349d9747 + +COUNT = 20 +QCAVSx = 004c2de5642431bcc6eb82efd4355540a8b5d23b12b0df7d31ad69425b94549877443ee8dd7c09cfbbed86f13665931d4b2a21759c33e10b4acfc63ba1ef61acaaa18c94e3cfc933 +QCAVSy = 01765b7a37eb806d43196d2931da1a1953742d3e0da7ccb67e0dfdba5e034914cce3ee6393bfde40670f406196067da8b293c6843593dd221c89bf97963676bd044e8c8ab8e717ad +dIUT = 010716f2e774f27f42de3f6c9694d8eca2179823091d202f2ba1629193a1c98700693398ffc83157f7ce4858e7535e3990d219bc249de164558cac807ee159778a012da19e5012bf +QIUTx = 0150b3adde162a7f09350dacf460419fe86b99dcd94f44283fba3e43d281b93bb54282812ce52265a94838968d67a9d6ecdc1b6cb64cf1594521c4749ea43d8e4ec045e645ff238b +QIUTy = 07b43321b6118b87c46c7b52288df5dd1cf7da6183ece5633b4c17cae362d821191f7d57923928339aadf7d85f7f19de9486709e4d2ddef42c55bb4d76a3cb50cad2a098ead5952a +ZIUT = 059052d3e1c66efa4b7dd39e74299e886367d8fe49d7cab90e4f051bec10316438fb29b1290dfdaec169decd622a1010cf0a0275008814f4861b4d83ba78515a8768d978be430011 + +COUNT = 21 +QCAVSx = 025038a0e72ae8c16e36e3e3b504ed7341ef709b9fec8be90177346d76ca7bc7133d0ec280acf066005c5cc10b52aa654335fe820a6617e560e270903ff1c2cc8af1398f24dfe2b0 +QCAVSy = 031074ca3931801a6acb765b6e9144172ed81d999ed9e835bd35526b03ef2a13f78376032b0eb8146c23132365fce176a7cbdca44b35aa379859f688ac26dc64c8149a4322d083d1 +dIUT = 01d0103fc7948af107e51f4d2cc0392b66808059d1f26cba05be6a381f522d4cb854137934accd1cea3360948e406d3108c943769dc700b4c9cc0cc1d84bab58a35e27eb240475f0 +QIUTx = 012bda8ded3ed7e8b6d39b5855a58d725b65e3857c2a674996eb393a3e3f91595bbfa87253a56ebac2b10ed406af9dbff53b22265fbeb5a769cace2b60b45dbf97ceed2b0a04db50 +QIUTy = 026454827efe29b324ae3f2d4c0dca3a3a95491511c531645acf545b45ef6ac4a50c09d3d21f213ca76b96fb18242ecbe08af68755de4e1077173475826eaabed26a75c369cd7b0f +ZIUT = 03acfa4b3d1c2a6b62af23bdff6a215a416d4437ce6cc114d17dc4201195987a5d7301da11b913254702d7172e31d64e59b24deaa3270f20445e51dc484f7a2b8c3cbeb0bb9efb28 + +COUNT = 22 +QCAVSx = 01bdfffd69c2e08fb03c853ef2ebd088e68d233fdb95f0b246de7955d615077dfd0b0ff02c64d01de793359096b85e057b1b7f9f59262dc2757f18243e182e1a0bfe9dcbb027d68b +QCAVSy = 0218be7d956029f139c19d2da346773b16d7afc858ab8dcb60d7e484aecec309cb3fea96af3903637e5db4db678bb5db9b0b18d83cf9ebc1b1aaf24f4367ec533684ce9d56582d43 +dIUT = 032d2f557fe47b8d280f682e24fda627dd7a58e9b00822a3aaf6eb7a014f476c17941adc5e2238a3080d706f1e16a451b7e92942779930c5670a473281cac78b858d1f1cc99b0aff +QIUTx = 040f3130e74b1c8eb265e7c4e6921411eb971418267e8dea879c2e8b563864f23a61b23422c9a06fa178a8a155e3e78457597587f3e35b79f19d0c2e185aef46db95819cbe127b10 +QIUTy = 01c91d27c2ae7113eb03be98e94d3ad6dec791fac2fe0d2c8c98b71371b058a649fa9c3fa3ccdbba932395c27affa20d95ac041bc9978e3f530829a2c64c89b1bcceac06854fb903 +ZIUT = 067a58e5b3287bb9aa83ed9ca2d718cf7165fb574b6a446c3019849cd1584673d561b574bc8f68419437c5e8113e060847cad3b5ddc2f67ad75bc1e3f04554e63a5e4945cfcb65f5 + +COUNT = 23 +QCAVSx = 008fc3b414f3412b403f01c253bd2226150225ddaab34d201089f49d79e5dcc2e3b68216faa66dac44529c7fe3ba4d28d815b088235955713bb7721383533b5d94221b4ed1e162b8 +QCAVSy = 02b32201de272b1b32b6a6a58ea22411c48f5dc5cf0f95872e6751ed622ceecea22a556975de6003869ae20af39b42ba8871789c82e8f3ad3cf6006f43bc4c7d4102032c43f8f797 +dIUT = 03eee29196a8be70eb3a310464059cc0c4c42f13487ab1a0762c2cbe304ebe63503e6c7068a7f4bc197f81f65b4295c14b210f3cb2378b67401fcf52bec02c13b61b6de14e1b7e5b +QIUTx = 0177acc5fe9f42f4de2d27ab9bf6f7e0eace303c266ff8b3469082aba9367e66440bd6b1bd8b6e1aec92b65e35aea8f007f09d4cd67eea5d6000736cabbb9dccc943ebb5656a0586 +QIUTy = 0716f1898e2a8c27319de7a2698f21d5de58a4b8b8dd02b5e433110d3977fee8ec5c089d170af02a4ad3c1fab44b0d1e2a3beba9e0719cd8bf8364478d686c4e35f7457d24d021d6 +ZIUT = 06b272ca3330c0cdfbe60a1746bc0ddea6257536cdd8e976f2517eb541460a3f0e6ea7fec2b495e0f57712c8cac35e8a7d64d876c29851bbfeb6fe726d57e0be43dc76a584ef9c93 + +COUNT = 24 +QCAVSx = 0565a82994d7e6f53eeb6bf67523ee680ffb770118673c3e15c3200e6c8d1f26cabaf00c1da48e6374316497cba5f19f17420f267633f40e5b06362789bff11adf596d5b1cf768ef +QCAVSy = 016b2d4daaca9c6bed976b2064ef54352a58ae34367835a6210e1578291c1de8d67c20bc3d6ffa620c87b3098a2b9f3abb8d2cacd5b2ee2b68399eac4e8f65cebdd66300fd049b5b +dIUT = 0169a2d87586944c3173bf9a2275e3080003db648c2d1e1c56e2c37ce0d7cd9f818ea6b7bba343f774ef0f334ea5c12ef0be7593d04ed945458d71e17112eb01d9041d2133b13473 +QIUTx = 051e521764265af7f01bcd9c3fd022dfdb2d4a2c58b3b23d2e550302c42aadd57d1df6fc18e465bd98442495eed22f3fd6700284c9fa7833b5165149b8e1a91e0e099a0a5732d5c2 +QIUTy = 0198e7e7d094e207528c583865d262a918fc2a39261e95c07dcbd044efd3981899078af3eb97398201a4650f0dccbf19f922c8dbc3839bf6be0053f84531c71843a9e6a102ab58d6 +ZIUT = 02da266a269bdc8d8b2a0c6bb5762f102fc801c8d5394a9271539136bd81d4b69cfbb7525cd0a983fb7f7e9deec583b8f8e574c6184b2d79831ec770649e484dc006fa35b0bffd0b + diff --git a/test/jdk/sun/security/ec/SigGen-1.txt b/test/jdk/sun/security/ec/SigGen-1.txt new file mode 100644 index 0000000000000..83463a21f5b80 --- /dev/null +++ b/test/jdk/sun/security/ec/SigGen-1.txt @@ -0,0 +1,5879 @@ +# CAVS 11.2 +# "SigVer" information for "ecdsa_values" +# Curves/SHAs selected: P-224,SHA-224 P-224,SHA-256 P-224,SHA-384 P-224,SHA-512 P-256,SHA-224 P-256,SHA-256 P-256,SHA-384 P-256,SHA-512 P-384,SHA-224 P-384,SHA-256 P-384,SHA-384 P-384,SHA-512 P-521,SHA-224 P-521,SHA-256 P-521,SHA-384 P-521,SHA-512 K-233,SHA-224 K-233,SHA-256 K-233,SHA-384 K-233,SHA-512 K-283,SHA-224 K-283,SHA-256 K-283,SHA-384 K-283,SHA-512 K-409,SHA-224 K-409,SHA-256 K-409,SHA-384 K-409,SHA-512 K-571,SHA-224 K-571,SHA-256 K-571,SHA-384 K-571,SHA-512 B-233,SHA-224 B-233,SHA-256 B-233,SHA-384 B-233,SHA-512 B-283,SHA-224 B-283,SHA-256 B-283,SHA-384 B-283,SHA-512 B-409,SHA-224 B-409,SHA-256 B-409,SHA-384 B-409,SHA-512 BB-571,SHA-224 B-571,SHA-256 B-571,SHA-384 B-571,SHA-512 +# Generated on Tue Aug 16 15:27:42 2011 + + + + +[P-224,SHA-224] + +Msg = 699325d6fc8fbbb4981a6ded3c3a54ad2e4e3db8a5669201912064c64e700c139248cdc19495df081c3fc60245b9f25fc9e301b845b3d703a694986e4641ae3c7e5a19e6d6edbf1d61e535f49a8fad5f4ac26397cfec682f161a5fcd32c5e780668b0181a91955157635536a22367308036e2070f544ad4fff3d5122c76fad5d +d = 16797b5c0c7ed5461e2ff1b88e6eafa03c0f46bf072000dfc830d615 +Qx = 605495756e6e88f1d07ae5f98787af9b4da8a641d1a9492a12174eab +Qy = f5cc733b17decc806ef1df861a42505d0af9ef7c3df3959b8dfc6669 +k = d9a5a7328117f48b4b8dd8c17dae722e756b3ff64bd29a527137eec0 +R = 2fc2cff8cdd4866b1d74e45b07d333af46b7af0888049d0fdbc7b0d6 +S = 8d9cc4c8ea93e0fd9d6431b9a1fd99b88f281793396321b11dac41eb + +Msg = 7de42b44db0aa8bfdcdac9add227e8f0cc7ad1d94693beb5e1d325e5f3f85b3bd033fc25e9469a89733a65d1fa641f7e67d668e7c71d736233c4cba20eb83c368c506affe77946b5e2ec693798aecd7ff943cd8fab90affddf5ad5b8d1af332e6c5fe4a2df16837700b2781e08821d4fbdd8373517f5b19f9e63b89cfeeeef6f +d = cf020a1ff36c28511191482ed1e5259c60d383606c581948c3fbe2c5 +Qx = fa21f85b99d3dc18c6d53351fbcb1e2d029c00fa7d1663a3dd94695e +Qy = e9e79578f8988b168edff1a8b34a5ed9598cc20acd1f0aed36715d88 +k = c780d047454824af98677cf310117e5f9e99627d02414f136aed8e83 +R = 45145f06b566ec9fd0fee1b6c6551a4535c7a3bbfc0fede45f4f5038 +S = 7302dff12545b069cf27df49b26e4781270585463656f2834917c3ca + +Msg = af0da3adab82784909e2b3dadcecba21eced3c60d7572023dea171044d9a10e8ba67d31b04904541b87fff32a10ccc6580869055fec6216a00320a28899859a6b61faba58a0bc10c2ba07ea16f214c3ddcc9fc5622ad1253b63fe7e95227ae3c9caa9962cffc8b1c4e8260036469d25ab0c8e3643a820b8b3a4d8d43e4b728f9 +d = dde6f173fa9f307d206ce46b4f02851ebce9638a989330249fd30b73 +Qx = fc21a99b060afb0d9dbf3250ea3c4da10be94ce627a65874d8e4a630 +Qy = e8373ab7190890326aac4aacca3eba89e15d1086a05434dd033fd3f3 +k = 6629366a156840477df4875cfba4f8faa809e394893e1f5525326d07 +R = 41f8e2b1ae5add7c24da8725a067585a3ad6d5a9ed9580beb226f23a +S = a5d71bff02dce997305dd337128046f36714398f4ef6647599712fae + +Msg = cfa56ae89727df6b7266f69d6636bf738f9e4f15f49c42a0123edac4b3743f32ea52389f919ceb90575c4184897773b2f2fc5b3fcb354880f15c93383215d3c2551fcc1b4180a1ac0f69c969bbc306acd115ce3976eff518540f43ad4076dbb5fbad9ce9b3234f1148b8f5e059192ff480fc4bcbd00d25f4d9f5ed4ba5693b6c +d = aeee9071248f077590ac647794b678ad371f8e0f1e14e9fbff49671e +Qx = fad0a34991bbf89982ad9cf89337b4bd2565f84d5bdd004289fc1cc3 +Qy = 5d8b6764f28c8163a12855a5c266efeb9388df4994b85a8b4f1bd3bc +k = 1d35d027cd5a569e25c5768c48ed0c2b127c0f99cb4e52ea094fe689 +R = 2258184ef9f0fa698735379972ce9adf034af76017668bfcdab978de +S = 866fb8e505dea6c909c2c9143ec869d1bac2282cf12366130ff2146c + +Msg = c223c8009018321b987a615c3414d2bb15954933569ca989de32d6bf11107bc47a330ab6d88d9b50d106cf5777d1b736b14bc48deda1bc573a9a7dd42cd061860645306dce7a5ba8c60f135a6a21999421ce8c4670fe7287a7e9ea3aa1e0fa82721f33e6e823957fe86e2283c89ef92b13cd0333c4bb70865ae1919bf538ea34 +d = 29c204b2954e1406a015020f9d6b3d7c00658298feb2d17440b2c1a4 +Qx = 0e0fc15e775a75d45f872e5021b554cc0579da19125e1a49299c7630 +Qy = cb64fe462d025ae2a1394746bdbf8251f7ca5a1d6bb13e0edf6b7b09 +k = 39547c10bb947d69f6c3af701f2528e011a1e80a6d04cc5a37466c02 +R = 86622c376d326cdf679bcabf8eb034bf49f0c188f3fc3afd0006325d +S = 26613d3b33c70e635d7a998f254a5b15d2a3642bf321e8cff08f1e84 + +Msg = 1c27273d95182c74c100d85b5c08f4b26874c2abc87f127f304aedbf52ef6540eba16dd664ae1e9e30ea1e66ff9cc9ab5a80b5bcbd19dde88a29ff10b50a6abd73388e8071306c68d0c9f6caa26b7e68de29312be959b9f4a5481f5a2ad2070a396ed3de21096541cf58c4a13308e08867565bf2df9d649357a83cdcf18d2cd9 +d = 8986a97b24be042a1547642f19678de4e281a68f1e794e343dabb131 +Qx = 2c070e68e8478341938f3d5026a1fe01e778cdffbebbdd7a4cd29209 +Qy = cde21c9c7c6590ba300715a7adac278385a5175b6b4ea749c4b6a681 +k = 509712f9c0f3370f6a09154159975945f0107dd1cee7327c68eaa90b +R = 57afda5139b180de96373c3d649700682e37efd56ae182335f081013 +S = eb6cd58650cfb26dfdf21de32fa17464a6efc46830eedc16977342e6 + +Msg = 069ae374971627f6b8503f3aa63ab52bcf4f3fcae65b98cdbbf917a5b08a10dc760056714db279806a8d43485320e6fee0f1e0562e077ee270ace8d3c478d79bcdff9cf8b92fdea68421d4a276f8e62ae379387ae06b60af9eb3c40bd7a768aeffccdc8a08bc78ca2eca18061058043a0e441209c5c594842838a4d9d778a053 +d = d9aa95e14cb34980cfddadddfa92bde1310acaff249f73ff5b09a974 +Qx = 3a0d4b8e5fad1ea1abb8d3fb742cd45cd0b76d136e5bbb33206ad120 +Qy = c90ac83276b2fa3757b0f226cd7360a313bc96fd8329c76a7306cc7d +k = 1f1739af68a3cee7c5f09e9e09d6485d9cd64cc4085bc2bc89795aaf +R = 09bbdd003532d025d7c3204c00747cd52ecdfbc7ce3dde8ffbea23e1 +S = 1e745e80948779a5cc8dc5cb193beebb550ec9c2647f4948bf58ba7d + +Msg = d0d5ae3e33600aa21c1606caec449eee678c87cb593594be1fbb048cc7cfd076e5cc7132ebe290c4c014e7a517a0d5972759acfa1438d9d2e5d236d19ac92136f6252b7e5bea7588dcba6522b6b18128f003ecab5cb4908832fb5a375cf820f8f0e9ee870653a73dc2282f2d45622a2f0e85cba05c567baf1b9862b79a4b244e +d = 380fb6154ad3d2e755a17df1f047f84712d4ec9e47d34d4054ea29a8 +Qx = 4772c27cca3348b1801ae87b01cb564c8cf9b81c23cc74468a907927 +Qy = de9d253935b09617a1655c42d385bf48504e06fa386f5fa533a21dcb +k = 14dbdffa326ba2f3d64f79ff966d9ee6c1aba0d51e9a8e59f5686dc1 +R = ff6d52a09ca4c3b82da0440864d6717e1be0b50b6dcf5e1d74c0ff56 +S = 09490be77bc834c1efaa23410dcbf800e6fae40d62a737214c5a4418 + +Msg = 79b7375ae7a4f2e4adad8765d14c1540cd9979db38076c157c1837c760ca6febbb18fd42152335929b735e1a08041bd38d315cd4c6b7dd2729de8752f531f07fe4ddc4f1899debc0311eef0019170b58e08895b439ddf09fbf0aeb1e2fd35c2ef7ae402308c3637733802601dd218fb14c22f57870835b10818369d57d318405 +d = 6b98ec50d6b7f7ebc3a2183ff9388f75e924243827ddded8721186e2 +Qx = 1f249911b125348e6e0a473479105cc4b8cfb4fa32d897810fc69ffe +Qy = a17db03b9877d1b6328329061ea67aec5a38a884362e9e5b7d7642dc +k = ab3a41fedc77d1f96f3103cc7dce215bf45054a755cf101735fef503 +R = 70ccc0824542e296d17a79320d422f1edcf9253840dafe4427033f40 +S = e3823699c355b61ab1894be3371765fae2b720405a7ce5e790ca8c00 + +Msg = 8c7de96e6880d5b6efc19646b9d3d56490775cb3faab342e64db2e388c4bd9e94c4e69a63ccdb7e007a19711e69c06f106b71c983a6d97c4589045666c6ab5ea7b5b6d096ddf6fd35b819f1506a3c37ddd40929504f9f079c8d83820fc8493f97b2298aebe48fdb4ff472b29018fc2b1163a22bfbb1de413e8645e871291a9f6 +d = 8dda0ef4170bf73077d685e7709f6f747ced08eb4cde98ef06ab7bd7 +Qx = 7df67b960ee7a2cb62b22932457360ab1e046c1ec84b91ae65642003 +Qy = c764ca9fc1b0cc2233fa57bdcfedaab0131fb7b5f557d6ca57f4afe0 +k = 9ef6ebd178a76402968bc8ec8b257174a04fb5e2d65c1ab34ab039b9 +R = eef9e8428105704133e0f19636c89e570485e577786df2b09f99602a +S = 8c01f0162891e4b9536243cb86a6e5c177323cca09777366caf2693c + +Msg = c89766374c5a5ccef5823e7a9b54af835ac56afbbb517bd77bfecf3fea876bd0cc9ea486e3d685cfe3fb05f25d9c67992cd7863c80a55c7a263249eb3996c4698ad7381131bf3700b7b24d7ca281a100cf2b750e7f0f933e662a08d9f9e47d779fb03754bd20931262ff381a2fe7d1dc94f4a0520de73fa72020494d3133ecf7 +d = 3dbe18cd88fa49febfcb60f0369a67b2379a466d906ac46a8b8d522b +Qx = b10150fd797eb870d377f1dbfa197f7d0f0ad29965af573ec13cc42a +Qy = 17b63ccefbe27fb2a1139e5757b1082aeaa564f478c23a8f631eed5c +k = 385803b262ee2ee875838b3a645a745d2e199ae112ef73a25d68d15f +R = 1d293b697f297af77872582eb7f543dc250ec79ad453300d264a3b70 +S = 517a91b89c4859fcc10834242e710c5f0fed90ac938aa5ccdb7c66de + +Msg = 30f0e3b502eec5646929d48fd46aa73991d82079c7bd50a38b38ec0bd84167c8cf5ba39bec26999e70208af9b445046cd9d20c82b7629ca1e51bdd00daddbc35f9eb036a15ac57898642d9db09479a38cc80a2e41e380c8a766b2d623de2de798e1eabc02234b89b85d60154460c3bf12764f3fbf17fcccc82df516a2fbe4ecf +d = c906b667f38c5135ea96c95722c713dbd125d61156a546f49ddaadc6 +Qx = 3c9b4ef1748a1925578658d3af51995b989ad760790157b25fe09826 +Qy = 55648f4ff4edfb899e9a13bd8d20f5c24b35dc6a6a4e42ed5983b4a0 +k = b04d78d8ac40fefadb99f389a06d93f6b5b72198c1be02dbff6195f0 +R = 4bdd3c84647bad93dcaffd1b54eb87fc61a5704b19d7e6d756d11ad0 +S = fdd81e5dca54158514f44ba2330271eff4c618330328451e2d93b9fb + +Msg = 6bbb4bf987c8e5069e47c1a541b48b8a3e6d14bfd9ac6dfaa7503b64ab5e1a55f63e91cf5c3e703ac27ad88756dd7fb2d73b909fc15302d0592b974d47e72e60ed339a40b34d39a49b69ea4a5d26ce86f3ca00a70f1cd416a6a5722e8f39d1f0e966981803d6f46dac34e4c7640204cd0d9f1e53fc3acf30096cd00fa80b3ae9 +d = 3456745fbd51eac9b8095cd687b112f93d1b58352dbe02c66bb9b0cc +Qx = f0acdfbc75a748a4a0ac55281754b5c4a364b7d61c5390b334daae10 +Qy = 86587a6768f235bf523fbfc6e062c7401ac2b0242cfe4e5fb34f4057 +k = 854b20c61bcdf7a89959dbf0985880bb14b628f01c65ef4f6446f1c1 +R = a2601fbb9fe89f39814735febb349143baa934170ffb91c6448a7823 +S = bf90f9305616020a0e34ef30803fc15fa97dffc0948452bbf6cb5f66 + +Msg = 05b8f8e56214d4217323f2066f974f638f0b83689fc4ed1201848230efdc1fbca8f70359cecc921050141d3b02c2f17aa306fc2ce5fc06e7d0f4be162fcd985a0b687b4ba09b681cb52ffe890bf5bb4a104cb2e770c04df433013605eb8c72a09902f4246d6c22b8c191ef1b0bece10d5ce2744fc7345307dd1b41b6eff0ca89 +d = 2c522af64baaca7b7a08044312f5e265ec6e09b2272f462cc705e4c3 +Qx = 5fad3c047074b5de1960247d0cc216b4e3fb7f3b9cd960575c8479fc +Qy = e4fc9c7f05ff0b040eb171fdd2a1dfe2572c564c2003a08c3179a422 +k = 9267763383f8db55eed5b1ca8f4937dc2e0ca6175066dc3d4a4586af +R = 422e2e9fe535eb62f11f5f8ce87cf2e9ec65e61c06737cf6a0019ae6 +S = 116cfcf0965b7bc63aecade71d189d7e98a0434b124f2afbe3ccf0a9 + +Msg = e5c979f0832242b143077bce6ef146a53bb4c53abfc033473c59f3c4095a68b7a504b609f2ab163b5f88f374f0f3bff8762278b1f1c37323b9ed448e3de33e6443796a9ecaa466aa75175375418186c352018a57ce874e44ae72401d5c0f401b5a51804724c10653fded9066e8994d36a137fdeb9364601daeef09fd174dde4a +d = 3eff7d07edda14e8beba397accfee060dbe2a41587a703bbe0a0b912 +Qx = 6dd84f4d66f362844e41a7913c40b4aad5fa9ba56bb44c2d2ed9efac +Qy = 15f65ebcdf2fd9f8035385a330bdabec0f1cd9cc7bc31d2fadbe7cda +k = 7bb48839d7717bab1fdde89bf4f7b4509d1c2c12510925e13655dead +R = 127051d85326049115f307af2bc426f6c2d08f4774a0b496fb6982b1 +S = 6857e84418c1d1179333b4e5307e92abade0b74f7521ad78044bf597 + +[P-224,SHA-256] + +Msg = 2b49de971bb0f705a3fb5914eb7638d72884a6c3550667dbfdf301adf26bde02f387fd426a31be6c9ff8bfe8690c8113c88576427f1466508458349fc86036afcfb66448b947707e791e71f558b2bf4e7e7507773aaf4e9af51eda95cbce0a0f752b216f8a54a045d47801ff410ee411a1b66a516f278327df2462fb5619470e +d = 888fc992893bdd8aa02c80768832605d020b81ae0b25474154ec89aa +Qx = 4c741e4d20103670b7161ae72271082155838418084335338ac38fa4 +Qy = db7919151ac28587b72bad7ab180ec8e95ab9e2c8d81d9b9d7e2e383 +k = 06f7a56007825433c4c61153df1a135eee2f38ec687b492ed40d9c90 +R = 0909c9b9cae8d2790e29db6afdb45c04f5b072c4c20410c7dc9b6772 +S = 298f4fcae1fe271da1e0345d11d07a1fca43f58af4c113b909eedea0 + +Msg = 1fa7201d96ad4d190415f2656d1387fa886afc38e5cd18b8c60da367acf32c627d2c9ea19ef3f030e559fc2a21695cdbb65ddf6ba36a70af0d3fa292a32de31da6acc6108ab2be8bd37843338f0c37c2d62648d3d49013edeb9e179dadf78bf885f95e712fcdfcc8a172e47c09ab159f3a00ed7b930f628c3c48257e92fc7407 +d = 5b5a3e186e7d5b9b0fbdfc74a05e0a3d85dc4be4c87269190c839972 +Qx = 897089f4ef05b943eeac06589f0e09ccc571a6add3eb1610a2fc830f +Qy = 62ba3f6b3e6f0f062058b93e6f25b6041246c5be13584a41cae7e244 +k = 5b6f7eca2bcc5899fce41b8169d48cd57cf0c4a1b66a30a150072676 +R = f12c9985d454ffbc899ebbbb6cf43e3debcac7f19029f8f2f35cce31 +S = 12fcb848adbd8b1b4c72b2b54a04d936e4a5f480ae2a3ea2e3c1baae + +Msg = 74715fe10748a5b98b138f390f7ca9629c584c5d6ad268fc455c8de2e800b73fa1ea9aaee85de58baa2ce9ce68d822fc31842c6b153baef3a12bf6b4541f74af65430ae931a64c8b4950ad1c76b31aea8c229b3623390e233c112586aa5907bbe419841f54f0a7d6d19c003b91dc84bbb59b14ec477a1e9d194c137e21c75bbb +d = f60b3a4d4e31c7005a3d2d0f91cb096d016a8ddb5ab10ecb2a549170 +Qx = 40a4ab1e6a9f84b4dedb81795e6a7124d1cfdfd7ec64c5d4b9e32666 +Qy = 83aa32a3c2fc068e62626f2dafce5d7f050e826e5c145cd2d13d1b27 +k = c31150420dfb38ba8347e29add189ec3e38c14b0c541497fb90bf395 +R = bf6c6daa89b21211ea2c9f45192d91603378d46b1a5057962dafaf12 +S = cb6b237950e0f0369323055cd1f643528c7a64616f75b11c4ddd63c7 + +Msg = d10131982dd1a1d839aba383cd72855bf41061c0cb04dfa1acad3181f240341d744ca6002b52f25fb3c63f16d050c4a4ef2c0ebf5f16ce987558f4b9d4a5ad3c6b81b617de00e04ba32282d8bf223bfedbb325b741dfdc8f56fa85c65d42f05f6a1330d8cc6664ad32050dd7b9e3993f4d6c91e5e12cbd9e82196e009ad22560 +d = c8fc474d3b1cba5981348de5aef0839e376f9f18e7588f1eed7c8c85 +Qx = 66f49457ed15f67ed4042195856f052fe774077f61cebcb9efddc365 +Qy = 3a6e3f3423eec7308a69eb1b0416d67cc3b84d24f251d7cbdb45c079 +k = 5e5405ae9ab6164bb476c1bb021ec78480e0488736e4f8222920fbd9 +R = 7b7beaf9f696ca1a8051527478c4c075ab45aa4768937886dbf38618 +S = 93d4cf110a37c5a6f15c4e6024822118539e860dee2f60b8c3f462f6 + +Msg = ef9dbd90ded96ad627a0a987ab90537a3e7acc1fdfa991088e9d999fd726e3ce1e1bd89a7df08d8c2bf51085254c89dc67bc21e8a1a93f33a38c18c0ce3880e958ac3e3dbe8aec49f981821c4ac6812dd29fab3a9ebe7fbd799fb50f12021b48d1d9abca8842547b3b99befa612cc8b4ca5f9412e0352e72ab1344a0ac2913db +d = 04ef5d2a45341e2ace9af8a6ebd25f6cde45453f55b7a724eb6c21f6 +Qx = 8d642868e4d0f55ee62a2052e6b806b566d2ac79dbde7939fe725773 +Qy = 79505a57cd56904d2523b3e1281e9021167657d38aeb7d42fc8ec849 +k = ec60ea6f3d6b74d102e5574182566b7e79a69699a307fee70a2d0d22 +R = 2fd7fcbb7832c97ce325301dd338b279a9e28b8933284d49c6eabcf6 +S = 550b2f1efc312805a6ed8f252e692d8ee19eaa5bcd5d0cda63a1a3f0 + +Msg = 4cc91f744ac858d3577e48813219aa3538dd813b186b42d1e6218376f07cc1cc448ddd6b37240e98bf953f49cf54d65c12878b33c0bf6eb1c60254f0b6fa974f847e53abc56773eef6f29885dfc619e6a48fc15a667ca94001a0c945b6357a53221b0f4b266181456b0d2d25e90708777f1a6f85971c00140c631c1991e0fd06 +d = 35d4bbe77d149812339e85c79483cb270bdac56bbf30b5ef3d1f4d39 +Qx = 7924b1d7f5920cce98e25094e40f2eb3eb80d70b17e14b3d36c3671c +Qy = 26c5af35f71e61858582b7cc2b41790597c53ee514ffdf7a289d108c +k = 751869c1d0e79eb30aae8fbfb6d97bfa332123fd6b6c72c9cd3c1796 +R = 26bb1b92b0f01e94eba5fa429271371db527ce857abba13bd1103f64 +S = 836aba9c63e1252c2b2d72a21e6a41b82241ebe32647e7f814652bcb + +Msg = 58f43cc1924de4bc5867664adbc9d26b4f096a43aca47c27c52851b006dc2a658919ef9ce5b5ac48372703be15ac51631c2bd84b88f479f113b0569a9a09e230ec1e8e573474c6075284d3e57d973829af35325d9e7dab4a5f9b065155bbcaff3642a82ef4c9b9e127d3575c050721653da3b087d3fa394192897a5519527d19 +d = 2c291a393281b75264c9b8817af684fa86a1cdc900822f74039dc5d6 +Qx = 18cb5826ad60e6696bf07655032a3749f6577ca36da3ccd6e66a137c +Qy = 194e14820fe02d784fd1363ff7a30399518309765bd3f4412d646da2 +k = e2a860416229dfd3f5a5cc92344ca015093a543943a0d8f73bf2b2fd +R = 00e300c1ef4a8c4ca5da6413856f8981db49de29bdf03f32ffc3ceab +S = f250f18a51ba5f63e1584097841099fa6ae4e98ee458c061d1d5aed7 + +Msg = 113a2806b052fde683ee09453098e402204155afb3776fd1cad3a9103421d327eab8f9ec0dd050ffcc83f93b34ea707705fabeccfe43ab1a71c95298fd3ec769d99ead1066950eee677d225816e0faad19cf69e1b35d16771689e2092cafe16d7c0dd7b0db73fffb8d0f3eaed83004dd21e753530ec939c89ba25578fa5f785b +d = 831ea25dbeda33d272a1382c5def0e83929170ab06a629eed6ee244b +Qx = 076518e393940d42dfd09819409d66966d8c9189c83d554a9cc8a082 +Qy = 44d0ceaf4c0f50e46bea4a52e30423ce3ada19edd363ac5694c65cb8 +k = 6be6dd9f6a083915ccba54626caf12d246d3aece0a7eda7d8d85599c +R = ff1460946e06fb6f5d35e8d2625ca70ffb9b45308e3fabf6ad8351b1 +S = 6029aa3990918e8cb8a388d53b0772e5cdfff49c3405fe0d3a95933a + +Msg = 64cbfc8f2e2149a31b3e8a80c4a552f6c62aaeb7990b6e0ee55500a9d17be04213406578caf315951086dff5c2af3b5ce17d425d185101ef26f86396ba3a129a4f3f8e2dd595f59efb6c0f5c2dcc394569d7268695e9ac7daa84203f1f1895f1f9e4b514a5c9cd23baa63454710144fe735ad9b8f42d8c43267aa434a26d7e5f +d = 70f74c7324ef137318b610ead8ddc5b964e0eed3750b20612fc2e67b +Qx = 279649e2a2918e683520cde3fc98b0ae58a7100e8de35e7c9cc797b6 +Qy = aa4de6be34be61f02880139787b9038f4554a8ef1c994b887c2974b5 +k = 8e984864f86f7a2a73f3edda17dbccd13fac8fa4b872814abf223b1b +R = 3b18736fa11d04e27e2614cda03a63ec11a180f357b0b3192920d09c +S = 2f0f3dbd570727b14fbb29155538e62c930dd51c4035275c1365dc60 + +Msg = a10a11c8e30fff118d371daf824f16c08200b83ea059436466a4611ccac93b2dea2de8c1006f946196aef7fe9b0c251a391b0340f21797798278b412ff2b53842eec6450728e2bca062f8337a2c204b9ea04ff660cd4d4db559f2f11c4d8ef199021339fcc82396f7a93926cf5f247e37d8067fe50692de54f102bd5ab51925c +d = 026be5789886d25039c11d7d58a11a6e1d52cb1d5657561f2165b8a8 +Qx = 3fa617c50b177da1a2bdb98b780ad21ad1195c4bd24465f6187de3c9 +Qy = e3fd8d8876dfd03a4a4e31a1acad3a08d983826d286c250c4e5620c1 +k = 0128b8e3f50731eb5fcc223517fc0cf6b96cd1d2807eb4524bc46f77 +R = 3a6b633f96f3d0b6d54f7fb29ac33709e4f0dd8fa0e51606ed9765ca +S = 63e8c119dfa51784decd864f6911f2210a80f8f02d472d88df10d119 + +Msg = b3f720bf566ffa369259f4361959ae0641d2755ec264a4c4349981df2b02563275b2b9adb5aee47f7a456760a971991ffed6b17809bb9694138d1677fa916123795239353158fc6b22d10f20d26f5d2dcd8c56c44373eea5b93067dba2d7c5318dac2e9e8714873cb1b37f58c011fd14fa1e535554efe05f468bfc8e11cd8b99 +d = e79c18d935c2839644762867aa793201f96a3cde080c5968412ce784 +Qx = b7ae1e992b1c7fde1141f40bd913358538ca0f07f62b729f13cea327 +Qy = 811252d12120e04805fc171a439d382c43b68a21e1a0bdf5e4ec1da4 +k = 7abedab1d36f4f0959a03d968b27dd5708223b66e0fc48594d827361 +R = d35047d74e1e7305bb8c1a94e8ae47cb1591c3437a3e185e00afe710 +S = d9c425c9d5feb776ac8952e6c4eee0ecd68aef2f0e7bff2e49c9185e + +Msg = 0a398a46df7ccc48d1e7833f8bbc67100f1ef77a62dc78bbc115b2a662f9591fbaaa91ad3d788e2fdd1b3164e45293d4f5686c151296901768028ac80ded4bf89c647ad35f0c7c4cb318c0c757c1d83c44d850e5fd4677281b3f13b1ee54de79c8c042813f9d3312dcc6111a68299cb7e829557d7f3d96e702f65aefc6499415 +d = 0d087f9d1f8ae29c9cf791490efc4a5789a9d52038c4b1d22494ad8c +Qx = cd95cf8fb1cd21690f40d647f2353672a1076cc6c46bddaad2d0fc56 +Qy = 934262f74d9ee0f8a2754f64cb7415923d64bf00c94a39b52803f577 +k = 557d0e3995dc6377b3911546dd7aeaeec62a6d8f2af6a274382fc37f +R = 56df0ea6afdcc232ceb41729eec00cf906b69b6e28423a36d3c92cc5 +S = f4f70fd948c9a147f55317fdea7b8a84c33e721014552d5800d63edc + +Msg = 8c33616821a6038b448d8918668977fcf1ef5aa0cf7c341837b39bbcc9bca875a3757f4b392630e9995b9bbe4eb66978b877586adaa02f99d2344dae082a7603351d8ffcfca081ab403cd0acb90d078dd1d0789c2eb3185c62bff2d9f04cd38e509e3b83c12ed0a5c6808fc42f7ba5b06acdc496c8ad9be648ee6a4505f8560f +d = 0830aebb6577d3a3be3ba54a4501c987b0e0bb593267b9bbadb66583 +Qx = b88652020e083ccc1c43dc83d1881884dd4c7e3b4e3460b344b1ea64 +Qy = 22b69b517f86d7c26dc37c0f8feb4bb07fe876149fbcc3334fd2805b +k = e4f4a3280574c704c2fde47ca81ec883d27f2c5a961a294db7cda9d2 +R = b30b8a0079d9a134b5e1618c2ac63e3fbe0e95866b9dbc5f423f2707 +S = 3dc36746610271ef66e0aa52cc2ccadc5c9b08dc769e4dc4f6538c11 + +Msg = 94d56535fd4edfe67a0daa6579f9d53bf6b7b8830ae2aeb62892ff59f18756ddf2811b449c7d20d65d54f8507de4e7c50eaa084830637812aa4b250a4d61ab67845be36e4a41cdc0a70f8d6e3a63d4514f0dc197e6486015046a316153d5f3a3a4a0ae1ed7ea5fa55e12e73d333333685c02e0eb636234ea7e6d4b76b4b76b5a +d = 2acc9b97e625263e8e4cd164302c7d1e078bfcdd706111a13ccda5b2 +Qx = ce1a06f82df874dded37cca03b56c0648e4e8917ecd40ee73ee61588 +Qy = ceb6177b8f1ac7c5c6e6e1f7737cc3026952ee392badd2cd7af32f9d +k = e401fa80f96480d437ed4f61a783888062ec33d530b188fd48016a6d +R = 28674f447c4742e4087bbccfb522fbad4e18b56031d2ce8f532b078a +S = a5a7a13d15b423dd17771f73cea98d89dbffa846cc209b45c0e29b76 + +Msg = 5d8ebdf9eb28b47bdafaa36bf0b66a9eaf99b6c83959da4f2b1151b4f4ecd28fb115a64c0cb9491093a7e9b9c53ec423e4c72e7765bb9c818da0e8c428667e44474a71db4867130c77c40bfd8544b2d7b9d6464d2b8e6a48482153256a32437c3a747231f51134dd14c703407e31146a6fcde23bededcf16950486e90ca69ac0 +d = f4e873d4fb944fb52323406f933815092b7672221de4d1c45917f3fc +Qx = 0dc2cdddb990341adb1de73f02d87fc3822485a659a15145f4251d5f +Qy = cf78b2a83c7352eda1af2c74e1804ea04b35f76c04e89d90281dc2bb +k = 5d1476c682a64162fd2fdc82696fc8cab1469a86f707ea2757416e40 +R = 82982b38ed465138df4018d7cfb835edcb591cb57446ca49d163782b +S = 8ef1d7b326cabee7f7ab95b7b98d3c27a069c0fd95a1599c0ccb422b + +[P-224,SHA-384] + +Msg = 25e4416695f77551fdce276355528ccf1ddc2483821c5d22d751d50111ca2fadc6593b52c74f4b5957494f1df25b0b2f86950d0d19229ec6506fee8581d2dd09d48418b146ff16bd84a17ca0dc83b1888eb407376da6c8a88fa1e60b8c2a2471dfde4b3996ef673d5bde3d70c434dc9f2488e9de16ae657d29e5e59ec922a1ec +d = 62c572ee0d6f81b27e591d788bfc2f42b5105d2663078dfb58069ebd +Qx = bd6ba605639b98fa8113a16a3bb004ddfaec901c98a931206165f4a5 +Qy = a3190b10ef39e88abd60b2293b4707512b45c6c5ed5794cc11454427 +k = 0f0bb1e428bcdebf4dc62a5278068efc0f8ce75f89e89b3630f102b2 +R = aac0ea27e129f544abcc77f110e70bbdd5aa3e425dc39d5e8887025d +S = 10e5dd06aee6b8419a04aa33d9d5678b0039c3acc3c4b61fe106bfdc + +Msg = 9164d633a553deccf3cbd2effccf1387fa3177cd28c95d94a7d1a3e159c5e5c027758cc26493301b2f4d141d8d07a5fe5fead987ce5f30abeafcb48c302afc6c2309f0e93d9b6818cbb6972d222cb7b01302dfe202ae83b89f53150ae4a0e2b8fc0fd1091f19b4ab2e6ab213ab322d04f2c5f57113bfad3c5675227237abf773 +d = e2f86bf73ba9336fa023343060f038e9ad41e5fe868e9f80574619a3 +Qx = f5d5346f17898ea6bbdfff19c216a8757a5dc37b95315f5481628381 +Qy = ae61fd172ac8b7a4f13870a932dece465834cbd4f50bbcfb802c824e +k = 35724ac043e3b44b73b5a7919cf675190306d26aa67c27c28c873534 +R = 535147c265af138eec50c7fb570bcc8d2e6f675597b0fcc034e536bc +S = 743812c188a1dddf9fb34b90738f8b2e58760d6cd20ccceb1bb9c516 + +Msg = 019df05929321ecea7ee1de4f412aba1c8d3c24437db04b194a68a0a59dd871be10bd3a4be6edf551350ea49fc7155a4d887e1221486291abe77a30633a4c4f7868fe2df24311cba0c73804883954460e122387ed414111ff96ff1aebac8b6a6491d8a0d16e48a63bf3d027c0f68ee4a4b234d73b412196706af8ea022b4dcef +d = b0a203438e2586d7575bc417a4a798e47abc22aa3955b58fc2789f17 +Qx = dc5d217862a1e5b00c95affa9d8b925a72b9beaeb7a86dc397e788d8 +Qy = 5f05f8e976ae1eb1036eca6d683a82850795bf9127dee5f8b2859445 +k = 408e9c8b1f33136d6ddb93ff3a498bc09d4eee99bf69cdd5af0aa5a2 +R = 1b5a964c8b1fc634c6e2b82322499df1d7f0c12a4d2a77723c816ab8 +S = cf54599a36ca064fae0aa936de5266f87704409d22a15d28c01b7f2a + +Msg = 5d09d2b1d3fa6e12c10d8b26dc9aabc8dc02bd06e63ff33f8bb91ede4b8694592a69e4ed4cdf6820069e2b9c7803658949e877ffe23bf90bcf5ce1409c06c71d86885a94048b05ac0ec9db193e489a5a2bfa367caf6aa8ecdb032be366174343f6875d2fe1785e8d77334f5f469cec64998e08d3303e5c9a1923b34fdc105d65 +d = efcfa50fad6fb2065f9a55f28c0c42fa24c809ccb19b6fc6d8ffb085 +Qx = 61521a0cfb72be77ba33cb3b8e022743cd9130ff49e97093b71aa178 +Qy = ce0819aedaf6fce639d0e593f8ab0147eeb6058f5f2b448231584ea9 +k = d1eea821f286eae6ebc1f61b08f9ad4323a3787e94af4c32cd31351b +R = b37caaa71103752ac559f9eb4943324409ebfa8b585f684dcaa5c411 +S = 7c28e7619e2944ab4b7be022878c8052ebdf2cae5dff4f976c49686a + +Msg = 50f6dfc81c6cf189e0a310f992907fe93356cee9dea9a41c7671a8daf3f4cfe0c459ce6122c1e731dbf7593419d7114cb73b46956158a982c5d52c72f43f0f822046093c69aeff1f7e4cd8af00ba655c5baa2e7b6a400b4be1f6fd51b3e4cfb35a69c80a28c5cafb771b6c2e52e0aeef0e3fd045e8d40745f3f8b74fd969f816 +d = 61a17816937987764cdc064dc7b5b4f5b16db1023acdfe25902957dd +Qx = a7e975c0a8f87c683bb8e31bc160843a7b69c945f4850bd60e1c08c0 +Qy = 8930a454dcc2aa13bed7ea89368b2c9d689d816b2acf4e52585ee9c4 +k = 44b1fdec2629f9075f89c134ac28ff19bfddaa9db02a5d7f853582b4 +R = b0f5635d8bc9c53a1d54a3ec63de59ed66e6b2358d4ab79755414326 +S = 67c68fe265c7e5aba4232deeafb88545a2aa266fb9f2c2bb3f3ae8d2 + +Msg = e90129ac6672c85bb7b6b18e9dc199c96c81fd65034b53c77818364d512366fb9cd1bc7c82404c451e561fc1ed916c0948f6ac561b33a1ccca093f07684b8c2bafa9e966377bd208556018a5bafb9edcecf70498c7140fe9c8cf3ad8b8c3b0aa489df797944465047465415bb0e24333235fcdd59a98829a3941eaaf62033e82 +d = 79d5367314ec664aa0f6ca36f95549502a05bf8400bf532d669fab8d +Qx = 3191f0237102dac159032ab2dde53cf56c9ec827b5caddfe9e83c02a +Qy = b496b1bdcca4434ac0d0d91ea38ff3bc33f9f54095bfe17796d5a9e2 +k = da529c52f5cc1f435d873109cd991d6cd7e1631d9ff1dd9521dd5db6 +R = 8e0ac63903f4921755430572c3f08bc272790639bdf1009fe2a9a714 +S = 6278c841a2d0a270791fe54b36c49d426d67907aa4e4f59c8638ad97 + +Msg = 3c9a483c9bee33b601549c592a82e95b4319b1e74b777877f0971bcb4273716b268e8f99f876e42f942f4cf08284896bbc1ffbf094ac0956c3cedfc3580cffa8c74fc6db29a371f2da2d05edb9185ece741fe0d3fabfe9d5b4d373755ebed13dc6840cfa3283b9ea46ec8b95c434f253ae86998182e9cc0e95ee64f323fc74b0 +d = 1320eedad4745121793a7eaf732b0b4498f7cb456cac8cf45a1f66f0 +Qx = 9fdd99906ab77fd29e9021bde947d05a7a9eb153612269bfb0899bc9 +Qy = 681b65b9ac8e4c2899bb622dafb253b7bf5a6e38e5f6595f997c291a +k = 66ed8d8934633f4125f593cf1b1d3745c4db1f15dde60cf46ca1c7f2 +R = 80199485a3a96447b39f7679cd47412a78675ba17dcbd10465dc5b48 +S = a251fd9f136a3cb0dd0bc80659ae032e4a761ba7045da0034553fb8c + +Msg = bfc073fdda63c5fccaa0ca8770c293e8154e7aec56128bbac4fdbd541d602216ebf7ca1e02b514d6e396f20683802ba3f334310a9226576926e3bb19ceee27738d13377cbafeb09d091043501702a07aa31d1f29d50ddc55adcf16ffd40578e734a4e6cb6535f26ad48e0c62ad90e79720000e87d419e92dca3e11f943655b03 +d = e18821329447d3f65ba7279e96bd4624ffa1b32b90f6e8331b1e876d +Qx = 46c9ed837232c47022df2f1a1578fbe65ac9f2e81c98a74cc22ea31a +Qy = 6fc5e9568ae62b31412a0b0b367242e9fd7e518c83aa06a069e1d90d +k = a4c1eb402a2fb3af26e0e14a3d2fc8ed3bc1a8b2475270356a79fdd3 +R = d478b68733d8ad44be46766e7b66af782fbdc7ff7ed0b191176da98a +S = 5eae9160ccf71fd1d359d89cecce72ef8afaeee2365f6ba828aa450a + +Msg = 08079955d1a1f33728128c73673ec9f21a6ce138dcab5adc4dc068e6ab57314b9fbd8b013123b2fdafa9524fbdd0288777a233de8055cccfad83046ada6a19f01c47817496667bba8fc8b9456fc0e044a562d931dab1adcb66af8b66325bdf28d83ded3e2937958ccd19da540d70ef2c189f55a506c9c0d63406394c5bd3823b +d = f73e030d5a696b358986d3efaca121cf71f775f8835a21e6135145d7 +Qx = 9ca2c6ea87ac8dd3a23a5b4010841a7c8af309038882ae44634bcf55 +Qy = b0a347dbd5ded3b8702ac5a457e8b32bd4de06fd315095fa1b7d5fe1 +k = e3cc786c1288ea567836c51d6d69dd0cab5c015987d936ccc3a4beb3 +R = f1234da71761b7a0f49e661a419d2a739bdc4544bf87690e3d2f96db +S = 096d16bf8020c3d3c233894ad8eb81206010e62c6e692a215e088fd4 + +Msg = 23900b768f6cd42b8a8df0dcbc9cb5daec8de36b9d5c619adcc1ba2b649103d5af123746cdf19c3fd0665a6fb9338156182aa06181e3c6e37ce56979612af2927440424f89cef43fc754854b8a5c43370808cf5f9929cf47712512ce2f8a2a20d2e9f568c2848b27dfbe09142843c83905ffa5da3b15501761b03dbc2c5398b6 +d = 7a0789323f8741c157a1753ae165ecaf8e8b03a60561f8b80cee467c +Qx = 101271a9addd4bd1f19d00bf116c8524f52cefd598e85dc381597acb +Qy = 2f17d14f4d8ccb28b216553718152ba7c104646d8eca986dd9ddea39 +k = d169f04f05b60c625cda864d187938863964dab7bb3b9dfc04b05519 +R = e4a51be686a764b709da23ab48b1985e153c6ee238d945e743907afc +S = 118a8f1ffe3cd556ce6345bd1a398dd9cc3729b7fd6d8af9bfd82f40 + +Msg = 1eb28c0bcdd18f73e347f957ece15b4cc83a771b0877e1feaac38e24028fb38ccea8b54ee017dc7c3d5a1327bc6f40b294aa65d7dc487f278846cd101ee84202f14b38aa2c275046aa2577f65ebaea41cd383e8def2fd0b4444dcf426fa75c4082cd7fa035cdb1e0d34a3c79d42130f5b0273eae75bc701dda3aebe7358f41b5 +d = 78e795d0edb11fd9e28dc26b21e751aa89bea0d87932ef11c95c0e18 +Qx = 9edd544107977134bf6360d43ccabb3c94d627c03963c0a04b439627 +Qy = ece4c61d319a0e41f3de7863e7c355bac94395aaa74cdb5f74a87a5b +k = 36f7c0f76808b826a0a974a1fd6e155e00a73f1d34674a8f88be405a +R = 3e319444438bc2cc92f323ea842cb402b3c3c2448c89869ef7998edb +S = 3420cc38f058f41c31e71f4b1ad488f801111c73541de69fcee60695 + +Msg = efab51855407438fd5c250670366bca3c026ecec4a59394f00d8a4b51746d0c4564366656d507e3e13e62fe7abeb976b8859895848dbaecf6582f1898ea06f00d4247702ed9721bd375aa83ae4c67c2eaa6e080777ea5ecf2cf787d785389560ac91cf63a52f0373c3185e18a3b8a466e21b61a239f1b77624eb1acacc76c4e1 +d = bee02d8bc5bffb3fd3b4c9d6f686409f02662d10150d1e58d689966a +Qx = 8848f964c847fe9dddc774618d4588c9cd56bbe588d7b1fb369c8bfa +Qy = ebbb699fbd0dc08859fe9132285fe20dff3b9d561c0640b6e0717607 +k = 59f1450d857b40e5552a4b8cd4ab0df2f01716635d172c1106840f21 +R = a206d8398a16a991bc217f77f23c6f648384f254f255a8a876404444 +S = eb1169cb5b1423dc0bfaffe565ae57f986e00de06405e3e7b605862e + +Msg = 31c29ca10279a417f0cc9b1382cf54dbfdfc89f2e6ef08c403c11f580cbf8674b141ed1a417563282d99a55fc616d836421cde9424815c95e7fb7668bf3f137b29937f14882d74e034b732d78d91af7721aac4950734f5fa5d4b4d35534974f8cab6d2e6dca75ddb57e99148c8a59df9fc5bcd723e546e8356f671cf2f65640a +d = dc0ddf6e501418bb8eafc5d7ccc143369e2aa441df8fc57d5f94a738 +Qx = 063a5d632f4144376e14cfb03ad8ccf1489b613acd184d20dff66545 +Qy = e77727f057b043d8a0f7458196b72e92d11f85b0891c6aaa9d915f58 +k = ff0e5cae2671db7a1b90e22c63e7570bdd27352d45bac31e338debe0 +R = 5bc0b4998481ecbd3b6609184a84ca41d69b08c37138097f559259f8 +S = 0df8828eb1ca85e46405b94e1a2972c34c5e620a54e2f640f04aecc5 + +Msg = 8db476f92e332519c1a0ece5d8deded6efbd2d8e8784eea0a6b4c3b4296c35f5f8de4317e5c1627b91fb1973fee86c06e4992aa5a20cb7475c8808ff1da354d07a488dffa7838c6ec1e3f99e3acba831f27bee8434eeda3eb36d0c6df3658883cd40068b1bed841310f6eb38d4a3d07d85848770ff7933c054cd8b34662660b1 +d = 229d89b2fcf8441ffc95ebb2ac2ef156e25825782044b2b8bd6a3e01 +Qx = de616848d8044a44789ef1ba3a6dd66fe9257ddc57f7534e59a701be +Qy = 26cbf74a6d25e5b34b96d30f327abd574cff7f7dbe6686573a7d6c5c +k = 3b18ca6ec8e8e255ac88f64302745ca0b73ff94b2b2d48be95b4aaee +R = fa94fd8b827c06115c1eefd50afc02ce5926ee0e789667783c01c34b +S = edf766a66973cfc33e4159966c07321a7f6549c3c60e8586ef41402b + +Msg = fcb272c828fe8fd3c6f8de9410c7b6e2b36717c1b0e5e359e9109bd7fc378978aa98182a9d99961898ed88999b050d3b64d1457d7a899d6d273b9f4dde2aafa36d76329d62509043c338f265fc4c7d938459b7fa3b230a9f6cb632b61489546bb4181a5ad7f0d7369b8caced48eb374b075b2b325bc86add0f3b680cd9e80acd +d = 97d747068147c0393a0bb5c159e2c9f1bd538f6204823294883abe28 +Qx = 3858a576eef2ce24d01766997fb81b3f3f78b6104cd188610be221d7 +Qy = 95ffc677ac7bfe3e0bb4cffb17355a964c8356a807151b3cba5d1f4e +k = c1a2ec1ef16cfd5107c892790daefbed061be78bd8576696b60f64d5 +R = 18c908541843fcdac99b9ff6bb397f3f8094d16b42670216e4eaa2d7 +S = c107a8a508ff57c5d4f78f86cc37e129c864d1c44ed5e73909613b74 + +[P-224,SHA-512] + +Msg = 7522492bdb916a597b8121f3e5c273b1d2800ef8c1db4f7dcbae633b60d7da5193ba53a63d7a377b351897c3b24903ae1cd1994211b259be3e6ae2cbc8970e4957fdf782c7d1bc7a91c80c8ef65468d4ef35428f26e2940ae8b0bd9b8074236bf6c00d0ebe83f9ddb2ade0f835138d39f33b59f244e0037c171f1ba7045a96f5 +d = ba5374541c13597bded6880849184a593d69d3d4f0b1cb4d0919cbd6 +Qx = ac635fe00e8b7a3c8ef5655bdfb7f83e8532e59c0cc0b6534d810ffa +Qy = 1d067aebeba66e79b28ecfe59ac6fdf5e1970dc3a84499c9d90cd8e2 +k = 187ed1f45c466cbafcd4b9577fb222408c011225dcccfd20f08b8d89 +R = f83d54945997584c923c09662c34cf9ad1e987da8bfd9be600e7a098 +S = 4ff2dba9dba992c98a095b1144a539310e1a570e20c88b7d0aa1955c + +Msg = 61097114ff855c3e34a62d9b853f8982d35f29cfa4a89893badbca7849e5fb437a1a38d6451bf0ca5a0d528e352b8e4b57f2ea359a7fc8841d49dd3e570f9b016f14156b0bbc4be822e260bd147ec081454969e11cb0034b7450ef4deb7ed6edb977e2f4ed60121aa095fb0ab40240dc329ecc917f5c64b4410612af065ee9dd +d = 1e27187134d0a63542adf4665fba22f00cfc7b0a1e02effe913ceedc +Qx = ecaea8ceea55c3bd418fd34a4ff2499e25e66a104eed846bc00c31d2 +Qy = 3933a356ab1f2dabc303ff0a5d076131e77032e6f502336883bf78a7 +k = 34cb597deae9a3b1cada937abcd247161b19b2b336b20e2e42ae01f1 +R = 58177ba46fb291490b39368774accf72736412c1fb5ee0f27b9b1e02 +S = 58337d78b95a080bfcabb5809bee012501b4da84b8ef310a4628f11c + +Msg = dd09ae6c982bb1440ca175a87766fefeacc49393ff797c446200662744f37a6e30c5d33ba70cbd8f12277fd6cc0704c17478bbab2a3047469e9618e3c340a9c8caaff5ce7c8a4d90ecae6a9b84b813419dec14460298e7521c9b7fdb7a2089328005bd51d57f92a1bcbeecd34aa40482b549e006bbf6c4ce66d34a22dda4e0e0 +d = 0905b40e6c29bfcbf55e04266f68f10ca8d3905001d68bb61a27749b +Qx = d656b73b131aa4c6336a57849ce0d3682b6ab2113d013711e8c29762 +Qy = 6328335ffc2029afbfe2a15cc5636978778c3f9dab84840b05f2e705 +k = dc82840d147f893497a82f023d7d2cbf0a3a5b2ac6cc1b9b23e504be +R = 583af080e0ec7c1ba5a491a84889b7b7b11ccfe18927c7c219b11757 +S = b23700035349df25d839f0973bef78a7515287de6c83707907074fa6 + +Msg = 37a73e2774d3b274db426c89b945696daa96035031f72cea01894b24508c7f81961ec254d36ed6a0f448e11cf7950af769dc6cd2c47e52c6caf0ea92c270974f0214b4db436c36a60fb722060a6bb544462a82e1714f5906ec32886f7d59ebf289541c3a00ec1e004892ef2b1286a0194f55d083c6ec92c64b8fd1452e1c68ba +d = afbaede5d75e4f241dd5b53220f3f5b9c1aa1d5d298e2d43236452dc +Qx = fe83e59fc8ea8b939355d3258fe53a64d45f63031a0716b7cc416173 +Qy = f151d23060f1c856eb7f1f58be72a7228c3af89e43b56e9695b558c7 +k = 0fbbe7b40136c81a8fb894498d5502157a1cf5a89d0643de92cd38f6 +R = 24f3f457c7b72b7e759d5a8afbf330e31c5d8d2e36f92c0e79c5d87d +S = 36fd1193def34f12a960740fd79fb38bf2b480726ccad540eb42cdf8 + +Msg = 9dc2046ffdc6804544db964481abe5d2d276a2a9eeec4c7ad40215b1de23561d402db69bd0f6eec2254711eea4487c64d9a6b62c3ebaf5ffa8db6e7e3a6e17154d126967a47a853a6f8339bdca9be306a13c7f992ded7619b0da59909a49b1e0930360e05b47f18628a36d69b2f87f2bfddd6a5d4a72f84dc76dbdd43f3a6a35 +d = 950b07b0c2b7539a21b5135bfede214733f2e009647d38d8b21d760c +Qx = f43d13bbfcee3b724063b3910fea49fd591b81e86fdb813b1a492d0c +Qy = 6b4c8d6fa5dc661889e3cf5ec64997a78222837885f85d2fe9b684fb +k = 83e110d0d1e700d2f36543028737d2a2f1474aa3b4b28998a39e4793 +R = 2685265bc878e85d10ab13293dec190881a57c4a467f8fc2170432ea +S = 80a347bb49036522369339bd6485a967cdda818915d8eb947302fcf9 + +Msg = d9c6847fce688c5e7525a1098b545cb6c15dcd21a02761fc82fc664372a667390680135f91c01a2fa5430c634b1a6d1cd6002d8aa021e7bf5956a7901c2f81bc25d502ba5f55a55f30c0323dc68205cbefec0538e68654e7b327ac1743641896c3e740d8f66f400902b304eafaa4e0d8cffae140536f0922444cc3216a675697 +d = 015bd9f5dfef393b431c3c7fced24385d861ccb563542574a5d2a9bc +Qx = e868690641e2cda13b289a6c5d2fb175940396044d9cf27b4f2240af +Qy = 4c78c9abdf2b7fc67ed4497001d7bcf1daca1739dc14a661f91d7c40 +k = e2374350f47c08f3c1359d4edf87e61d1ba4e7dd1540d8d9062efa79 +R = e12dc088d2bc032bb214c77d0e0fb749fc8e61ebe1ed72996f1084b6 +S = 0ab58aa31e0bba5fbc76855e6549f1036fba0a589aeab978ab01b8fb + +Msg = 69df8a01b66f04930efd2012ff2243874f256ca8758145d2a9e4ecc84d0dbdbd0dc494ae06db0ccbe819918137c90957114558580d6623efbafdd342b38dad9f08708084d32f874fba04782ce26aaab78de2102ad171f8a8f2b30b5bd3d55fdac5fa3acd6f7def7e61c2533938572b331ba6d1c02bd74bfdbf7337ade8f4a190 +d = 0a3c259df933247445acffb6d8265b601d597fb9997dc2a1eb4deef4 +Qx = e67f4385a9da54253cc371ee9bc6739ae6385a4b87669c7baf0c460d +Qy = 2bb00b6ddd7b67d9ac5653ec04ca8529fbf16f815c04da3c2e58e82d +k = 8bf5859665b6a23e6b05a311580f60187ba1c4ae89e44877fb48af66 +R = 653675fb993c3fa9e57b32e33029ec230b966e8077c72c1ec90ddefc +S = 792723bf87e315147cd4303de7f1dfe95cd7658ebb95c38c1a196140 + +Msg = 927524982b8d60777c1105c86fac05f634abf58c73f84fb95d81ba0b86e1e43592c4fcad2e395a40fbe7005697d86088e2fb3bb7287eb3f917d4f2dc281f5cbe65d05b4f9623bca849b10a03beca6aa2056a12ebb91cf257ac448c5e9a78f8349a6a29b17c8978bef43a443cbb8a149eb23f794844fc41693f2dbb97181444be +d = a1c8ef463f9e7e3dd63e677412f87cf9ea4ac9a6a2dae629da5b9916 +Qx = 400e5cd4b315ceb309545cd3277acb70bdae2073fda6ad896ea14b27 +Qy = fbe1d2466cd2e116f38248bd5cabaa6cbe6c4a2694d998abd7b0c991 +k = 82f55a25d3ed6e47c22a6eed0fa52ed0818b87d6ea7950281dfefc09 +R = 16305a46a3f6f9e216ef8f6a6f5f0760d064a885657c864e1c1ea035 +S = 58fd97050bfbca6f87e64e1458c4ad80bae26e280356da344ad3b25d + +Msg = 5f9042283561e7f19a436d01c7ef5a950a6d77ede5629cd7e43c0a5d58e8c5673c37945a453291d12938253c71dbe12c8b022ba7276eda6be034ef5ec1ec77dbd1e08f0d7b8e7725b7ec671c075e008a20f77f4ab266f97079b0aa6337df59a33b881954084057b21f294dd14bcb0869a4a6f1f597955ec7bf9d19bb3537a66a +d = fa511dbf6fef7e5e9c73e4555eb75d435f7884322d9faf5d78cacc0b +Qx = e8dccd706c31f895f2f261ab979cbab51b8ae28196bcc12a42046380 +Qy = ec246be8e71ea3859cb717a59990fe22e4b76858ff49becd70739a01 +k = a37d665fe4314aa4cd03eb8e6a1f366b43e11fdb419c96b48f787b62 +R = 05e4909bcc172ab4140be291aad4660e375032bce2d762b6269ba764 +S = e347a1c9d3670690e1d8d1d4cd9579848f442199c10526488da5cebf + +Msg = c2ae5573d3bf396523bfb703db8502fd0760cd1be528f6ddbfb95aad399e0b19f3bd9e0fabdb05d49e3f893dffec5b627c9c2f7ad5f32e92e4e27a38cb5c28657657377fdfa1b66cd7ac3d15c6d49df92d284db99f69744f37dc7cb4e7d52920fdb200a7942623a7057ba82e467dcccaa5da416b48510d8364446a6a5e2a5aa8 +d = a58bd53646400a646f0e4208320dc679a9664d1c6bfb27fdc8eac7ea +Qx = e22e0dc4ecd96eb0071b72ba4b4988bf784f3fe73cb81bfb93d9ac4f +Qy = b3e213e518bee1367a4fb3703b9008bac9d95a1fc4aa61225fff9f3c +k = 42c5b6f87d3bb1ed74f5ee8398d8f8c61e9e50ffa7a1da12d39893f9 +R = 5c0e5c6f057de1e99ef5d237a60d7a07fa9a42b120a82f573d9fb7b2 +S = 2fffc0bf550bd2f650fed085a84501cacfa6a1bb984df1f9237eaa59 + +Msg = 03c1a1cd30a039d0dcb22fee2450a7fa79495a0d0f4f43d2de4d75bce003c0334a8860f5c164dbd94888a9f751235a3e570d31070e3e1293a7be616af7176600585d36ac013600157d2569d491da4b8a3bf3630c26e0b9925412189f50b0ae6f04c86477932e2ecd8c3546106ae1ebc684cc3adb27ed665eddece886adea4ce3 +d = 64bd4452b572cc95510ac2e572f41136299ff17f6e8448f4ffb571d0 +Qx = 92521fa25c2e034d127e0921efdb167f0b2ff8b20504487ed87fa264 +Qy = e72c770e37375ad7dc2c4e63e5701826f6606f6ffb9461ee61b4e872 +k = eaf76ee4d7e00d13d8a6d03dffd07ad9a8bb6dc8176c9f93059b1b7f +R = cf5058e2a6cf5e61a138b013eb292f38a1b9f07239ae5941dbce8919 +S = d14198621650d985d270bc997da6e78588fd0ef843b874c66a3de3c3 + +Msg = 888f6d9bc7c86c0079fbfd42d8c08d6958f40f6e570fb0b1f03d2f8f8a63df4fcc87b379a222cf835820a999d34996e08961f13b86b075e7fd1c303cd3baa44de42168561589012f7e5300da4f8bdf470c07119a5d9f7ba7293568cd7c6a1b7fc1e41cda40bed7d46e5a28af67ae2aabfefe67a86a1c601e6f5ee543e09bd7b6 +d = 7f3edb710df9d982f486233d0c176aa88f5a0ee81efa9b8145020294 +Qx = e7611e013e7b43ff5b8b57ad83333bffcc9e469ad23070b5791dc594 +Qy = 7784da0a11dbe16208c6e0b6d5029e71fbec4dffc9fa046d3eeb71c9 +k = 94db7ef9a232593091eb9a74f289529c7e0d7fef21f80b3c8556b75e +R = a971f45bab10b1d16d7234ca8e4ec987da20d9e867f28aa063296e23 +S = e38c538d65a7e1a28fd3ec53f015a7e5beb60e9d309f1e3ba4b2c3d2 + +Msg = 48453340f1317769e6ee6e103153714365731163dc18f84e9f2fa4b120f9c5a9645ee2f9b66c84c26d95912b422b009b64af96aa418b2427a4209f2e7513ba8e43ec8cf20b34e7529b22eb1199545afe9a9f7d9bcb320aec9ee0162f91c0d1dd9674c9c284f25199c5e109f6f84d7ed0d269cc6413edb81bc2c83e37d644d8b9 +d = b569f8296ff1d9cc01fffd9919016e5730c1858bdb7b99527153751a +Qx = 242f34959516a4706172f7dede23110efa314bff22eb320ab88feeff +Qy = 45e3227710900a8acfc9bcce728119d042f64ca40876c2b380ee46e0 +k = ae61523866a8f43e6cdd42ba27a34ed06527e8a5842901a64c393f76 +R = c2732a4e0815f9f785500e80147e9486994446beccf8a6a352b97585 +S = 6ecaece6487d7920e398f7f951ab7c7aba5832dabf03704106ad1244 + +Msg = 4bdfd3b91d83108409ad765b256e0c9b9937ecf647f8e6f9fc807e2e72af8246178b3fe046b4ea10170450d71a4eec790ecb05f03d7077341de26c4db7eeae24d55c9a9093e837dfdb38168fe8230cb9605825a1282fecd741989bfcdb34678fe077477927f66bd26d003e5dda22043341a14dd31841ba483ad5ce2701e0f68e +d = 41a4dd8eee39232b728516e2f21e66011e7426a6b25986c3ffa237e4 +Qx = c32988171caab178bf50dc7310bc7f604df5a9d19a8e602519c72d8a +Qy = f8985d112ad9de05969e5364d943c1cc5cd198359f4c62b19da0e117 +k = 827d4999da81fa920c8492ccc1e2d5cdafed9754cf7382a859952071 +R = 89c61da7422ccd676baec07e2185c12e947a2374eede87847304be6c +S = 2685379624717ea28422e8d001c090405a130b4ef9f1ac726c3ca502 + +Msg = e6cdee8558bc1eacc24e82f0624ce8d02cc8d925b4dd3dec3a72f4a4e0fb76076bfa3ef2e2c33bdd7c27b322bdc09bbfee8fe46f75dbd7bbd2af09690b7137943efe21706e0a1b6d3089540fc58d85ddb55ea836616db573e36c521be008893f40a0a7c349602cc178ea43be59d31ec6449e7ff2c5379379f7d7645134df1bc3 +d = 67fa50569257c8cc89ac0325db4902003a62f30b917f53e4035a7e04 +Qx = 6773a0436a9c42635730413b19aa4166f08c69c0e5002953da42253b +Qy = 555138290b093bf2fe79acda9131d920cd1e7ac43fb8775776cd713c +k = 557cb45fd3a30b3bdbf08c56eabbd4478736024aaa52bf8448096453 +R = 8e92cf7a674aa5f7542dd95c695589a05747431692edd04804299b8f +S = af4908b41f8180b71a6ff10fd51f3d143147af6ddddf7534d3284ed9 + + +[P-256,SHA-224] + +Msg = ff624d0ba02c7b6370c1622eec3fa2186ea681d1659e0a845448e777b75a8e77a77bb26e5733179d58ef9bc8a4e8b6971aef2539f77ab0963a3415bbd6258339bd1bf55de65db520c63f5b8eab3d55debd05e9494212170f5d65b3286b8b668705b1e2b2b5568610617abb51d2dd0cb450ef59df4b907da90cfa7b268de8c4c2 +d = 708309a7449e156b0db70e5b52e606c7e094ed676ce8953bf6c14757c826f590 +Qx = 29578c7ab6ce0d11493c95d5ea05d299d536801ca9cbd50e9924e43b733b83ab +Qy = 08c8049879c6278b2273348474158515accaa38344106ef96803c5a05adc4800 +k = 58f741771620bdc428e91a32d86d230873e9140336fcfb1e122892ee1d501bdc +R = 4a19274429e40522234b8785dc25fc524f179dcc95ff09b3c9770fc71f54ca0d +S = 58982b79a65b7320f5b92d13bdaecdd1259e760f0f718ba933fd098f6f75d4b7 + +Msg = 9155e91fd9155eeed15afd83487ea1a3af04c5998b77c0fe8c43dcc479440a8a9a89efe883d9385cb9edfde10b43bce61fb63669935ad39419cf29ef3a936931733bfc2378e253e73b7ae9a3ec7a6a7932ab10f1e5b94d05160c053988f3bdc9167155d069337d42c9a7056619efc031fa5ec7310d29bd28980b1e3559757578 +d = 90c5386100b137a75b0bb495002b28697a451add2f1f22cb65f735e8aaeace98 +Qx = 4a92396ff7930b1da9a873a479a28a9896af6cc3d39345b949b726dc3cd978b5 +Qy = 475abb18eaed948879b9c1453e3ef2755dd90f77519ec7b6a30297aad08e4931 +k = 36f853b5c54b1ec61588c9c6137eb56e7a708f09c57513093e4ecf6d739900e5 +R = 38b29558511061cfabdc8e5bb65ac2976d1aa2ba9a5deab8074097b2172bb9ad +S = 0de2cde610502b6e03c0b23602eafbcd3faf886c81d111d156b7aa550f5bcd51 + +Msg = b242a7586a1383368a33c88264889adfa3be45422fbef4a2df4e3c5325a9c7757017e0d5cf4bbf4de7f99d189f81f1fd2f0dd645574d1eb0d547eead9375677819297c1abe62526ae29fc54cdd11bfe17714f2fbd2d0d0e8d297ff98535980482dd5c1ebdc5a7274aabf1382c9f2315ca61391e3943856e4c5e616c2f1f7be0d +d = a3a43cece9c1abeff81099fb344d01f7d8df66447b95a667ee368f924bccf870 +Qx = 5775174deb0248112e069cb86f1546ac7a78bc2127d0cb953bad46384dd6be5b +Qy = a27020952971cc0b0c3abd06e9ca3e141a4943f560564eba31e5288928bc7ce7 +k = a0d9a7a245bd9b9aa86cecb89341c9de2e4f9b5d095a8150826c7ba7fb3e7df7 +R = b02a440add66a9ff9c3c0e9acf1be678f6bd48a10cbdec2ad6d186ffe05f3f2a +S = a98bea42aec56a1fcecec00a1cc69b01fcbcf5de7ac1b2f2dcc09b6db064f92b + +Msg = b64005da76b24715880af94dba379acc25a047b06066c9bedc8f17b8c74e74f4fc720d9f4ef0e2a659e0756931c080587ebdcd0f85e819aea6dacb327a9d96496da53ea21aef3b2e793a9c0def5196acec99891f46ead78a85bc7ab644765781d3543da9fbf9fec916dca975ef3b4271e50ecc68bf79b2d8935e2b25fc063358 +d = 7bbc8ff13f6f921f21e949b224c16b7176c5984d312b671cf6c2e4841135fc7f +Qx = f888e913ec6f3cd8b31eb89e4f8aaa8887d30ae5348ed7118696949d5b8cc7c1 +Qy = 08895d09620500d244e5035e262dea3f2867cd8967b226324d5c05220d8b410c +k = 21c942f3b487accbf7fadc1c4b7a6c7567ce876c195022459fa1ebf6d04ffbaa +R = 2e6cc883b8acc904ee9691ef4a9f1f5a9e5fbfde847cda3be833f949fb9c7182 +S = 2ac48f7a930912131a8b4e3ab495307817c465d638c2a9ea5ae9e2808806e20a + +Msg = fe6e1ea477640655eaa1f6e3352d4bce53eb3d95424df7f238e93d8531da8f36bc35fa6be4bf5a6a382e06e855139eb617a9cc9376b4dafacbd80876343b12628619d7cbe1bff6757e3706111ed53898c0219823adbc044eaf8c6ad449df8f6aab9d444dadb5c3380eec0d91694df5fc4b30280d4b87d27e67ae58a1df828963 +d = daf5ec7a4eebc20d9485796c355b4a65ad254fe19b998d0507e91ea24135f45d +Qx = 137c465085c1b1b8cccbe9fccbe9d0295a331aaf332f3ed2e285d16e574b943b +Qy = d3e8d5a24cd218c19760b0e85b35a8569945aa857cbf0fd6a3ce127581b217b6 +k = 343251dffa56e6a612fec7b078f9c3819eab402a72686b894a47a08fd97e6c23 +R = 775e25a296bd259510ae9375f548997bec8a744900022945281dc8c4d94f2b5b +S = d87592ceab773ae103daebbb56a04144aaccb1e14efc1024dc36c0e382df1f70 + +Msg = 907c0c00dc080a688548957b5b8b1f33ba378de1368023dcad43242411f554eb7d392d3e5c1668fad3944ff9634105343d83b8c85d2a988da5f5dc60ee0518327caed6dd5cf4e9bc6222deb46d00abde745f9b71d6e7aee6c7fdfc9ed053f2c0b611d4c6863088bd012ea9810ee94f8e58905970ebd07353f1f409a371ed03e3 +d = 8729a8396f262dabd991aa404cc1753581cea405f0d19222a0b3f210de8ee3c5 +Qx = 82b1f1a7af9b48ca8452613d7032beb0e4f28fe710306aeccc959e4d03662a35 +Qy = 5e39f33574097b8d32b471a591972496f5d44db344c037d13f06fafc75f016fd +k = 6de9e21f0b2cacc1762b3558fd44d3cf156b85dbef430dd28d59713bfb9cfa0b +R = a754b42720e71925d51fcef76151405a3696cc8f9fc9ca7b46d0b16edd7fb699 +S = 603924780439cc16ac4cf97c2c3065bc95353aa9179d0ab5f0322ca82f851cf2 + +Msg = 771c4d7bce05610a3e71b272096b57f0d1efcce33a1cb4f714d6ebc0865b2773ec5eedc25fae81dee1d256474dbd9676623614c150916e6ed92ce4430b26037d28fa5252ef6b10c09dc2f7ee5a36a1ea7897b69f389d9f5075e271d92f4eb97b148f3abcb1e5be0b4feb8278613d18abf6da60bfe448238aa04d7f11b71f44c5 +d = f1b62413935fc589ad2280f6892599ad994dae8ca3655ed4f7318cc89b61aa96 +Qx = e0bbfe4016eea93e6f509518cbffc25d492de6ebbf80465a461caa5bdc018159 +Qy = 3231ee7a119d84fa56e3034d50fea85929aec2eb437abc7646821e1bf805fb50 +k = 7a33eeb9f469afd55de2fb786847a1d3e7797929305c0f90d953b6f143bb8fc6 +R = 96d1c9399948254ea381631fc0f43ea808110506db8aacf081df5535ac5eb8ad +S = 73bf3691260dddd9997c97313f2a70783eacf8d15bdfb34bb13025cdfae72f70 + +Msg = a3b2825235718fc679b942e8ac38fb4f54415a213c65875b5453d18ca012320ddfbbc58b991eaebadfc2d1a28d4f0cd82652b12e4d5bfda89eda3be12ac52188e38e8cce32a264a300c0e463631f525ae501348594f980392c76b4a12ddc88e5ca086cb8685d03895919a8627725a3e00c4728e2b7c6f6a14fc342b2937fc3dd +d = 4caaa26f93f009682bbba6db6b265aec17b7ec1542bda458e8550b9e68eed18d +Qx = e3c58c1c254d11c7e781ad133e4c36dd1b5de362120d336a58e7b68813f3fbee +Qy = 59760db66120afe0d962c81a8e5586588fd19de2f40556371611c73af22c8a68 +k = c0d37142dc8b0d614fad20c4d35af6eb819e259e513ddeac1e1c273e7e1dc1bb +R = 25dd8e4086c62a40d2a310e2f90f6af5cb7e677b4dfdb4dc4e99e23ea2f0e6dc +S = 90ad62c179b0c9d61f521dde1cd762bfd224b5525c39c3706f2549313ddb4f39 + +Msg = 3e6e2a9bffd729ee5d4807849cd4250021d8184cda723df6ab0e5c939d39237c8e58af9d869fe62d3c97b3298a99e891e5e11aa68b11a087573a40a3e83c7965e7910d72f81cad0f42accc5c25a4fd3cdd8cee63757bbbfbdae98be2bc867d3bcb1333c4632cb0a55dffeb77d8b119c466cd889ec468454fabe6fbee7102deaf +d = 7af4b150bb7167cb68037f280d0823ce5320c01a92b1b56ee1b88547481b1de9 +Qx = cb3634ec4f0cbb99986be788f889e586026d5a851e80d15382f1bdb1bda2bc75 +Qy = 51e4e43bc16fb114896b18198a1aebe6054ba20ed0c0317c1b8776158c0e6bfb +k = 98edd59fafbcaee5f64e84eb5ed59fff45d14aabada47cee2fa674377173627a +R = 261a1cdb0fd93c0fb06ea6068b6b03c330a12f621a7eba76682a1d152c0e8d08 +S = 7ca049bad54feee101d6db807635ffb8bdb05a38e445c8c3d65d60df143514c5 + +Msg = 52e5c308e70329a17c71eaedb66bbee303c8ec48a6f1a2efb235d308563cd58553d434e12f353227a9ea28608ec9c820ed83c95124e7a886f7e832a2de1032e78dc059208f9ec354170b2b1cab992b52ac01e6c0e4e1b0112686962edc53ab226dafcc9fc7baed2cd9307160e8572edb125935db49289b178f35a8ad23f4f801 +d = 52ad53e849e30bec0e6345c3e9d98ebc808b19496c1ef16d72ab4a00bbb8c634 +Qx = 7cca1334bfc2a78728c50b370399be3f9690d445aa03c701da643eeb0b0f7fa8 +Qy = 3f7522238668e615405e49b2f63faee58286000a30cdb4b564ac0df99bc8950f +k = 8650c30712fc253610884fbba4a332a4574d4b7822f7776cab1df8f5fa05442a +R = a18194c7ac5829afc408d78dde19542837e7be82706c3941b2d9c5e036bb51e0 +S = 188ead1cdf7c1d21114ff56d0421ffd501ab978ef58337462c0fa736d86299af + +Msg = d3e9e82051d4c84d699453c9ff44c7c09f6523bb92232bcf30bf3c380224249de2964e871d56a364d6955c81ef91d06482a6c7c61bc70f66ef22fad128d15416e7174312619134f968f1009f92cbf99248932efb533ff113fb6d949e21d6b80dfbbe69010c8d1ccb0f3808ea309bb0bac1a222168c95b088847e613749b19d04 +d = 80754962a864be1803bc441fa331e126005bfc6d8b09ed38b7e69d9a030a5d27 +Qx = 0aaeed6dd1ae020d6eefc98ec4241ac93cbd3c8afed05bb28007e7da5727571b +Qy = 2dda1d5b7872eb94dfffb456115037ff8d3e72f8ebdd8fcfc42391f96809be69 +k = 738e050aeefe54ecba5be5f93a97bbcb7557d701f9da2d7e88483454b97b55a8 +R = 8cb9f41dfdcb9604e0725ac9b78fc0db916dc071186ee982f6dba3da36f02efa +S = 5c87fe868fd4282fb114f5d70e9590a10a5d35cedf3ff6402ba5c4344738a32e + +Msg = 968951c2c1918436fe19fa2fe2152656a08f9a6b8aa6201920f1b424da98cee71928897ff087620cc5c551320b1e75a1e98d7d98a5bd5361c9393759614a6087cc0f7fb01fcb173783eb4c4c23961a8231ac4a07d72e683b0c1bd4c51ef1b031df875e7b8d5a6e0628949f5b8f157f43dccaea3b2a4fc11181e6b451e06ceb37 +d = cfa8c8bd810eb0d73585f36280ecdd296ee098511be8ad5eac68984eca8eb19d +Qx = c227a2af15dfa8734e11c0c50f77e24e77ed58dd8cccf1b0e9fa06bee1c64766 +Qy = b686592ce3745eb300d2704083db55e1fa8274e4cb7e256889ccc0bb34a60570 +k = 2d6b449bb38b543d6b6d34ff8cb053f5e5b337f949b069b21f421995ebb28823 +R = 5e89d3c9b103c2fa3cb8cebeec23640acda0257d63ffbe2d509bfc49fab1dca6 +S = d70c5b1eeb29e016af9925798d24e166c23d58fedd2f1a3bbdb1ef78cdbfb63a + +Msg = 78048628932e1c1cdd1e70932bd7b76f704ba08d7e7d825d3de763bf1a062315f4af16eccefe0b6ebadccaf403d013f50833ce2c54e24eea8345e25f93b69bb048988d102240225ceacf5003e2abdcc90299f4bf2c101585d36ecdd7a155953c674789d070480d1ef47cc7858e97a6d87c41c6922a00ea12539f251826e141b4 +d = b2021e2665ce543b7feadd0cd5a4bd57ffcc5b32deb860b4d736d9880855da3c +Qx = 722e0abad4504b7832a148746153777694714eca220eced2b2156ca64cfed3dd +Qy = f0351b357b3081e859c46cad5328c5afa10546e92bc6c3fd541796ac30397a75 +k = b15bbce4b382145de7ecd670d947e77555ef7cd1693bd53c694e2b52b04d10e1 +R = 9d086dcd22da165a43091991bede9c1c14515e656633cb759ec2c17f51c35253 +S = 23595ad1cb714559faaecaf946beb9a71e584616030ceaed8a8470f4bf62768f + +Msg = 9b0800c443e693067591737fdbcf0966fdfa50872d41d0c189d87cbc34c2771ee5e1255fd604f09fcf167fda16437c245d299147299c69046895d22482db29aba37ff57f756716cd3d6223077f747c4caffbecc0a7c9dfaaafd9a9817470ded8777e6355838ac54d11b2f0fc3f43668ff949cc31de0c2d15af5ef17884e4d66a +d = 0c9bce6a568ca239395fc3552755575cbcdddb1d89f6f5ab354517a057b17b48 +Qx = 4814d454495df7103e2da383aba55f7842fd84f1750ee5801ad32c10d0be6c7d +Qy = a0bd039d5097c8f0770477f6b18d247876e88e528bf0453eab515ffab8a9eda3 +k = d414f1525cdcc41eba1652de017c034ebcc7946cb2efe4713d09f67c85b83153 +R = 84db02c678f9a21208cec8564d145a35ba8c6f26b4eb7e19522e439720dae44c +S = 537c564da0d2dc5ac4376c5f0ca3b628d01d48df47a83d842c927e4d6db1e16d + +Msg = fc3b8291c172dae635a6859f525beaf01cf683765d7c86f1a4d768df7cae055f639eccc08d7a0272394d949f82d5e12d69c08e2483e11a1d28a4c61f18193106e12e5de4a9d0b4bf341e2acd6b715dc83ae5ff63328f8346f35521ca378b311299947f63ec593a5e32e6bd11ec4edb0e75302a9f54d21226d23314729e061016 +d = 1daa385ec7c7f8a09adfcaea42801a4de4c889fb5c6eb4e92bc611d596d68e3f +Qx = f04e9f2831d9697ae146c7d4552e5f91085cc46778400b75b76f00205252941d +Qy = bd267148174cd0c2b019cd0a5256e2f3f889d1e597160372b5a1339c8d787f10 +k = 7707db348ee6f60365b43a2a994e9b40ed56fe03c2c31c7e781bc4ffadcba760 +R = 5d95c385eeba0f15db0b80ae151912409128c9c80e554246067b8f6a36d85ea5 +S = db5d8a1e345f883e4fcb3871276f170b783c1a1e9da6b6615913368a8526f1c3 + +[P-256,SHA-256] + +Msg = 5905238877c77421f73e43ee3da6f2d9e2ccad5fc942dcec0cbd25482935faaf416983fe165b1a045ee2bcd2e6dca3bdf46c4310a7461f9a37960ca672d3feb5473e253605fb1ddfd28065b53cb5858a8ad28175bf9bd386a5e471ea7a65c17cc934a9d791e91491eb3754d03799790fe2d308d16146d5c9b0d0debd97d79ce8 +d = 519b423d715f8b581f4fa8ee59f4771a5b44c8130b4e3eacca54a56dda72b464 +Qx = 1ccbe91c075fc7f4f033bfa248db8fccd3565de94bbfb12f3c59ff46c271bf83 +Qy = ce4014c68811f9a21a1fdb2c0e6113e06db7ca93b7404e78dc7ccd5ca89a4ca9 +k = 94a1bbb14b906a61a280f245f9e93c7f3b4a6247824f5d33b9670787642a68de +R = f3ac8061b514795b8843e3d6629527ed2afd6b1f6a555a7acabb5e6f79c8c2ac +S = 8bf77819ca05a6b2786c76262bf7371cef97b218e96f175a3ccdda2acc058903 + +Msg = c35e2f092553c55772926bdbe87c9796827d17024dbb9233a545366e2e5987dd344deb72df987144b8c6c43bc41b654b94cc856e16b96d7a821c8ec039b503e3d86728c494a967d83011a0e090b5d54cd47f4e366c0912bc808fbb2ea96efac88fb3ebec9342738e225f7c7c2b011ce375b56621a20642b4d36e060db4524af1 +d = 0f56db78ca460b055c500064824bed999a25aaf48ebb519ac201537b85479813 +Qx = e266ddfdc12668db30d4ca3e8f7749432c416044f2d2b8c10bf3d4012aeffa8a +Qy = bfa86404a2e9ffe67d47c587ef7a97a7f456b863b4d02cfc6928973ab5b1cb39 +k = 6d3e71882c3b83b156bb14e0ab184aa9fb728068d3ae9fac421187ae0b2f34c6 +R = 976d3a4e9d23326dc0baa9fa560b7c4e53f42864f508483a6473b6a11079b2db +S = 1b766e9ceb71ba6c01dcd46e0af462cd4cfa652ae5017d4555b8eeefe36e1932 + +Msg = 3c054e333a94259c36af09ab5b4ff9beb3492f8d5b4282d16801daccb29f70fe61a0b37ffef5c04cd1b70e85b1f549a1c4dc672985e50f43ea037efa9964f096b5f62f7ffdf8d6bfb2cc859558f5a393cb949dbd48f269343b5263dcdb9c556eca074f2e98e6d94c2c29a677afaf806edf79b15a3fcd46e7067b7669f83188ee +d = e283871239837e13b95f789e6e1af63bf61c918c992e62bca040d64cad1fc2ef +Qx = 74ccd8a62fba0e667c50929a53f78c21b8ff0c3c737b0b40b1750b2302b0bde8 +Qy = 29074e21f3a0ef88b9efdf10d06aa4c295cc1671f758ca0e4cd108803d0f2614 +k = ad5e887eb2b380b8d8280ad6e5ff8a60f4d26243e0124c2f31a297b5d0835de2 +R = 35fb60f5ca0f3ca08542fb3cc641c8263a2cab7a90ee6a5e1583fac2bb6f6bd1 +S = ee59d81bc9db1055cc0ed97b159d8784af04e98511d0a9a407b99bb292572e96 + +Msg = 0989122410d522af64ceb07da2c865219046b4c3d9d99b01278c07ff63eaf1039cb787ae9e2dd46436cc0415f280c562bebb83a23e639e476a02ec8cff7ea06cd12c86dcc3adefbf1a9e9a9b6646c7599ec631b0da9a60debeb9b3e19324977f3b4f36892c8a38671c8e1cc8e50fcd50f9e51deaf98272f9266fc702e4e57c30 +d = a3d2d3b7596f6592ce98b4bfe10d41837f10027a90d7bb75349490018cf72d07 +Qx = 322f80371bf6e044bc49391d97c1714ab87f990b949bc178cb7c43b7c22d89e1 +Qy = 3c15d54a5cc6b9f09de8457e873eb3deb1fceb54b0b295da6050294fae7fd999 +k = 24fc90e1da13f17ef9fe84cc96b9471ed1aaac17e3a4bae33a115df4e5834f18 +R = d7c562370af617b581c84a2468cc8bd50bb1cbf322de41b7887ce07c0e5884ca +S = b46d9f2d8c4bf83546ff178f1d78937c008d64e8ecc5cbb825cb21d94d670d89 + +Msg = dc66e39f9bbfd9865318531ffe9207f934fa615a5b285708a5e9c46b7775150e818d7f24d2a123df3672fff2094e3fd3df6fbe259e3989dd5edfcccbe7d45e26a775a5c4329a084f057c42c13f3248e3fd6f0c76678f890f513c32292dd306eaa84a59abe34b16cb5e38d0e885525d10336ca443e1682aa04a7af832b0eee4e7 +d = 53a0e8a8fe93db01e7ae94e1a9882a102ebd079b3a535827d583626c272d280d +Qx = 1bcec4570e1ec2436596b8ded58f60c3b1ebc6a403bc5543040ba82963057244 +Qy = 8af62a4c683f096b28558320737bf83b9959a46ad2521004ef74cf85e67494e1 +k = 5d833e8d24cc7a402d7ee7ec852a3587cddeb48358cea71b0bedb8fabe84e0c4 +R = 18caaf7b663507a8bcd992b836dec9dc5703c080af5e51dfa3a9a7c387182604 +S = 77c68928ac3b88d985fb43fb615fb7ff45c18ba5c81af796c613dfa98352d29c + +Msg = 600974e7d8c5508e2c1aab0783ad0d7c4494ab2b4da265c2fe496421c4df238b0be25f25659157c8a225fb03953607f7df996acfd402f147e37aee2f1693e3bf1c35eab3ae360a2bd91d04622ea47f83d863d2dfecb618e8b8bdc39e17d15d672eee03bb4ce2cc5cf6b217e5faf3f336fdd87d972d3a8b8a593ba85955cc9d71 +d = 4af107e8e2194c830ffb712a65511bc9186a133007855b49ab4b3833aefc4a1d +Qx = a32e50be3dae2c8ba3f5e4bdae14cf7645420d425ead94036c22dd6c4fc59e00 +Qy = d623bf641160c289d6742c6257ae6ba574446dd1d0e74db3aaa80900b78d4ae9 +k = e18f96f84dfa2fd3cdfaec9159d4c338cd54ad314134f0b31e20591fc238d0ab +R = 8524c5024e2d9a73bde8c72d9129f57873bbad0ed05215a372a84fdbc78f2e68 +S = d18c2caf3b1072f87064ec5e8953f51301cada03469c640244760328eb5a05cb + +Msg = dfa6cb9b39adda6c74cc8b2a8b53a12c499ab9dee01b4123642b4f11af336a91a5c9ce0520eb2395a6190ecbf6169c4cba81941de8e76c9c908eb843b98ce95e0da29c5d4388040264e05e07030a577cc5d176387154eabae2af52a83e85c61c7c61da930c9b19e45d7e34c8516dc3c238fddd6e450a77455d534c48a152010b +d = 78dfaa09f1076850b3e206e477494cddcfb822aaa0128475053592c48ebaf4ab +Qx = 8bcfe2a721ca6d753968f564ec4315be4857e28bef1908f61a366b1f03c97479 +Qy = 0f67576a30b8e20d4232d8530b52fb4c89cbc589ede291e499ddd15fe870ab96 +k = 295544dbb2da3da170741c9b2c6551d40af7ed4e891445f11a02b66a5c258a77 +R = c5a186d72df452015480f7f338970bfe825087f05c0088d95305f87aacc9b254 +S = 84a58f9e9d9e735344b316b1aa1ab5185665b85147dc82d92e969d7bee31ca30 + +Msg = 51d2547cbff92431174aa7fc7302139519d98071c755ff1c92e4694b58587ea560f72f32fc6dd4dee7d22bb7387381d0256e2862d0644cdf2c277c5d740fa089830eb52bf79d1e75b8596ecf0ea58a0b9df61e0c9754bfcd62efab6ea1bd216bf181c5593da79f10135a9bc6e164f1854bc8859734341aad237ba29a81a3fc8b +d = 80e692e3eb9fcd8c7d44e7de9f7a5952686407f90025a1d87e52c7096a62618a +Qx = a88bc8430279c8c0400a77d751f26c0abc93e5de4ad9a4166357952fe041e767 +Qy = 2d365a1eef25ead579cc9a069b6abc1b16b81c35f18785ce26a10ba6d1381185 +k = 7c80fd66d62cc076cef2d030c17c0a69c99611549cb32c4ff662475adbe84b22 +R = 9d0c6afb6df3bced455b459cc21387e14929392664bb8741a3693a1795ca6902 +S = d7f9ddd191f1f412869429209ee3814c75c72fa46a9cccf804a2f5cc0b7e739f + +Msg = 558c2ac13026402bad4a0a83ebc9468e50f7ffab06d6f981e5db1d082098065bcff6f21a7a74558b1e8612914b8b5a0aa28ed5b574c36ac4ea5868432a62bb8ef0695d27c1e3ceaf75c7b251c65ddb268696f07c16d2767973d85beb443f211e6445e7fe5d46f0dce70d58a4cd9fe70688c035688ea8c6baec65a5fc7e2c93e8 +d = 5e666c0db0214c3b627a8e48541cc84a8b6fd15f300da4dff5d18aec6c55b881 +Qx = 1bc487570f040dc94196c9befe8ab2b6de77208b1f38bdaae28f9645c4d2bc3a +Qy = ec81602abd8345e71867c8210313737865b8aa186851e1b48eaca140320f5d8f +k = 2e7625a48874d86c9e467f890aaa7cd6ebdf71c0102bfdcfa24565d6af3fdce9 +R = 2f9e2b4e9f747c657f705bffd124ee178bbc5391c86d056717b140c153570fd9 +S = f5413bfd85949da8d83de83ab0d19b2986613e224d1901d76919de23ccd03199 + +Msg = 4d55c99ef6bd54621662c3d110c3cb627c03d6311393b264ab97b90a4b15214a5593ba2510a53d63fb34be251facb697c973e11b665cb7920f1684b0031b4dd370cb927ca7168b0bf8ad285e05e9e31e34bc24024739fdc10b78586f29eff94412034e3b606ed850ec2c1900e8e68151fc4aee5adebb066eb6da4eaa5681378e +d = f73f455271c877c4d5334627e37c278f68d143014b0a05aa62f308b2101c5308 +Qx = b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde +Qy = 423f058810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a +k = 62f8665fd6e26b3fa069e85281777a9b1f0dfd2c0b9f54a086d0c109ff9fd615 +R = 1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620 +S = 880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430 + +Msg = f8248ad47d97c18c984f1f5c10950dc1404713c56b6ea397e01e6dd925e903b4fadfe2c9e877169e71ce3c7fe5ce70ee4255d9cdc26f6943bf48687874de64f6cf30a012512e787b88059bbf561162bdcc23a3742c835ac144cc14167b1bd6727e940540a9c99f3cbb41fb1dcb00d76dda04995847c657f4c19d303eb09eb48a +d = b20d705d9bd7c2b8dc60393a5357f632990e599a0975573ac67fd89b49187906 +Qx = 51f99d2d52d4a6e734484a018b7ca2f895c2929b6754a3a03224d07ae61166ce +Qy = 4737da963c6ef7247fb88d19f9b0c667cac7fe12837fdab88c66f10d3c14cad1 +k = 72b656f6b35b9ccbc712c9f1f3b1a14cbbebaec41c4bca8da18f492a062d6f6f +R = 9886ae46c1415c3bc959e82b760ad760aab66885a84e620aa339fdf102465c42 +S = 2bf3a80bc04faa35ebecc0f4864ac02d349f6f126e0f988501b8d3075409a26c + +Msg = 3b6ee2425940b3d240d35b97b6dcd61ed3423d8e71a0ada35d47b322d17b35ea0472f35edd1d252f87b8b65ef4b716669fc9ac28b00d34a9d66ad118c9d94e7f46d0b4f6c2b2d339fd6bcd351241a387cc82609057048c12c4ec3d85c661975c45b300cb96930d89370a327c98b67defaa89497aa8ef994c77f1130f752f94a4 +d = d4234bebfbc821050341a37e1240efe5e33763cbbb2ef76a1c79e24724e5a5e7 +Qx = 8fb287f0202ad57ae841aea35f29b2e1d53e196d0ddd9aec24813d64c0922fb7 +Qy = 1f6daff1aa2dd2d6d3741623eecb5e7b612997a1039aab2e5cf2de969cfea573 +k = d926fe10f1bfd9855610f4f5a3d666b1a149344057e35537373372ead8b1a778 +R = 490efd106be11fc365c7467eb89b8d39e15d65175356775deab211163c2504cb +S = 644300fc0da4d40fb8c6ead510d14f0bd4e1321a469e9c0a581464c7186b7aa7 + +Msg = c5204b81ec0a4df5b7e9fda3dc245f98082ae7f4efe81998dcaa286bd4507ca840a53d21b01e904f55e38f78c3757d5a5a4a44b1d5d4e480be3afb5b394a5d2840af42b1b4083d40afbfe22d702f370d32dbfd392e128ea4724d66a3701da41ae2f03bb4d91bb946c7969404cb544f71eb7a49eb4c4ec55799bda1eb545143a7 +d = b58f5211dff440626bb56d0ad483193d606cf21f36d9830543327292f4d25d8c +Qx = 68229b48c2fe19d3db034e4c15077eb7471a66031f28a980821873915298ba76 +Qy = 303e8ee3742a893f78b810991da697083dd8f11128c47651c27a56740a80c24c +k = e158bf4a2d19a99149d9cdb879294ccb7aaeae03d75ddd616ef8ae51a6dc1071 +R = e67a9717ccf96841489d6541f4f6adb12d17b59a6bef847b6183b8fcf16a32eb +S = 9ae6ba6d637706849a6a9fc388cf0232d85c26ea0d1fe7437adb48de58364333 + +Msg = 72e81fe221fb402148d8b7ab03549f1180bcc03d41ca59d7653801f0ba853add1f6d29edd7f9abc621b2d548f8dbf8979bd16608d2d8fc3260b4ebc0dd42482481d548c7075711b5759649c41f439fad69954956c9326841ea6492956829f9e0dc789f73633b40f6ac77bcae6dfc7930cfe89e526d1684365c5b0be2437fdb01 +d = 54c066711cdb061eda07e5275f7e95a9962c6764b84f6f1f3ab5a588e0a2afb1 +Qx = 0a7dbb8bf50cb605eb2268b081f26d6b08e012f952c4b70a5a1e6e7d46af98bb +Qy = f26dd7d799930062480849962ccf5004edcfd307c044f4e8f667c9baa834eeae +k = 646fe933e96c3b8f9f507498e907fdd201f08478d0202c752a7c2cfebf4d061a +R = b53ce4da1aa7c0dc77a1896ab716b921499aed78df725b1504aba1597ba0c64b +S = d7c246dc7ad0e67700c373edcfdd1c0a0495fc954549ad579df6ed1438840851 + +Msg = 21188c3edd5de088dacc1076b9e1bcecd79de1003c2414c3866173054dc82dde85169baa77993adb20c269f60a5226111828578bcc7c29e6e8d2dae81806152c8ba0c6ada1986a1983ebeec1473a73a04795b6319d48662d40881c1723a706f516fe75300f92408aa1dc6ae4288d2046f23c1aa2e54b7fb6448a0da922bd7f34 +d = 34fa4682bf6cb5b16783adcd18f0e6879b92185f76d7c920409f904f522db4b1 +Qx = 105d22d9c626520faca13e7ced382dcbe93498315f00cc0ac39c4821d0d73737 +Qy = 6c47f3cbbfa97dfcebe16270b8c7d5d3a5900b888c42520d751e8faf3b401ef4 +k = a6f463ee72c9492bc792fe98163112837aebd07bab7a84aaed05be64db3086f4 +R = 542c40a18140a6266d6f0286e24e9a7bad7650e72ef0e2131e629c076d962663 +S = 4f7f65305e24a6bbb5cff714ba8f5a2cee5bdc89ba8d75dcbf21966ce38eb66f + +[P-256,SHA-384] + +Msg = e0b8596b375f3306bbc6e77a0b42f7469d7e83635990e74aa6d713594a3a24498feff5006790742d9c2e9b47d714bee932435db747c6e733e3d8de41f2f91311f2e9fd8e025651631ffd84f66732d3473fbd1627e63dc7194048ebec93c95c159b5039ab5e79e42c80b484a943f125de3da1e04e5bf9c16671ad55a1117d3306 +d = b6faf2c8922235c589c27368a3b3e6e2f42eb6073bf9507f19eed0746c79dced +Qx = e0e7b99bc62d8dd67883e39ed9fa0657789c5ff556cc1fd8dd1e2a55e9e3f243 +Qy = 63fbfd0232b95578075c903a4dbf85ad58f8350516e1ec89b0ee1f5e1362da69 +k = 9980b9cdfcef3ab8e219b9827ed6afdd4dbf20bd927e9cd01f15762703487007 +R = f5087878e212b703578f5c66f434883f3ef414dc23e2e8d8ab6a8d159ed5ad83 +S = 306b4c6c20213707982dffbb30fba99b96e792163dd59dbe606e734328dd7c8a + +Msg = 099a0131179fff4c6928e49886d2fdb3a9f239b7dd5fa828a52cbbe3fcfabecfbba3e192159b887b5d13aa1e14e6a07ccbb21f6ad8b7e88fee6bea9b86dea40ffb962f38554056fb7c5bb486418915f7e7e9b9033fe3baaf9a069db98bc02fa8af3d3d1859a11375d6f98aa2ce632606d0800dff7f55b40f971a8586ed6b39e9 +d = 118958fd0ff0f0b0ed11d3cf8fa664bc17cdb5fed1f4a8fc52d0b1ae30412181 +Qx = afda82260c9f42122a3f11c6058839488f6d7977f6f2a263c67d06e27ea2c355 +Qy = 0ae2bbdd2207c590332c5bfeb4c8b5b16622134bd4dc55382ae806435468058b +k = 23129a99eeda3d99a44a5778a46e8e7568b91c31fb7a8628c5d9820d4bed4a6b +R = e446600cab1286ebc3bb332012a2f5cc33b0a5ef7291d5a62a84de5969d77946 +S = cf89b12793ee1792eb26283b48fa0bdcb45ae6f6ad4b02564bf786bb97057d5a + +Msg = 0fbc07ea947c946bea26afa10c51511039b94ddbc4e2e4184ca3559260da24a14522d1497ca5e77a5d1a8e86583aeea1f5d4ff9b04a6aa0de79cd88fdb85e01f171143535f2f7c23b050289d7e05cebccdd131888572534bae0061bdcc3015206b9270b0d5af9f1da2f9de91772d178a632c3261a1e7b3fb255608b3801962f9 +d = 3e647357cd5b754fad0fdb876eaf9b1abd7b60536f383c81ce5745ec80826431 +Qx = 702b2c94d039e590dd5c8f9736e753cf5824aacf33ee3de74fe1f5f7c858d5ed +Qy = 0c28894e907af99fb0d18c9e98f19ac80dd77abfa4bebe45055c0857b82a0f4d +k = 9beab7722f0bcb468e5f234e074170a60225255de494108459abdf603c6e8b35 +R = c4021fb7185a07096547af1fb06932e37cf8bd90cf593dea48d48614fa237e5e +S = 7fb45d09e2172bec8d3e330aa06c43fbb5f625525485234e7714b7f6e92ba8f1 + +Msg = 1e38d750d936d8522e9db1873fb4996bef97f8da3c6674a1223d29263f1234a90b751785316444e9ba698bc8ab6cd010638d182c9adad4e334b2bd7529f0ae8e9a52ad60f59804b2d780ed52bdd33b0bf5400147c28b4304e5e3434505ae7ce30d4b239e7e6f0ecf058badd5b388eddbad64d24d2430dd04b4ddee98f972988f +d = 76c17c2efc99891f3697ba4d71850e5816a1b65562cc39a13da4b6da9051b0fd +Qx = d12512e934c367e4c4384dbd010e93416840288a0ba00b299b4e7c0d91578b57 +Qy = ebf8835661d9b578f18d14ae4acf9c357c0dc8b7112fc32824a685ed72754e23 +k = 77cffa6f9a73904306f9fcd3f6bbb37f52d71e39931bb4aec28f9b076e436ccf +R = 4d5a9d95b0f09ce8704b0f457b39059ee606092310df65d3f8ae7a2a424cf232 +S = 7d3c014ca470a73cef1d1da86f2a541148ad542fbccaf9149d1b0b030441a7eb + +Msg = abcf0e0f046b2e0672d1cc6c0a114905627cbbdefdf9752f0c31660aa95f2d0ede72d17919a9e9b1add3213164e0c9b5ae3c76f1a2f79d3eeb444e6741521019d8bd5ca391b28c1063347f07afcfbb705be4b52261c19ebaf1d6f054a74d86fb5d091fa7f229450996b76f0ada5f977b09b58488eebfb5f5e9539a8fd89662ab +d = 67b9dea6a575b5103999efffce29cca688c781782a41129fdecbce76608174de +Qx = b4238b029fc0b7d9a5286d8c29b6f3d5a569e9108d44d889cd795c4a385905be +Qy = 8cb3fff8f6cca7187c6a9ad0a2b1d9f40ae01b32a7e8f8c4ca75d71a1fffb309 +k = d02617f26ede3584f0afcfc89554cdfb2ae188c192092fdde3436335fafe43f1 +R = 26fd9147d0c86440689ff2d75569795650140506970791c90ace0924b44f1586 +S = 00a34b00c20a8099df4b0a757cbef8fea1cb3ea7ced5fbf7e987f70b25ee6d4f + +Msg = dc3d4884c741a4a687593c79fb4e35c5c13c781dca16db561d7e393577f7b62ca41a6e259fc1fb8d0c4e1e062517a0fdf95558b7799f20c211796167953e6372c11829beec64869d67bf3ee1f1455dd87acfbdbcc597056e7fb347a17688ad32fda7ccc3572da7677d7255c261738f07763cd45973c728c6e9adbeecadc3d961 +d = ecf644ea9b6c3a04fdfe2de4fdcb55fdcdfcf738c0b3176575fa91515194b566 +Qx = c3bdc7c795ec94620a2cfff614c13a3390a5e86c892e53a24d3ed22228bc85bf +Qy = 70480fc5cf4aacd73e24618b61b5c56c1ced8c4f1b869580ea538e68c7a61ca3 +k = 53291d51f68d9a12d1dcdc58892b2f786cc15f631f16997d2a49bace513557d4 +R = a860c8b286edf973ce4ce4cf6e70dc9bbf3818c36c023a845677a9963705df8b +S = 5630f986b1c45e36e127dd7932221c4272a8cc6e255e89f0f0ca4ec3a9f76494 + +Msg = 719bf1911ae5b5e08f1d97b92a5089c0ab9d6f1c175ac7199086aeeaa416a17e6d6f8486c711d386f284f096296689a54d330c8efb0f5fa1c5ba128d3234a3da856c2a94667ef7103616a64c913135f4e1dc50e38daa60610f732ad1bedfcc396f87169392520314a6b6b9af6793dbabad4599525228cc7c9c32c4d8e097ddf6 +d = 4961485cbc978f8456ec5ac7cfc9f7d9298f99415ecae69c8491b258c029bfee +Qx = 8d40bf2299e05d758d421972e81cfb0cce68b949240dc30f315836acc70bef03 +Qy = 5674e6f77f8b46f46cca937d83b128dffbe9bd7e0d3d08aa2cbbfdfb16f72c9a +k = 373a825b5a74b7b9e02f8d4d876b577b4c3984168d704ba9f95b19c05ed590af +R = ef6fb386ad044b63feb7445fa16b10319018e9cea9ef42bca83bdad01992234a +S = ac1f42f652eb1786e57be01d847c81f7efa072ba566d4583af4f1551a3f76c65 + +Msg = 7cf19f4c851e97c5bca11a39f0074c3b7bd3274e7dd75d0447b7b84995dfc9f716bf08c25347f56fcc5e5149cb3f9cfb39d408ace5a5c47e75f7a827fa0bb9921bb5b23a6053dbe1fa2bba341ac874d9b1333fc4dc224854949f5c8d8a5fedd02fb26fdfcd3be351aec0fcbef18972956c6ec0effaf057eb4420b6d28e0c008c +d = 587907e7f215cf0d2cb2c9e6963d45b6e535ed426c828a6ea2fb637cca4c5cbd +Qx = 660da45c413cc9c9526202c16b402af602d30daaa7c342f1e722f15199407f31 +Qy = e6f8cbb06913cc718f2d69ba2fb3137f04a41c27c676d1a80fbf30ea3ca46439 +k = 6b8eb7c0d8af9456b95dd70561a0e902863e6dfa1c28d0fd4a0509f1c2a647b2 +R = 08fabf9b57de81875bfa7a4118e3e44cfb38ec6a9b2014940207ba3b1c583038 +S = a58d199b1deba7350616230d867b2747a3459421811c291836abee715b8f67b4 + +Msg = b892ffabb809e98a99b0a79895445fc734fa1b6159f9cddb6d21e510708bdab6076633ac30aaef43db566c0d21f4381db46711fe3812c5ce0fb4a40e3d5d8ab24e4e82d3560c6dc7c37794ee17d4a144065ef99c8d1c88bc22ad8c4c27d85ad518fa5747ae35276fc104829d3f5c72fc2a9ea55a1c3a87007cd133263f79e405 +d = 24b1e5676d1a9d6b645a984141a157c124531feeb92d915110aef474b1e27666 +Qx = b4909a5bdf25f7659f4ef35e4b811429fb2c59126e3dad09100b46aea6ebe7a6 +Qy = 760ae015fa6af5c9749c4030fdb5de6e58c6b5b1944829105cf7edf7d3a22cfb +k = 88794923d8943b5dbcc7a7a76503880ff7da632b0883aaa60a9fcc71bf880fd6 +R = 6ec9a340b77fae3c7827fa96d997e92722ff2a928217b6dd3c628f3d49ae4ce6 +S = 637b54bbcfb7e7d8a41ea317fcfca8ad74eb3bb6b778bc7ef9dec009281976f7 + +Msg = 8144e37014c95e13231cbd6fa64772771f93b44e37f7b02f592099cc146343edd4f4ec9fa1bc68d7f2e9ee78fc370443aa2803ff4ca52ee49a2f4daf2c8181ea7b8475b3a0f608fc3279d09e2d057fbe3f2ffbe5133796124781299c6da60cfe7ecea3abc30706ded2cdf18f9d788e59f2c31662df3abe01a9b12304fb8d5c8c +d = bce49c7b03dcdc72393b0a67cf5aa5df870f5aaa6137ada1edc7862e0981ec67 +Qx = c786d9421d67b72b922cf3def2a25eeb5e73f34543eb50b152e738a98afb0ca5 +Qy = 6796271e79e2496f9e74b126b1123a3d067de56b5605d6f51c8f6e1d5bb93aba +k = 89e690d78a5e0d2b8ce9f7fcbf34e2605fd9584760fa7729043397612dd21f94 +R = 07e5054c384839584624e8d730454dc27e673c4a90cbf129d88b91250341854d +S = f7e665b88614d0c5cbb3007cafe713763d81831525971f1747d92e4d1ca263a7 + +Msg = a3683d120807f0a030feed679785326698c3702f1983eaba1b70ddfa7f0b3188060b845e2b67ed57ee68087746710450f7427cb34655d719c0acbc09ac696adb4b22aba1b9322b7111076e67053a55f62b501a4bca0ad9d50a868f51aeeb4ef27823236f5267e8da83e143047422ce140d66e05e44dc84fb3a4506b2a5d7caa8 +d = 73188a923bc0b289e81c3db48d826917910f1b957700f8925425c1fb27cabab9 +Qx = 86662c014ab666ee770723be8da38c5cd299efc6480fc6f8c3603438fa8397b9 +Qy = f26b3307a650c3863faaa5f642f3ba1384c3d3a02edd3d48c657c269609cc3fc +k = ec90584ab3b383b590626f36ed4f5110e49888aec7ae7a9c5ea62dd2dc378666 +R = 13e9ad59112fde3af4163eb5c2400b5e9a602576d5869ac1c569075f08c90ff6 +S = 708ac65ff2b0baaccc6dd954e2a93df46016bd04457636de06798fcc17f02be5 + +Msg = b1df8051b213fc5f636537e37e212eb20b2423e6467a9c7081336a870e6373fc835899d59e546c0ac668cc81ce4921e88f42e6da2a109a03b4f4e819a17c955b8d099ec6b282fb495258dca13ec779c459da909475519a3477223c06b99afbd77f9922e7cbef844b93f3ce5f50db816b2e0d8b1575d2e17a6b8db9111d6da578 +d = f637d55763fe819541588e0c603f288a693cc66823c6bb7b8e003bd38580ebce +Qx = 74a4620c578601475fc169a9b84be613b4a16cb6acab8fd98848a6ec9fbd133d +Qy = 42b9e35d347c107e63bd55f525f915bcf1e3d2b81d002d3c39acf10fc30645a1 +k = 4d578f5099636234d9c1d566f1215d5d887ae5d47022be17dbf32a11a03f053b +R = 113a933ebc4d94ce1cef781e4829df0c493b0685d39fb2048ce01b21c398dbba +S = 3005bd4ec63dbd04ce9ff0c6246ad65d27fcf62edb2b7e461589f9f0e7446ffd + +Msg = 0b918ede985b5c491797d0a81446b2933be312f419b212e3aae9ba5914c00af431747a9d287a7c7761e9bcbc8a12aaf9d4a76d13dad59fc742f8f218ef66eb67035220a07acc1a357c5b562ecb6b895cf725c4230412fefac72097f2c2b829ed58742d7c327cad0f1058df1bddd4ae9c6d2aba25480424308684cecd6517cdd8 +d = 2e357d51517ff93b821f895932fddded8347f32596b812308e6f1baf7dd8a47f +Qx = 7e4078a1d50c669fb2996dd9bacb0c3ac7ede4f58fa0fa1222e78dbf5d1f4186 +Qy = 0014e46e90cc171fbb83ea34c6b78202ea8137a7d926f0169147ed5ae3d6596f +k = be522b0940b9a40d84bf790fe6abdc252877e671f2efa63a33a65a512fc2aa5c +R = a26b9ad775ac37ff4c7f042cdc4872c5e4e5e800485f488ddfaaed379f468090 +S = f88eae2019bebbba62b453b8ee3472ca5c67c267964cffe0cf2d2933c1723dff + +Msg = 0fab26fde1a4467ca930dbe513ccc3452b70313cccde2994eead2fde85c8da1db84d7d06a024c9e88629d5344224a4eae01b21a2665d5f7f36d5524bf5367d7f8b6a71ea05d413d4afde33777f0a3be49c9e6aa29ea447746a9e77ce27232a550b31dd4e7c9bc8913485f2dc83a56298051c92461fd46b14cc895c300a4fb874 +d = 77d60cacbbac86ab89009403c97289b5900466856887d3e6112af427f7f0f50b +Qx = a62032dfdb87e25ed0c70cad20d927c7effeb2638e6c88ddd670f74df16090e5 +Qy = 44c5ee2cf740ded468f5d2efe13daa7c5234645a37c073af35330d03a4fed976 +k = 06c1e692b045f425a21347ecf72833d0242906c7c1094f805566cdcb1256e394 +R = eb173b51fb0aec318950d097e7fda5c34e529519631c3e2c9b4550b903da417d +S = ca2c13574bf1b7d56e9dc18315036a31b8bceddf3e2c2902dcb40f0cc9e31b45 + +Msg = 7843f157ef8566722a7d69da67de7599ee65cb3975508f70c612b3289190e364141781e0b832f2d9627122742f4b5871ceeafcd09ba5ec90cae6bcc01ae32b50f13f63918dfb5177df9797c6273b92d103c3f7a3fc2050d2b196cc872c57b77f9bdb1782d4195445fcc6236dd8bd14c8bcbc8223a6739f6a17c9a861e8c821a6 +d = 486854e77962117f49e09378de6c9e3b3522fa752b10b2c810bf48db584d7388 +Qx = 760b5624bd64d19c866e54ccd74ad7f98851afdbc3ddeae3ec2c52a135be9cfa +Qy = feca15ce9350877102eee0f5af18b2fed89dc86b7df0bf7bc2963c1638e36fe8 +k = e4f77c6442eca239b01b0254e11a4182782d96f48ab521cc3d1d68df12b5a41a +R = bdff14e4600309c2c77f79a25963a955b5b500a7b2d34cb172cd6acd52905c7b +S = b0479cdb3df79923ec36a104a129534c5d59f622be7d613aa04530ad2507d3a2 + +[P-256,SHA-512] + +Msg = 6c8572b6a3a4a9e8e03dbeed99334d41661b8a8417074f335ab1845f6cc852adb8c01d9820fcf8e10699cc827a8fbdca2cbd46cc66e4e6b7ba41ec3efa733587e4a30ec552cd8ddab8163e148e50f4d090782897f3ddac84a41e1fcfe8c56b6152c0097b0d634b41011471ffd004f43eb4aafc038197ec6bae2b4470e869bded +d = 9dd0d3a3d514c2a8adb162b81e3adfba3299309f7d2018f607bdb15b1a25f499 +Qx = 6b738de3398b6ac57b9591f9d7985dd4f32137ad3460dcf8970c1390cb9eaf8d +Qy = 83bc61e26d2bbbd3cf2d2ab445a2bc4ab5dde41f4a13078fd1d3cc36ab596d57 +k = 9106192170ccb3c64684d48287bb81bbed51b40d503462c900e5c7aae43e380a +R = 275fa760878b4dc05e9d157fedfd8e9b1c9c861222a712748cb4b7754c043fb1 +S = 699d906bb8435a05345af3b37e3b357786939e94caae257852f0503adb1e0f7e + +Msg = 7e3c8fe162d48cc8c5b11b5e5ebc05ebc45c439bdbc0b0902145921b8383037cb0812222031598cd1a56fa71694fbd304cc62938233465ec39c6e49f57dfe823983b6923c4e865633949183e6b90e9e06d8275f3907d97967d47b6239fe2847b7d49cf16ba69d2862083cf1bccf7afe34fdc90e21998964107b64abe6b89d126 +d = f9bf909b7973bf0e3dad0e43dcb2d7fa8bda49dbe6e5357f8f0e2bd119be30e6 +Qx = f2a6674d4e86152a527199bed293fa63acde1b4d8a92b62e552210ba45c38792 +Qy = c72565c24f0eee6a094af341ddd8579747b865f91c8ed5b44cda8a19cc93776f +k = e547791f7185850f03d0c58419648f65b9d29cdc22ed1de2a64280220cfcafba +R = 4782903d2aaf8b190dab5cae2223388d2d8bd845b3875d37485c54e1ded1d3d8 +S = dfb40e406bfa074f0bf832771b2b9f186e2211f0bca279644a0ca8559acf39da + +Msg = d5aa8ac9218ca661cd177756af6fbb5a40a3fecfd4eea6d5872fbb9a2884784aa9b5f0c023a6e0da5cf6364754ee6465b4ee2d0ddc745b02994c98427a213c849537da5a4477b3abfe02648be67f26e80b56a33150490d062aaac137aa47f11cfeddba855bab9e4e028532a563326d927f9e6e3292b1fb248ee90b6f429798db +d = 724567d21ef682dfc6dc4d46853880cfa86fe6fea0efd51fac456f03c3d36ead +Qx = 70b877b5e365fcf08140b1eca119baba662879f38e059d074a2cb60b03ea5d39 +Qy = 5f56f94d591df40b9f3b8763ac4b3dbe622c956d5bd0c55658b6f46fa3deb201 +k = 79d6c967ed23c763ece9ca4b026218004c84dc2d4ccc86cf05c5d0f791f6279b +R = 2ba2ea2d316f8937f184ad3028e364574d20a202e4e7513d7af57ac2456804d1 +S = 64fe94968d18c5967c799e0349041b9e40e6c6c92ebb475e80dd82f51cf07320 + +Msg = 790b06054afc9c3fc4dfe72df19dd5d68d108cfcfca6212804f6d534fd2fbe489bd8f64bf205ce04bcb50124a12ce5238fc3fe7dd76e6fa640206af52549f133d593a1bfd423ab737f3326fa79433cde293236f90d4238f0dd38ed69492ddbd9c3eae583b6325a95dec3166fe52b21658293d8c137830ef45297d67813b7a508 +d = 29c5d54d7d1f099d50f949bfce8d6073dae059c5a19cc70834722f18a7199edd +Qx = 3088d4f45d274cc5f418c8ecc4cbcf96be87491f420250f8cbc01cdf2503ec47 +Qy = 634db48198129237ed068c88ff5809f6211921a6258f548f4b64dd125921b78b +k = 0508ad7774908b5705895fda5c3b7a3032bf85dab7232bf981177019f3d76460 +R = acd9f3b63626c5f32103e90e1dd1695907b1904aa9b14f2132caef331321971b +S = 15c04a8bd6c13ed5e9961814b2f406f064670153e4d5465dcef63c1d9dd52a87 + +Msg = 6d549aa87afdb8bfa60d22a68e2783b27e8db46041e4df04be0c261c4734b608a96f198d1cdb8d082ae48579ec9defcf21fbc72803764a58c31e5323d5452b9fb57c8991d31749140da7ef067b18bf0d7dfbae6eefd0d8064f334bf7e9ec1e028daed4e86e17635ec2e409a3ed1238048a45882c5c57501b314e636b9bc81cbe +d = 0d8095da1abba06b0d349c226511f642dabbf1043ad41baa4e14297afe8a3117 +Qx = 75a45758ced45ecf55f755cb56ca2601d794ebeaeb2e6107fe2fc443f580e23c +Qy = 5303d47d5a75ec821d51a2ee7548448208c699eca0cd89810ffc1aa4faf81ead +k = 5165c54def4026ab648f7768c4f1488bcb183f6db7ffe02c7022a529a116482a +R = ebc85fc4176b446b3384ccc62fc2526b45665561a0e7e9404ac376c90e450b59 +S = 8b2c09428e62c5109d17ed0cf8f9fd7c370d018a2a73f701effc9b17d04852c6 + +Msg = 1906e48b7f889ee3ff7ab0807a7aa88f53f4018808870bfed6372a77330c737647961324c2b4d46f6ee8b01190474951a701b048ae86579ff8e3fc889fecf926b17f98958ac7534e6e781ca2db2baa380dec766cfb2a3eca2a9d5818967d64dfab84f768d24ec122eebacaab0a4dc3a75f37331bb1c43dd8966cc09ec4945bbd +d = 52fe57da3427b1a75cb816f61c4e8e0e0551b94c01382b1a80837940ed579e61 +Qx = 2177e20a2092a46667debdcc21e7e45d6da72f124adecbc5ada6a7bcc7b401d5 +Qy = 550e468f2626070a080afeeb98edd75a721eb773c8e62149f3e903cf9c4d7b61 +k = 0464fe9674b01ff5bd8be21af3399fad66f90ad30f4e8ee6e2eb9bcccfd5185c +R = f8250f073f34034c1cde58f69a85e2f5a030703ebdd4dbfb98d3b3690db7d114 +S = a9e83e05f1d6e0fef782f186bedf43684c825ac480174d48b0e4d31505e27498 + +Msg = 7b59fef13daf01afec35dea3276541be681c4916767f34d4e874464d20979863ee77ad0fd1635bcdf93e9f62ed69ae52ec90aab5bbf87f8951213747ccec9f38c775c1df1e9d7f735c2ce39b42edb3b0c5086247556cfea539995c5d9689765288ec600848ecf085c01ca738bbef11f5d12d4457db988b4add90be00781024ad +d = 003d91611445919f59bfe3ca71fe0bfdeb0e39a7195e83ac03a37c7eceef0df2 +Qx = 7b9c592f61aae0555855d0b9ebb6fd00fb6746e8842e2523565c858630b9ba00 +Qy = d35b2e168b1875bbc563bea5e8d63c4e38957c774a65e762959a349eaf263ba0 +k = ef9df291ea27a4b45708f7608723c27d7d56b7df0599a54bc2c2fabbff373b40 +R = 66d057fd39958b0e4932bacd70a1769bbadcb62e4470937b45497a3d4500fabb +S = 6c853b889e18b5a49ee54b54dd1aaedfdd642e30eba171c5cab677f0df9e7318 + +Msg = 041a6767a935dc3d8985eb4e608b0cbfebe7f93789d4200bcfe595277ac2b0f402889b580b72def5da778a680fd380c955421f626d52dd9a83ea180187b850e1b72a4ec6dd63235e598fd15a9b19f8ce9aec1d23f0bd6ea4d92360d50f951152bc9a01354732ba0cf90aaed33c307c1de8fa3d14f9489151b8377b57c7215f0b +d = 48f13d393899cd835c4193670ec62f28e4c4903e0bbe5817bf0996831a720bb7 +Qx = 82a1a96f4648393c5e42633ecdeb1d8245c78c5ea236b5bab460dedcc8924bc0 +Qy = e8cbf03c34b5154f876de19f3bb6fd43cd2eabf6e7c95467bcfa8c8fc42d76fd +k = efed736e627899fea944007eea39a4a63c0c2e26491cd12adb546be3e5c68f7d +R = cf7fc24bdaa09ac0cca8497e13298b961380668613c7493954048c06385a7044 +S = f38b1c8306cf82ab76ee3a772b14416b49993fe11f986e9b0f0593c52ec91525 + +Msg = 7905a9036e022c78b2c9efd40b77b0a194fbc1d45462779b0b76ad30dc52c564e48a493d8249a061e62f26f453ba566538a4d43c64fb9fdbd1f36409316433c6f074e1b47b544a847de25fc67d81ac801ed9f7371a43da39001c90766f943e629d74d0436ba1240c3d7fab990d586a6d6ef1771786722df56448815f2feda48f +d = 95c99cf9ec26480275f23de419e41bb779590f0eab5cf9095d37dd70cb75e870 +Qx = 42c292b0fbcc9f457ae361d940a9d45ad9427431a105a6e5cd90a345fe3507f7 +Qy = 313b08fd2fa351908b3178051ee782cc62b9954ad95d4119aa564900f8ade70c +k = 4c08dd0f8b72ae9c674e1e448d4e2afe3a1ee69927fa23bbff3716f0b99553b7 +R = f2bc35eb1b8488b9e8d4a1dbb200e1abcb855458e1557dc1bf988278a174eb3b +S = ed9a2ec043a1d578e8eba6f57217976310e8674385ad2da08d6146c629de1cd9 + +Msg = cf25e4642d4f39d15afb7aec79469d82fc9aedb8f89964e79b749a852d931d37436502804e39555f5a3c75dd958fd5291ada647c1a5e38fe7b1048f16f2b711fdd5d39acc0812ca65bd50d7f8119f2fd195ab16633503a78ee9102c1f9c4c22568e0b54bd4fa3f5ff7b49160bf23e7e2231b1ebebbdaf0e4a7d4484158a87e07 +d = e15e835d0e2217bc7c6f05a498f20af1cd56f2f165c23d225eb3360aa2c5cbcf +Qx = 89dd22052ec3ab4840206a62f2270c21e7836d1a9109a3407dd0974c7802b9ae +Qy = e91609ba35c7008b080c77a9068d97a14ca77b97299e74945217672b2fd5faf0 +k = c9f621441c235fc47ec34eef4c08625df1ec74918e1f86075b753f2589f4c60b +R = a70d1a2d555d599bfb8c9b1f0d43725341151d17a8d0845fa56f3563703528a7 +S = 4e05c45adf41783e394a5312f86e66871c4be4896948c85966879d5c66d54b37 + +Msg = 7562c445b35883cc937be6349b4cefc3556a80255d70f09e28c3f393daac19442a7eecedcdfbe8f7628e30cd8939537ec56d5c9645d43340eb4e78fc5dd4322de8a07966b262770d7ff13a071ff3dce560718e60ed3086b7e0003a6abafe91af90af86733ce8689440bf73d2aa0acfe9776036e877599acbabfcb03bb3b50faa +d = 808c08c0d77423a6feaaffc8f98a2948f17726e67c15eeae4e672edbe388f98c +Qx = b0c0ad5e1f6001d8e9018ec611b2e3b91923e69fa6c98690ab644d650f640c42 +Qy = 610539c0b9ed21ac0a2f27527c1a61d9b47cbf033187b1a6ada006eb5b2662ed +k = 1f6d4a905c761a53d54c362976717d0d7fc94d222bb5489e4830080a1a67535d +R = 83404dcf8320baf206381800071e6a75160342d19743b4f176960d669dd03d07 +S = 3f75dcf102008b2989f81683ae45e9f1d4b67a6ef6fd5c8af44828af80e1cfb5 + +Msg = 051c2db8e71e44653ea1cb0afc9e0abdf12658e9e761bfb767c20c7ab4adfcb18ed9b5c372a3ac11d8a43c55f7f99b33355437891686d42362abd71db8b6d84dd694d6982f0612178a937aa934b9ac3c0794c39027bdd767841c4370666c80dbc0f8132ca27474f553d266deefd7c9dbad6d734f9006bb557567701bb7e6a7c9 +d = f7c6315f0081acd8f09c7a2c3ec1b7ece20180b0a6365a27dcd8f71b729558f9 +Qx = 250f7112d381c1751860045d9bcaf20dbeb25a001431f96ac6f19109362ffebb +Qy = 49fba9efe73546135a5a31ab3753e247034741ce839d3d94bd73936c4a17e4aa +k = 68c299be2c0c6d52d208d5d1a9e0ffa2af19b4833271404e5876e0aa93987866 +R = 7b195e92d2ba95911cda7570607e112d02a1c847ddaa33924734b51f5d81adab +S = 10d9f206755cef70ab5143ac43f3f8d38aea2644f31d52eaf3b472ee816e11e5 + +Msg = 4dcb7b62ba31b866fce7c1feedf0be1f67bf611dbc2e2e86f004422f67b3bc1839c6958eb1dc3ead137c3d7f88aa97244577a775c8021b1642a8647bba82871e3c15d0749ed343ea6cad38f123835d8ef66b0719273105e924e8685b65fd5dc430efbc35b05a6097f17ebc5943cdcd9abcba752b7f8f37027409bd6e11cd158f +d = f547735a9409386dbff719ce2dae03c50cb437d6b30cc7fa3ea20d9aec17e5a5 +Qx = 4ca87c5845fb04c2f76ae3273073b0523e356a445e4e95737260eba9e2d021db +Qy = 0f86475d07f82655320fdf2cd8db23b21905b1b1f2f9c48e2df87e24119c4880 +k = 91bd7d97f7ed3253cedefc144771bb8acbbda6eb24f9d752bbe1dd018e1384c7 +R = 008c1755d3df81e64e25270dbaa9396641556df7ffc7ac9add6739c382705397 +S = 77df443c729b039aded5b516b1077fecdd9986402d2c4b01734ba91e055e87fc + +Msg = efe55737771070d5ac79236b04e3fbaf4f2e9bed187d1930680fcf1aba769674bf426310f21245006f528779347d28b8aeacd2b1d5e3456dcbf188b2be8c07f19219e4067c1e7c9714784285d8bac79a76b56f2e2676ea93994f11eb573af1d03fc8ed1118eafc7f07a82f3263c33eb85e497e18f435d4076a774f42d276c323 +d = 26a1aa4b927a516b661986895aff58f40b78cc5d0c767eda7eaa3dbb835b5628 +Qx = 28afa3b0f81a0e95ad302f487a9b679fcdef8d3f40236ec4d4dbf4bb0cbba8b2 +Qy = bb4ac1be8405cbae8a553fbc28e29e2e689fabe7def26d653a1dafc023f3cecf +k = f98e1933c7fad4acbe94d95c1b013e1d6931fa8f67e6dbb677b564ef7c3e56ce +R = 15a9a5412d6a03edd71b84c121ce9a94cdd166e40da9ce4d79f1afff6a395a53 +S = 86bbc2b6c63bad706ec0b093578e3f064736ec69c0dba59b9e3e7f73762a4dc3 + +Msg = ea95859cc13cccb37198d919803be89c2ee10befdcaf5d5afa09dcc529d333ae1e4ffd3bd8ba8642203badd7a80a3f77eeee9402eed365d53f05c1a995c536f8236ba6b6ff8897393506660cc8ea82b2163aa6a1855251c87d935e23857fe35b889427b449de7274d7754bdeace960b4303c5dd5f745a5cfd580293d6548c832 +d = 6a5ca39aae2d45aa331f18a8598a3f2db32781f7c92efd4f64ee3bbe0c4c4e49 +Qx = c62cc4a39ace01006ad48cf49a3e71466955bbeeca5d318d672695df926b3aa4 +Qy = c85ccf517bf2ebd9ad6a9e99254def0d74d1d2fd611e328b4a3988d4f045fe6f +k = dac00c462bc85bf39c31b5e01df33e2ec1569e6efcb334bf18f0951992ac6160 +R = 6e7ff8ec7a5c48e0877224a9fa8481283de45fcbee23b4c252b0c622442c26ad +S = 3dfac320b9c873318117da6bd856000a392b815659e5aa2a6a1852ccb2501df3 + + + +[P-384,SHA-224] + +Msg = 39f0b25d4c15b09a0692b22fbacbb5f8aee184cb75887e2ebe0cd3be5d3815d29f9b587e10b3168c939054a89df11068e5c3fac21af742bf4c3e9512f5569674e7ad8b39042bcd73e4b7ce3e64fbea1c434ed01ad4ad8b5b569f6a0b9a1144f94097925672e59ba97bc4d33be2fa21b46c3dadbfb3a1f89afa199d4b44189938 +d = 0af857beff08046f23b03c4299eda86490393bde88e4f74348886b200555276b93b37d4f6fdec17c0ea581a30c59c727 +Qx = 00ea9d109dbaa3900461a9236453952b1f1c2a5aa12f6d500ac774acdff84ab7cb71a0f91bcd55aaa57cb8b4fbb3087d +Qy = 0fc0e3116c9e94be583b02b21b1eb168d8facf3955279360cbcd86e04ee50751054cfaebcf542538ac113d56ccc38b3e +k = e2f0ce83c5bbef3a6eccd1744f893bb52952475d2531a2854a88ff0aa9b12c65961e2e517fb334ef40e0c0d7a31ed5f5 +R = c36e5f0d3de71411e6e519f63e0f56cff432330a04fefef2993fdb56343e49f2f7db5fcab7728acc1e33d4692553c02e +S = 0d4064399d58cd771ab9420d438757f5936c3808e97081e457bc862a0c905295dca60ee94f4537591c6c7d217453909b + +Msg = 5a3c80e608ed3ac75a6e45f6e94d374271a6d42b67a481860d5d309cc8b37c79cb61f1716dc8aa84cb309ef9d68eb7fc6cf4b42333f316a5c30e74198c8b340926e340c5de47674a707293c4aa2a1a2274a602f01c26b156e895499c60b38ef53fc2032e7485c168d73700d6fa14232596a0e4997854a0b05d02e351b9d3de96 +d = 047dd5baab23f439ec23b58b7e6ff4cc37813cccb4ea73bb2308e6b82b3170edfe0e131eca50841bf1b686e651c57246 +Qx = de92ff09af2950854a70f2178d2ed50cc7042a7188301a1ea81d9629ad3c29795cb7f0d56630a401e4d6e5bed0068d1e +Qy = 6135adbd8624130735e64e65ecbd43770dcc12b28e737b5ed033666f34c918eb5589508e4a13b9243374a118a628dd0b +k = f3922351d14f1e5af84faab12fe57ded30f185afe5547aeb3061104740ecc42a8df0c27f3877b4d855642b78938c4e05 +R = 38e181870cb797c1f4e6598cfd032add1cb60447d33473038d06df73919f844eddd16f40f911075f8a4bacc0d924e684 +S = a58dd1ca18aa31277de66c30c3bb7a14b53705ce6c547ed2cb0e336f63c42809422efffcc722d1155f2254330a02b278 + +Msg = e7d974c5dbd3bfb8a2fb92fdd782f997d04be79e9713944ce13c5eb6f75dfdec811b7ee4b3859114b07f263846ae13f795eec8f3cb5b7565baff68e0fdd5e09ba8b176d5a71cb03fbc5546e6937fba560acb4db24bd42de1851432b96e8ca4078313cb849bce29c9d805258601d67cd0259e255f3048682e8fdbdda3398c3e31 +d = 54ba9c740535574cebc41ca5dc950629674ee94730353ac521aafd1c342d3f8ac52046ed804264e1440d7fe409c45c83 +Qx = 3db95ded500b2506b627270bac75688dd7d44f47029adeff99397ab4b6329a38dbb278a0fc58fe4914e6ae31721a6875 +Qy = 049288341553a9ac3dc2d9e18e7a92c43dd3c25ca866f0cb4c68127bef6b0e4ba85713d27d45c7d0dc57e5782a6bf733 +k = 04324bd078807f6b18507a93ee60da02031717217ee5ce569750737be912be72da087ac00f50e13fdf7249a6ae33f73e +R = b2752aa7abc1e5a29421c9c76620bcc3049ecc97e6bc39fcca126f505a9a1bfae3bde89fb751a1aa7b66fa8db3891ef0 +S = f1c69e6d818ca7ae3a477049b46420cebd910c0a9a477fd1a67a38d628d6edaac123aebfca67c53a5c80fe454dba7a9d + +Msg = a670fda4d1d56c70de1d8680328043b2b7029633caf0ee59ffe1421c914bb937133d5a0f9214846b2e0b350455a74c4ab434c56de65a17139bb8212bf1c76071a37536fa29348f871dbb26baa92eb93d97e923a6d2ffd9be25cbc33075e494e6db657bd8dc053fe4e17148d8cf6e2058164f2b5766750eb01bbe7b361cdb848c +d = dabe87bbe95499bac23bc83c8b7307fe04be198f00059e2bf67c9611feaffb2c8f274f6aa50eb99c3074186d8067d659 +Qx = c2aa0a695125279705917e02a4f258cade4c3ff9140a071414babf87764f426f7f36ffda9d5f3394375d24864235476f +Qy = 8f9808da0ce0227cf453f9e456f557db9752e23b45cce4baad5fee3844ddd7e1112bcec01ea9d67c7a76f3535bd0cb58 +k = 65a0305854033cbc6fe3ca139c40ca354d45801ecb59f4a923c251dc6b25d12d452d99b5d6711fdb5efac812aa464cc4 +R = c7fc32997d17ac79baf5789e4503f5f1a8863872bc350a91f12dd3ef8cf78c254e829217809e8e00b6b8d4d85be3f1fd +S = 1422e1838a22496df93486bce1142961dbd8478ae844b8dda54e210afdae0d9e930d587c91bb600b0bde7237186d94e6 + +Msg = 7843f918fe2588bcfe756e1f05b491d913523255aa006818be20b676c957f4edb8df863c6f5f8c15b3b80c7a2aa277b70d53f210bdfb856337980c406ea140e439dd321471407f374f69877b2d82367eed51e3c82c13948616dcb301d0c31f8f0352f2846abd9e72071f446a2f1bd3339a09ae41b84e150fd18f4ba5d3c6bfa0 +d = df43107a1deb24d02e31d479087bd669e2bc3e50f1f44b7db9484a7143cdca6a3391bddfea72dc940dbce8ec5efbd718 +Qx = 76bd4be5d520471162cb5c36f80038301b325f845d9642204a84d78b3e721098932827bf872bde0a9f86383953667d29 +Qy = 415116b8b878f896a5aa4dbbdc21076f27135d8bbcaaca02489ef639d742bd63f377da0c8e8ab36ff19b4a7cc5d4ceb4 +k = 798abad5a30d1805794540057388ee05e2422901c6335f985b9d4447b3ef75524751abfeab6409ad6bf77d4ae3014558 +R = 98744e5c6742fa5118a74a70db4957647a3cc12add4e876b45974a6a8707809f871daadbfc0b865e01624f706b65f10c +S = 9e256e8da8eff5a0c83baaa1ef4f7be798eba9543bf97adb0fff8719f5406ea1207a0cf703d99aa8f02169724b492273 + +Msg = caa83d5ab07febbd2e0fe2d63738b9b7b8752594bea7aaf50345b3d2f316653a8c9222f2b7877b64679e9573e81461a426029e45b8873a575094a1d572e0d32a9f0a9c6bcb9a2868543b7d8bbe4a69a09e7321f05f8366cced1b72df526f895b60aed2c39c249653c7839538770d4e5f47d3926ec0d168ab6a1af15bf1dca1f7 +d = ea7a563ba2a7f5ab69973dca1f1a0d1572f0c59817cd3b62ad356c2099e2cdca1c553323563f9dfbb333b126d84abc7f +Qx = cf4717c5f5de668b785f06bdc9845df5a09e4edd83f4669756407cbb60807305c632bc49f818f4a84b194369aa07736f +Qy = 7391e4982af8a2218f704f627d01f0508bfc8304992a2d598a420bf2eb519f33bd7caf79380793733b3dba0cc5e2b9d8 +k = 7b9606b3df7b2a340dbc68d9754de0734e1faeb5a0135578a97628d948702235c60b20c8002c8fcf906783e1b389e754 +R = 0d680010bed373287f9767955b5d2850e150b6713b49e453eb280148e45230c853d99ea2d2f8fcbd3ddcba19aeec0af1 +S = 64329763a930ab5452afdb0557fef16ff71810d6343dfc9c6ae18905c3d274db6554cdc69d6078a1ca03284474a94f30 + +Msg = 594603458d6534974aeeafba919c4d0f4cb6843a3af41204bbb88aeb2fca2772d305163dba863da050aabedbaf89db521955d1715de95bbcef979ecdc0c976181ece00355385f8a8f8cce127c9eac15ce3e958a3ed686184674ec9a50eb63271606ee7fdcb1323da3c3db8e89cad1fb42139a32d08abcfbf0d4ccfca18c89a86 +d = 4cc70cb35b3ddeb0df53a6bd7bd05f8ff4392a2db7344f2d443761484b3a468a4ee3d1a8b27113d57283fd18b05f7829 +Qx = 40e1fe21df34bb85a642a0abe819ebd128f7e39b84d8dcc4a9a599b372fb9588da1484600ec28b1297bb685f9ae77831 +Qy = f3aa69ada57879fdcbe8df19cefabc308add7d03b17b1fac2f7783fece6a8dfe20bc36f518692677d96e3f730a67a671 +k = 8eda401d98f5688c34d8dbebcd3991c87c0442b0379154eaa2e5287dabe9a9e34cfc1305d11ff68781df25d5611b331d +R = ff2d772786e159448bba26afd8c3281941a4cb0c56fec6f5cccb4c292c4ee0f7af9bd39bbe2d88148732585e104fdb30 +S = 07a1d890770daa949a17797dca7af3e8163da981ec330c03d63d1a8312c152be6a718163205ffa08da7dcc163ba261f4 + +Msg = 733252d2bd35547838be22656cc7aa67eff0af0b13b428f77267a513c6824c3dbae533068b6817e82665f009560affcfe4b2ddb5b667a644fc1a42d24f24e0947e0dc50fb62c919bc1fe4e7ded5e28f2e6d80fcf66a081fb2763526f8def5a81a4ddd38be0b59ee839da1643eeeaee7b1927cec12cf3da67c02bc5465151e346 +d = 366d15e4cd7605c71560a418bd0f382fd7cd7ad3090ff1b2dfbed74336166a905e1b760cf0bccee7a0e66c5ebfb831f1 +Qx = a143f277ab36a10b645ff6c58241ea67ffdc8acf12d60973068390f06b4d8f4d773b10c1ebf6889b1cfa73ebb90f6ca1 +Qy = 7a17cad29bb507b309021f6f92cb5c10ba535f4a3e317fcc68cfd02d3ccd269f465169c73d30ff308f5350d881b08aec +k = dbe545f920bc3d704c43d834bab21e40df12ec9e16a619a3e6b3f08760c26aae6e4fd91fad00f745194794b74bb1baee +R = cdc39b12bba30da66fe9554713c05880ddc27afa4d2d151440f124c351fb9496dc95046516b0921083347d64369846ac +S = 797d0344e49f9ba87a187c50f664e5015d449e346b1a7bd9427c5be559fc58173651880d5aadf053f81899d3368d6181 + +Msg = 5a182bd174feb038dfae3346267156bf663167f713dea1ce936b0edb815cd9b8c8e4d411c786ba2494a81442617255db7158b142e720d86c9b56680fb9efd4298cdd69079a28153494c42a24251c7ad42ecf7e97eabc1b3997529b2a297cbad2474269b87a0b1e385f2d7f8b6eb8d1cd75eaf7e91d1acbecd45d7b2bfbbe3216 +d = e357d869857a52a06e1ece5593d16407022354780eb9a7cb8575cef327f877d22322c006b3c8c11e3d7d296a708bdb6d +Qx = ce9a2185a68d6094aa5849a6efe78b349946f7380f0c79aa9664246cfcc71a879e90ad78a0474f58644c6a208168150e +Qy = 8354fa47673cb3e07d446521345706c5515584b2602f921c3b9c44dded9e2c3f90ce47adb36d7e5f9f95a8c5ad8af397 +k = 1e77367ac4e10924854d135ad2f2507f39e2bafdbce33ff256bcbe9a7329b8d27185218bcc3550aafbe3390e84c77292 +R = df3182d49ad70959fb0c95bc7312750ce70fc87f1a328d39d9b29ac05d31305ce7209d6c24d13225d9567b489f7a187b +S = d812b05abab0e96de13291e1f0da6479444ed5cd9d959b76f6cb43d394769035364f7c831a104dc7b5bd9b4a8e64df64 + +Msg = aaa99fb1c71340d785a18f6f668e898c25cf7a0ac31d13c5b388b7233408493a5a109af6d07065376b96f4903df7aba2b2af671a18772bb0472490d1240cde28967680727dd4acd47e0308920a75da857a6eeedee5b6586d45dff3d8a680599665aa895c89dd7770b824b7dee477ac5e7602d409d3cc553090c970b50811dbab +d = 745a18db47324a3710b993d115b2834339315e84e7006eafd889fb49bd3cc5a8b50c90526e65e6c53bddd2916d14bead +Qx = f692578c6f77531210aef55c9e004ce3b66cf268c6900dde31a8bbb76e7562e3fb76242de34ca330d2501030aa119466 +Qy = 40965833b28de926c46de060aa25beaeda98f8415a6b1e3564aa77870cf4c89bd4fde92c8f5d9bf0eb41721586859d8e +k = 11b9b36720abcac084efdb44c9f5b7d039e3250cb1e9c47850189ba3cfc1489d858b2a44df357772b61d919c7e729c0f +R = 02b252c99820cf50e6ce060ab55bd4f682276e29b4ae4197417432e6a7bfb8cf0bac89dfe105456af805d822cee77696 +S = 8e248bbf7d7028d63177e565c9d1666ee5be4d1ffbfffc9c7814b0cd38f74b98f3f2cd59be42b9f132bfe5ee789cd96c + +Msg = 1fadfa8254d3a0b82d137cfdd82043d5dc1fef195d5297b09cc5cfb061f59c933451c0dc2a11b4037f34f88dacb803251f8880c4b72585c3c196e6fb23484ca43a191f8e41b9b9a37e2e6fcaab6738c3c62d1c98e1c620bb788b7b51a04f998a510efdba0d3418622fe8ce203b3fcd553b9b4206365a39031797ad11e49745ec +d = 93f20963ea5011ff4f26481e359309e634195f6289134087bd2e83eee008c962780a679784ee7ac6acda03d663ed27e0 +Qx = 0edcde3533ea019e18f1a3cd97b7962e8823dda36c389f8f9287549f796d11376392b8a01c7a80f127a8f75795e04f54 +Qy = 63d7c458dccfc02f5148d755d59f9bbc8e3c3ea34908777928440747795955741296abcdd5386676419ed8049fedb489 +k = 3ad308faf04c42ee5ac69d36bc0aa9a96aacf55ea0f27dac4f52e088f023d206340a6324874ffad169ff80624de24c96 +R = 209b72f9aae72c4339813573c3a8408a9e0be641ca863d81d9d14c48d0bf4cd44a1a7985cff07b5d68f3f9478475645b +S = f6292e599b22a76eda95393cf59f4745fa6c472effd1f781879ad9a4437a98080b0b07dadad0c249631c682d2836a977 + +Msg = 9ecb6f5ed3ba666a8536a81ef65012c2cb8b433508798d84708abb06dfb75503886f78384fb8c7a4d2d49ef539d9b8a0b60938c7f07471dda91f258b0d99691b38a8403a2bb3f956bdfd09baba16d9b6877097a9b6213481b47a06e139d23ec7abad5668d21f912fdb70d31bb9adf9b3ce80e308252fa81a51674f88d02db72b +d = f175e6ac42fd48ec9d652c10707c039c67c4cc61d8c45a373dcda6e4ca6c53e947e49c24e01b48e7cdf92edfe6d316a1 +Qx = a40c64f595491ce15790a5a87fbe64c1800247b42acd08fe5257700719f46afc8acce0e4ede0517a312092d5e3d089cd +Qy = d565df9dc2f381cc0c5d84f382a43a98018524c0b4708a44b3e2817f9719f29fbf9c15803591ed9b4790c5adaba9f433 +k = 812dcaa6d4f9a43ccc553288065d13761581485aa903a500a690ccafbd330ba4818c977b98c4bb57f8a182a1afacfae9 +R = d000f18d3e4c162ff0d16f662e6703e7a6f5bff7a333ed266fa4f44c752415946c34945c342c20f739677186b1d80ab3 +S = ae7f1271c89e0aaa238710d039ea73a69110cc28fcf426f2fe6754b63a59e417fa84f903cf7dccb5468b43ff083bbfd5 + +Msg = e55bfca78d98e68d1b63688db12485578f36c489766f4d0bfaa0088433ff12133aaca455805095f2e655940860958b3ead111d9070778ee3bbf3e47e43d9eba8b8d9b1fdf72f793fcde2bcaa334f3e35fa2cca531ea7cf27fe9ccba741e38ac26129b2d612bf54a34e0ae6c166c0fef07fcd2b9ac253d7e041a500f7be7b8369 +d = 46c4f0b228b28aaa0ec8cfdf1d0ed3408b7ae049312fb9eaf5f3892720e68684cc8ad29844a3dc9d110edf6916dfb8bb +Qx = 13ddec844731b7e30c467451df08ca11d6c581cb64abd8a257671cffd26f5ccad4df7b9ee8924047a88a5d2d7567609c +Qy = d74ca94f590fd1d13e190cc1e03c3da6c3faab15c7dda034af3deefee8aeec3628fa8b1978c54cfcd071baa319a46ec0 +k = 2a9dd520207c40a379cd4036adef9ee60fa8bc8c0d39b3ad91850ac93fd543f218b1688581f23481a090b0e4c73792ac +R = 94e08cca20fe3866f643f53ec65faf3f2b4d80cd9bcc8ff8f88bb28da9eada324fc2d048908dd3d08a9e0ebb547731bc +S = 8e6f82c4d3069b14f4c844b4ca133a9503493265c9f77a7d4775eda67de76798a23dd7ea48e0ac3c337dd62bf058319d + +Msg = 02c6b3c83bd34b288d96409162aa4ff114e9d134bf948046eb5ebcc0c7fe9dfceadda83ed69da2fac00c8840f6c702a3fc5e6959d70f7e8af923e99e4937232ae3b841ffefd2e62fab3671a7c94a0281b8ea5bc176add57c5c9b6893fe7f5d48ce7256b96510810c4e046168a3c5be9843b84d5268a50349b3444341aa5490dd +d = 1d7b71ef01d0d33a8513a3aed3cabb83829589c8021087a740ca65b570777089be721a61172b874a22a1f81aef3f8bb6 +Qx = 8d2721370df8f097d5a69396249a315f6037dc7045b3da11eacae6d43036f779d5de7053d101768b42cc2b1283a3aaea +Qy = a046039ae662141f9954d278183eaa2e03917fe58583e32d344074d59d60caa5b0949c53066525d5cca923e2f201502e +k = d1b25ad25581cad17e96f1d302251681fee5b2efbb71c3c15ff035b2145d015d18e0e52dc3187ab5a560277b3a3929b0 +R = d836f52b14c7391744868daa2d5cf27eb9380b9b6176195573d5b04842e9f2fc3794d6cf877feafee63d11b05f6a6bee +S = 8b89042fef2c04d4bd6c9d66a06a010514321d623a5f8d57ba5ac3686872eaabca9e0ba2d058ae7028e870acf03ca32d + +Msg = 94f8bfbb9dd6c9b6193e84c2023a27dea00fd48356909faec2161972439686c146184f80686bc09e1a698af7df9dea3d24d9e9fd6d7348a146339c839282cf8984345dc6a51096d74ad238c35233012ad729f262481ec7cd6488f13a6ebac3f3d23438c7ccb5a66e2bf820e92b71c730bb12fd64ea1770d1f892e5b1e14a9e5c +d = cf53bdd4c91fe5aa4d82f116bd68153c907963fa3c9d478c9462bb03c79039493a8eaeb855773f2df37e4e551d509dcd +Qx = 3a65b26c08102b44838f8c2327ea080daf1e4fc45bb279ce03af13a2f9575f0fff9e2e4423a58594ce95d1e710b590ce +Qy = fe9dcbcb2ec6e8bd8ed3af3ff0aa619e900cc8bab3f50f6e5f79fac09164fb6a2077cc4f1fed3e9ec6899e91db329bf3 +k = df31908c9289d1fe25e055df199591b23e266433ab8657cc82cb3bca96b88720e229f8dfd42d8b78af7db69342430bca +R = 6770eea9369d6718e60dd0b91aee845ff7ed7e0fcc91675f56d32e5227fd3a4612bbcb1556fe94a989b9e3bcc25bb20e +S = c43072f706c98126d06a82b04251e3ecb0ba66c4bb6cd7c025919b9cc6019cdc635256d2a7fa017b806b1e88649d2c0d + +[P-384,SHA-256] + +Msg = 663b12ebf44b7ed3872b385477381f4b11adeb0aec9e0e2478776313d536376dc8fd5f3c715bb6ddf32c01ee1d6f8b731785732c0d8441df636d8145577e7b3138e43c32a61bc1242e0e73d62d624cdc924856076bdbbf1ec04ad4420732ef0c53d42479a08235fcfc4db4d869c4eb2828c73928cdc3e3758362d1b770809997 +d = c602bc74a34592c311a6569661e0832c84f7207274676cc42a89f058162630184b52f0d99b855a7783c987476d7f9e6b +Qx = 0400193b21f07cd059826e9453d3e96dd145041c97d49ff6b7047f86bb0b0439e909274cb9c282bfab88674c0765bc75 +Qy = f70d89c52acbc70468d2c5ae75c76d7f69b76af62dcf95e99eba5dd11adf8f42ec9a425b0c5ec98e2f234a926b82a147 +k = c10b5c25c4683d0b7827d0d88697cdc0932496b5299b798c0dd1e7af6cc757ccb30fcd3d36ead4a804877e24f3a32443 +R = b11db00cdaf53286d4483f38cd02785948477ed7ebc2ad609054551da0ab0359978c61851788aa2ec3267946d440e878 +S = 16007873c5b0604ce68112a8fee973e8e2b6e3319c683a762ff5065a076512d7c98b27e74b7887671048ac027df8cbf2 + +Msg = 784d7f4686c01bea32cb6cab8c089fb25c341080d9832e04feac6ea63a341079cbd562a75365c63cf7e63e7e1dddc9e99db75ccee59c5295340c2bba36f457690a8f05c62ab001e3d6b333780117d1456a9c8b27d6c2504db9c1428dad8ba797a4419914fcc636f0f14ede3fba49b023b12a77a2176b0b8ff55a895dcaf8dbce +d = 0287f62a5aa8432ff5e95618ec8f9ccaa870dde99c30b51b7673378efe4ccac598f4bbebbfd8993f9abb747b6ad638b9 +Qx = b36418a3014074ec9bbcc6a4b2367a4fb464cca7ec0a324cb68670d5c5e03e7a7eb07da117c5ea50b665ab62bd02a491 +Qy = 4ea299c30e7d76e2c5905babada2d3bb4ee5eb35a5a23605cdb0d5133471a53eb9e6758e49105a4eaf29d2267ba84ef2 +k = 935eeab3edeb281fbd4eead0d9c0babd4b10ff18a31663ee9de3bfa9ae8f9d266441158ea31c889ded9b3c592da77fd7 +R = 738f9cb28f3b991335ef17b62559255faf75cad370a222464a492e27bb173c7f16b22100ada6b695875c7e4b1a28f158 +S = bc998c30e1491cd5d60dc7d1c38333165efe036b2a78db9b8f0e85ee68619cfba654e11ae5ca5ee5a87099c27cf22442 + +Msg = 45e47fccc5bd6801f237cdbeac8f66ebc75f8b71a6da556d2e002352bd85bf269b6bc7c928d7bb1b0422601e4dd80b29d5906f8fcac212fe0eaaf52eda552303259cbcbe532e60abd3d38d786a45e39a2875bce675800a3eaeb9e42983d9fd9031180abd9adccc9ba30c6c198b4202c4dd70f241e969a3c412724b9b595bc28a +d = d44d3108873977036c9b97e03f914cba2f5775b68c425d550995574081191da764acc50196f6d2508082a150af5cd41f +Qx = c703835d723c85c643260379d8445b0c816fe9534351921e14a8e147fe140ec7b0c4d704f8dc66a232b2333b28f03dee +Qy = c5d0bb054053fd86c26f147c4966757aa04b00513a02d427b8d06c16055c607955efdc518d338abfe7927c195dc28588 +k = c80f63e080650c8a21e4f63a62ec909adfb7d877f365d11ee1cb260baf112eb4730c161c1d99dba98fc0d5bbd00dc97d +R = 81de2810cde421997013513951a3d537c51a013110d6dbb29251410bcb5ba001a9686b8490f1e581e282fd2ed0974b22 +S = 9cab0bbaffe91c7677ec3dd1f17060211a3cc0be574cbca064aa8c4b66ba6e64f3d80e83da895042ca32d311c388d950 + +Msg = c33ff63b4e6891e00b2349b3f2907c417ca355560544a91e24a7a0ee260d6850aeded29fc0176b6039ca6187e8333391047cceaf14b1077df8f147dad84d36b2dac5666dc2f69dc9b58b88cc73956efdb3b47f91831d5875051c76b0c4e9fc087012a1f03eeee85d6745b46aa50bd9cb0110c2c94508765cec162ee1aa841d73 +d = d5b72cbb6ec68aca46b9c27ad992afd8ffa02cb3067b234fcfa6e272e3b31be760695ff7df988b57663057ab19dd65e3 +Qx = 135a6542612f1468d8a4d01ff1914e532b1dd64d3627db9d403dc325651d3f82b0f6f0fd1dbdeca2be967c4fb3793b5f +Qy = cbbd40f6d3a38d0dfb64582ff4789d7b268241bc0c36de2884bccfaeeff3b7b2b46a30bb35719804e0d11124b4e7f480 +k = 9da6de7c87c101b68db64fea40d97f8ad974ceb88224c6796c690cbf61b8bd8eede8470b3caf6e6106b66cf3f0eebd55 +R = 17840911ecdf6ae0428b2634f442163c2c11b8dbf0cc7a5596fbe4d33e3e52f9d99e99ad169867b1f39e89c9180cedc2 +S = dd7ed67e480866d0474379ea4afff72870746f4feef2153be42f13bf472b1613d7faa5c0abb7f7464070f94d7cf3f234 + +Msg = f562f2b9d84b0e96a52532c3b43c39c8018c738bd8dc3797a7de7353971b2729d522d6961b1f2e4df3f6a4bd3653e6d72b74fc0dba92ab939c4b542e994e5db6dd8ed4f56f651e699052e791237ae1f552f990ad156226ae8f7bf17fcbfa564f749604f97e9df0879d50985747d981422a23040fe52f5ec74caf1d4aaad8a710 +d = 218ee54a71ef2ccf012aca231fee28a2c665fc395ff5cd20bde9b8df598c282664abf9159c5b3923132983f945056d93 +Qx = 01989ff07a7a452d8084937448be946bfedac4049cea34b3db6f7c91d07d69e926cce0af3d6e88855a28120cf3dba8df +Qy = eb064e029d7539d4b301aabafe8de8870162deffe6383bc63cc005add6ee1d5ced4a5761219c60cd58ad5b2a7c74aaa9 +k = c5d39b436d851d94691f5f4aa9ef447f7989d984f279ae8b091aef5449ac062bcc0567740f914624ad5b99fc32f9af0b +R = 07d5b1b12877e8cb5e0aa5e71eeeb17bf0aa203064c7e98b3a1798a74dc9717252dc47c7f06aaf1d5fe15b868323bbb9 +S = 69428cf101a7af5d08161a9fd7af212e02e33b6062aebdce4c96bf3a0684b5394cb902ca7c2dec6e2f01f40c4576009d + +Msg = ace953ae851f571d71779aa120915f27450b236da23e9106f8d0756abdd25861937941228d225d5fb1aa1b1ebf759b1e326aeb3b6cd0cd87edd2ab9f6a7ad67b63d2c501d6a550edb2e7c9d216cc8af78dd33546af64d00abed4d0d2cfc5c9a7b5a055dbe8f7547902d185cf46937314832bc5c602419a82ab83dbd9d3bd5aff +d = e6ab171f6937c000e144950801ad91023ae8e8476856c2592d9f7d5bb7180fd729211803d39a412ead6c0be761cfa5d1 +Qx = 38bc42b8c9d8866d09b214398d584b1b24a488dfacc3420d1e9506aa825b19fdf1ba74e7b8f547f47b571467fe8c4d1f +Qy = 5179d62668d3f6a7ab5c8e3761a685e12008fb87d0529a97645f65cfb5364376c1b6682e0ffcddd0bcd995c41d013ad3 +k = 05e9718aea9669c9e434f73866da5f252dec6d24c47a1c4ee3233450b6ec626de9746ebe095b285558dfc89fc1b622fe +R = df9bab9dd1f22ec6f27116f38831cb2089aa78aa8c073024a0faddd9a48e810a5e8e2cadd80fbf8dbd6088c71fe30b5b +S = 1e0e8718567d12d18558c57f9e87a755c309e4ffb497335a3adfc8d7475ce8fd882d5dc33a8f5a16274b7ad74bb7862a + +Msg = 9635ab832240be95301bedb94c5aec169eedc198cbbdfedcf41e9b586143d829b4597a6b2a81902828332825fd84a785f187a3894e21bd99d22c4f94dcf34453fc052f15ec64d1447c932cb38fcdd30b7be851963409c11881438cbaad7e96f9efbde317f2235d66af804477a5dfe9f0c51448383830050ecf228889f83631e1 +d = 14acd516c7198798fd42ab0684d18df1cd1c99e304312752b3035bed6535a8975dff8acfc2ba1675787c817b5bff6960 +Qx = 29909d143cf7ee9c74b11d52f1a8f3ebd4a720c135612ca5618d3f432f03a95602ee75a2057e1d7aab51d0648ac0b334 +Qy = 404b6c5adffbadfa1b0380ae89fed96ec1ca16cc28661e623d0f1c8b130fbaa96dd7257eae2bf03c2d3dcbc3dbc82c58 +k = 7f623c103eaa9099a0462e55f80519c565adaeffcb57a29993f3a8a92e63a560be8f0fb9d23dc80bff1064bb41abad79 +R = 932ab291950c16b2b19a8036cd2e905714c6229cb190a73b3ea49c48dd8e76063a453c7c3267a57597d2973678216296 +S = d17d4c5ddbb9c27beebf526f113b416c8abfad53d11c4224813c7f351ba41a77dd4e77d6e4a65bef2c9f62cc37a469a5 + +Msg = d98b9a7d4fe9d0fd95de5056af164a8b7882cd34ab5bde83a2abb32dc361eb56a479a3a6119db3b91dcad26a42d2206749567f0d97c34a981a91fc734921821a429f6a53401743a5c406ba9d560f956203abc9d1f32f1a13e7d7b290f75c95fdbf857ea597021461c06a3aacfa554ede3d69e4ff03bbbee5b7463ec77de2b3b2 +d = 2e780550984f3a00cb1e412429b33493c6eb6cd86d12f9d80588c247dcf567bd04296d2d4b24b889d9c54954b7f38f57 +Qx = 37dac42ef04663238443ef33e8addee2e78c40d50a1751913a7f5c37d1f23a26c7f86e16055c788b8ca9554f06b2f2ef +Qy = bbed1549652904e3d00c39b01cc0460dbaf3185e6190c2705677a9701de1fe56dff4f4d8418ee15059ff8fc36800982d +k = b788ca82811b0d4e4841765c71eafaa1e575378beedcd3860d8b92db3d070ac5aef7c425067860fbee6c50cf0c642bbb +R = 7292b3851870daeb2555a8a2fb198ead78739fcfb75327e5c32a82c6b77d58983e5ad548ccb75dcf9411039c9576d9b9 +S = a378c61802d9f1dd062b6e18f16416a954018f77df4df95ad1b983570377d5cfce4cc7861759e802c52f81abc4f49aac + +Msg = 1b4c754ac1c28dc415a71eac816bde68de7e8db66409af835838c5bb2c605111108a3bf13606ed5d8ade5ed72e50503e0de664416393d178ea4eec834d8d6f15039847b410080fd5529b426e5aadd8451c20ebd92d787921f33e147bcbeb327b104d4aab1157fc1df33e4d768404b5ccb7110055c2508c600f429fd0c21b5784 +d = a24d0fe90808aecc5d90626d7e6da7c9be5dfd4e1233c7f0f71f1b7c1c6fd318fafe18559c94718f044cf02ed5107cb1 +Qx = ec8ae1fb9bb88589d27d6f27d790392853396f37bc0c381631d85800fc668eea0886bf1c6cff801147df19778d5b1604 +Qy = 1e1a8336c1e2506f8ee388b55cc648ae73b9295ea78467979d2affb364536fad28120f51ec62a67cbb6ce7784780389f +k = 755d025509b73cf1ea8817beb772ad150b4c17a52378be187daffe3db0158921e5e552d1ca3c85df28519939f3cb794d +R = 23ff2ffa62bbd427d49995d9c9950116e0d5a06ef076a4553448bc109e6482c5e87d4c833bc88de0bc722bc98cae2e61 +S = 9aea13d487c3ea6917e16374caafcf0321c12a80d28902dd8cd81909bb04b8c439e2491e504756742d0d0bfb15a9c34c + +Msg = 3cd8c053741dd9f974c6c5dbf8a1e5728e9b5eafb1cbcfc3452f5fbbda32a8c7564dee157e8d902c52514361da6d972934a56b3276e2a9379e328e24282e0db697c5bc29090fc489ec46b7b188325dd4e96494c250de0f4a89fe2ccf919eaefcfb50c288113e6df92714feb7f46e0822478c796d0f4ff3447a32997e892693ce +d = 1c172e25732555afee7ded67a496f3f11babc0875898619f4519c29321e201e8ba1149f2c20b48e5efba235d58fea7c3 +Qx = 13e9e2c8bbcfe26e8f5f43c86268c5980ee693236a6b8777f3a7323718baa21005b482d08aafc6fa6e3667d91353544c +Qy = 9ba181b3ee505be030f87ecd249b00670a791489b42af04976013483ff95b630c91c01e95757e906129f2f9b4ce719a8 +k = 08aec9a9e58bdc028805eb5dc86073d05fff1f5fb3fd17f510fc08f9272d84ba7aa66b6f77d84fe6360bd538192bf01a +R = 2b4337c3dfbc886ffad7858ae2480cb62227e12205a70361c42f1a5ca9e658ee30fc3cf4030d85bd065edad83b99821f +S = 2550cef8574bf17fb3d6b0c9d04ab266962bac3621bac233ff2e4989712d2a4a07171c0aebd3040cd6a32c3bd3efb8b5 + +Msg = ed955dda6d9650124804d3deb6aeef900e520faf98b1ef6f14efcada7ca2433f09329b70897305e59c89024d76e466b28fe02cb2a9b12e2478c66470259d7c282137a19e5a04ffadea55245c0f34a681593fedc42931d8b3321b3d82e9cc102cd00540ad311ec7bd8c9d06db21bea4ca3dc74d98931ae0d40494aefc2345132c +d = 5b96555dbd602e71d4d5d3aee19fd1ea084ee23d4f55c10937056762bc2015cbded2e898a487f5482ab7e1e971245907 +Qx = 6e14c17bb831b0112d7f3543c5fd17c78379a516c9e0539b03b8b4bfdead2820343fc84b0382807573ded6c4d97b7003 +Qy = 7f60021d2de77546db666721c9aec84c3e2ba8de0ba77443600dc77e6839bbf9316271adb22d4cb47d08f745ecb1dafd +k = 7ad6f4ffd2b429ba10c6f112f800cacf1ad508cf8eba880893bb9659c1ddaaec57dcdc093a114500460d457bdde324f2 +R = faea950ca513806bc59028c638d6302ffc86978c3ff1f06db015dd7c4777050186cb8dd871f5e926e1416539c1939c2f +S = 2c592240eabb8a1f9878e1b5c9d5d3ced7b3a7ae571f5a86494ed2ca567a36eb72e7bea8934bded29594bccf67ca84bd + +Msg = ce395b001da2a58e49691605d44af4206306f62f561bf2394060d2a5591a350277166bed043819035f1e60b5b3fb5ae113ddd0473f8ef6b2b050c472c2a264e1d8b3ca82a4f158c40f2d78d9ce5e5ea6de243f2e1f13f47f6c6f403b270912c81c636be35b396ca58468b3fb60aa83911d61441a0528d973bc31f965d4059080 +d = 8df9c3c710a25192f3dea970910bb3784e3509874cccf4334823eb9f7a8d05b067f2d812d61e878e24b093089a0b8245 +Qx = 92c9e32b20cbe6d4ed0727c6c942cf804a72031d6dfd69078b5e78ebce2d192268f1f5e2abce5aaf1f8d6a35f136837f +Qy = d5167905fa7689e03b9fb1487c566f62b36f2bc1c4a2bfb6a836113b5c8d46f7c1ca51b628b14397fbc06ec9a07f4849 +k = 258dd05919735cd48627c9fe9fac5c252604aa7c2ae0460d7c1149cd96b7bd2ba195ad393bf392a2499f06aead5ba050 +R = 413793bcce52eda0f5b675a8d687cce86d5c9e1659b38a89e96246b5e05f8b0934d17dbba3b2ea44c838aa5fd87125d1 +S = ce7309fc2d6e3438818a1a29a997410b025b0403de20795b97c86c46034a6b02afeed279aeb06522d4de941bfdf50469 + +Msg = ffefe316455ae4ffdb890bb804bf7d31424ea060ecacff419d0f7134ff76ad434063c0ec0f8bb7059584d3a03f3625bb9e9f66ace1a47ac4b8f3e76fc7c420c55edb1427d1fa15b387ad73d02b0595c4e74321be8822752230a0dcfb85d60bfa186da7623a8ec3eb1633f0a294b23ae87216b14ccee9ef56418dcfab9427371e +d = 6002cb01ad2ce6e7101665d47729c863b6435c3875de57a93f99da834f73e3e6e2b3880e06de3e6bd1d51ea1807ab0d7 +Qx = e4216e1a20af8e8e3e74653ac016545001066e53e64af679ad1c85841bb475aed3e00ead052ae9955f48d675ff4ace56 +Qy = 8804c17641be21d4c6386902c9c5c888af25d97ca383703ea4a85cf93bbab360c0bbd2993374da499a303778650270b9 +k = 6b9507fd2844df0949f8b67b6fde986e50173713ac03df2edf65cb339859321cd3a2b9aab8356f95dec62460ab19c822 +R = 018891f6381ed358b422f79a299cf0789cee783ba388af4d82cbbe17f3709751b7fd9400e9702820c28b9afc62fdf489 +S = aef73bd590802b2fd2a65c4f7fec89f9b24ecc199a69254785925f334cd1977c5e1f858bd9830d7d7d243ea707b1af0b + +Msg = 304bccb718b3a9e12669913490cc5bcc1979287b56c628fad706c354241e88d10e81445a2853e3fc32ece094ba1abc3fdcab61da27f9a0fca739371049fed462ee6b08fa31cde12720f8144a6f00ce9b1a7a6eadd231f126717074b4efb5c72ce673ca5859000a436f67a338d698759f12c461247c45a361fb6cb661fdbe6714 +d = d8559c3543afc6f7b3dc037a687bad2630283757ba7862fd23ed14e2151a4cf5fed3d249268f780e0b96b6b46274a2d5 +Qx = 5f94223918f2ec9f0a08342cb99e724881c92453957c59672860f69daac01b660331a0f5845e50f1f27766b219c89e7e +Qy = d76d83396130d10d1168d76c7fc83742ffffbe66d9f4da4ca3f95f5ad6dac8cc7bb65d16d317d37aa99fdbf30ec7439c +k = 4ad5a92b5b8e170b71c8a7ed419dc624c7680004562b8d16a37b6e639f581ce81d5f0d98cce44d54c4e7136229148340 +R = f7baa6a5488ab462ea59aa31a36402b15880c68110b6069f51ede0c3b52a7b1e5bf926fdbe95768931b7d5f87058835c +S = 28b1c4ef448a432f7c91b98b0c6471691e888211b6af907369a8930859b8cdb2e94f466a44f4e52f46df9b0d65e35de6 + +Msg = 64f9f05c2805acf59c047b5f5d2e20c39277b6d6380f70f87b72327a76170b872bfe4b25c451602acfb6a631bb885e2655aee8abe44f69c90fb21ffde03cef2a452c468c6369867dfd8aa26ac24e16aa53b292375a8d8fbf988e302bf00088e4c061aa12c421d8fe3cbd7273b0e8993701df1c59431f436a08b8e15bd123d133 +d = b9208cbfd186ddfa3efd5b71342ae1efb01a13ebc4c2a992a2cbee7254b7846a4252ece1104b89d13d835911f8511224 +Qx = 166e6d96cb60d916fd19888a2dd945a3306ff0d7b0a5e30729f47d3dac3de2be3fd5cd7437e9a80d6c48cf960d2d36f8 +Qy = e6b2b70f131092ae210f29cc6bad701318bddb31bddf921695855c6208941100d0cee5d10799f8b835afe3ea510e8229 +k = da706ab5f61531f2378b3c0a2b342108cd119eadaa88b859df64923bccfb0ec2393fd312826f65c15a6587d1d460015b +R = d9124c42858080c62400e4d4d8136304e03d910cbe9b9b3487f4d27c7e0540a314d34bef8c850045c8746ca631c11c42 +S = bbf6424a3b70166fa799f49e918439d515327039258ef9bd88435a59c9c19659f8ec3c8660720b0c08354ff60e0f5a76 + +[P-384,SHA-384] + +Msg = 6b45d88037392e1371d9fd1cd174e9c1838d11c3d6133dc17e65fa0c485dcca9f52d41b60161246039e42ec784d49400bffdb51459f5de654091301a09378f93464d52118b48d44b30d781eb1dbed09da11fb4c818dbd442d161aba4b9edc79f05e4b7e401651395b53bd8b5bd3f2aaa6a00877fa9b45cadb8e648550b4c6cbe +d = 201b432d8df14324182d6261db3e4b3f46a8284482d52e370da41e6cbdf45ec2952f5db7ccbce3bc29449f4fb080ac97 +Qx = c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c3e97d942a3c56bf34123013dbf +Qy = 37257906a8223866eda0743c519616a76a758ae58aee81c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d +k = dcedabf85978e090f733c6e16646fa34df9ded6e5ce28c6676a00f58a25283db8885e16ce5bf97f917c81e1f25c9c771 +R = 50835a9251bad008106177ef004b091a1e4235cd0da84fff54542b0ed755c1d6f251609d14ecf18f9e1ddfe69b946e32 +S = 0475f3d30c6463b646e8d3bf2455830314611cbde404be518b14464fdb195fdcc92eb222e61f426a4a592c00a6a89721 + +Msg = d768f41e6e8ec2125d6cf5786d1ba96668ac6566c5cdbbe407f7f2051f3ad6b1acdbfe13edf0d0a86fa110f405406b69085219b5a234ebdb93153241f785d45811b3540d1c37424cc7194424787a51b79679266484c787fb1ded6d1a26b9567d5ea68f04be416caf3be9bd2cafa208fe2a9e234d3ae557c65d3fe6da4cb48da4 +d = 23d9f4ea6d87b7d6163d64256e3449255db14786401a51daa7847161bf56d494325ad2ac8ba928394e01061d882c3528 +Qx = 5d42d6301c54a438f65970bae2a098cbc567e98840006e356221966c86d82e8eca515bca850eaa3cd41f175f03a0cbfd +Qy = 4aef5a0ceece95d382bd70ab5ce1cb77408bae42b51a08816d5e5e1d3da8c18fcc95564a752730b0aabea983ccea4e2e +k = 67ba379366049008593eac124f59ab017358892ee0c063d38f3758bb849fd25d867c3561563cac1532a323b228dc0890 +R = fb318f4cb1276282bb43f733a7fb7c567ce94f4d02924fc758635ab2d1107108bf159b85db080cdc3b30fbb5400016f3 +S = 588e3d7af5da03eae255ecb1813100d95edc243476b724b22db8e85377660d7645ddc1c2c2ee4eaea8b683dbe22f86ca + +Msg = 6af6652e92a17b7898e40b6776fabaf0d74cf88d8f0ebfa6088309cbe09fac472eeac2aa8ea96b8c12e993d14c93f8ef4e8b547afe7ae5e4f3973170b35deb3239898918c70c1056332c3f894cd643d2d9b93c2561aac069577bbab45803250a31cd62226cab94d8cba7261dce9fe88c210c212b54329d76a273522c8ba91ddf +d = b5f670e98d8befc46f6f51fb2997069550c2a52ebfb4e5e25dd905352d9ef89eed5c2ecd16521853aadb1b52b8c42ae6 +Qx = 44ffb2a3a95e12d87c72b5ea0a8a7cb89f56b3bd46342b2303608d7216301c21b5d2921d80b6628dc512ccb84e2fc278 +Qy = e4c1002f1828abaec768cadcb7cf42fbf93b1709ccae6df5b134c41fae2b9a188bfbe1eccff0bd348517d7227f2071a6 +k = 229e67638f712f57bea4c2b02279d5ccad1e7c9e201c77f6f01aeb81ea90e62b44b2d2107fd66d35e56608fff65e28e4 +R = b11db592e4ebc75b6472b879b1d8ce57452c615aef20f67a280f8bca9b11a30ad4ac9d69541258c7dd5d0b4ab8dd7d49 +S = 4eb51db8004e46d438359abf060a9444616cb46b4f99c9a05b53ba6df02e914c9c0b6cc3a9791d804d2e4c0984dab1cc + +Msg = b96d74b2265dd895d94e25092fb9262dc4f2f7a328a3c0c3da134b2d0a4e2058ca994e3445c5ff4f812738e1b0c0f7a126486942a12e674a21f22d0886d68df2375f41685d694d487a718024933a7c4306f33f1a4267d469c530b0fed4e7dea520a19dd68bf0203cc87cad652260ed43b7b23f6ed140d3085875190191a0381a +d = de5975d8932533f092e76295ed6b23f10fc5fba48bfb82c6cc714826baf0126813247f8bd51d5738503654ab22459976 +Qx = f1fabafc01fec7e96d982528d9ef3a2a18b7fe8ae0fa0673977341c7ae4ae8d8d3d67420343d013a984f5f61da29ae38 +Qy = 1a31cf902c46343d01b2ebb614bc789c313b5f91f9302ad9418e9c797563e2fa3d44500f47b4e26ad8fdec1a816d1dcf +k = fc5940e661542436f9265c34bce407eff6364bd471aa79b90c906d923e15c9ed96eea4e86f3238ea86161d13b7d9359d +R = c2fbdd6a56789024082173725d797ef9fd6accb6ae664b7260f9e83cb8ab2490428c8b9c52e153612295432fec4d59cd +S = 8056c5bb57f41f73082888b234fcda320a33250b5da012ba1fdb4924355ae679012d81d2c08fc0f8634c708a4833232f + +Msg = 7cec7480a037ff40c232c1d2d6e8cd4c080bbeecdaf3886fccc9f129bb6d202c316eca76c8ad4e76079afe622f833a16f4907e817260c1fa68b10c7a151a37eb8c036b057ed4652c353db4b4a34b37c9a2b300fb5f5fcfb8aa8adae13db359160f70a9241546140e550af0073468683377e6771b6508327408c245d78911c2cc +d = 11e0d470dc31fab0f5722f87b74a6c8d7414115e58ceb38bfcdced367beac3adbf1fe9ba5a04f72e978b1eb54597eabc +Qx = 1950166989164cbfd97968c7e8adb6fbca1873ebef811ea259eb48b7d584627f0e6d6c64defe23cbc95236505a252aa1 +Qy = 41ef424b5cb076d4e32accd9250ea75fcf4ffd81814040c050d58c0a29b06be11edf67c911b403e418b7277417e52906 +k = e56904028226eb04f8d071e3f9cefec91075a81ca0fa87b44cae148fe1ce9827b5d1910db2336d0eb9813ddba3e4d7b5 +R = c38ef30f55624e8935680c29f8c24824877cf48ffc0ef015e62de1068893353030d1193bf9d34237d7ce6ba92c98b0fe +S = 651b8c3d5c9d5b936d300802a06d82ad54f7b1ba4327b2f031c0c5b0cb215ad4354edc7f932d934e877dfa1cf51b13fe + +Msg = 00ce978603229710345c9ad7c1c2dba3596b196528eea25bd822d43ca8f76a024e29217703dd0652c8a615284fc3edcc1c5ad1c8d5a8521c8e104c016a24e50c2e25066dcb56596f913b872767e3627aa3e55ec812e9fdac7c2f1beade83aef093e24c9c953982adf431a776880ae4583be158e11cdab1cbca3ad3a66900213d +d = 5c6bbf9fbcbb7b97c9535f57b431ed1ccae1945b7e8a4f1b032016b07810bd24a9e20055c0e9306650df59ef7e2cd8c2 +Qx = 2e01c5b59e619e00b79060a1e8ef695472e23bf9a511fc3d5ed77a334a242557098e40972713732c5291c97adf9cf2cf +Qy = 563e3fe4ad807e803b9e961b08da4dde4cea8925649da0d93221ce4cdceabc6a1db7612180a8c6bef3579c65539b97e9 +k = 03d23f1277b949cb6380211ad9d338e6f76c3eedac95989b91d0243cfb734a54b19bca45a5d13d6a4b9f815d919eea77 +R = abab65308f0b79c4f3a9ff28dd490acb0c320434094cef93e75adfe17e5820dc1f77544cfaaacdc8cf9ac8b38e174bef +S = 11b783d879a6de054b316af7d56e526c3dce96c85289122e3ad927cfa77bfc50b4a96c97f85b1b8221be2df083ff58fb + +Msg = 54a255c18692c6162a46add176a0ae8361dcb8948f092d8d7bac83e160431794d3b9812849bf1994bcdcfba56e8540c8a9ee5b93414548f2a653191b6bb28bda8dc70d45cc1b92a489f58a2d54f85766cb3c90de7dd88e690d8ebc9a79987eee1989df35af5e35522f83d85c48dda89863171c8b0bf4853ae28c2ac45c764416 +d = ffc7dedeff8343721f72046bc3c126626c177b0e48e247f44fd61f8469d4d5f0a74147fabaa334495cc1f986ebc5f0b1 +Qx = 51c78c979452edd53b563f63eb3e854a5b23e87f1b2103942b65f77d024471f75c8ce1cc0dfef83292b368112aa5126e +Qy = 313e6aaf09caa3ba30f13072b2134878f14a4a01ee86326cccbff3d079b4df097dc57985e8c8c834a10cb9d766169366 +k = c3de91dbe4f777698773da70dd610ef1a7efe4dc00d734399c7dd100728006a502822a5a7ff9129ffd8adf6c1fc1211a +R = f4f477855819ad8b1763f53691b76afbc4a31a638b1e08c293f9bcd55decf797f9913ca128d4b45b2e2ea3e82c6cf565 +S = 7c26be29569ef95480a6d0c1af49dc10a51a0a8931345e48c0c39498bfb94d62962980b56143a7b41a2fddc8794c1b7f + +Msg = 692a78f90d4f9d5aee5da536314a78d68c1feabbfe5d1ccea7f6059a66c4b310f8051c411c409ccf6e19a0cbd8b8e100c48317fe8c6d4f8a638b9551ce7ee178020f04f7da3001a0e6855225fb3c9b375e4ed964588a1a41a095f3f476c42d52ffd23ce1702c93b56d4425d3befcf75d0951b6fd5c05b05455bdaf205fe70ca2 +d = adca364ef144a21df64b163615e8349cf74ee9dbf728104215c532073a7f74e2f67385779f7f74ab344cc3c7da061cf6 +Qx = ef948daae68242330a7358ef73f23b56c07e37126266db3fa6eea233a04a9b3e4915233dd6754427cd4b71b75854077d +Qy = 009453ef1828eaff9e17c856d4fc1895ab60051312c3e1db1e3766566438b2990cbf9945c2545619e3e0145bc6a79004 +k = a2da3fae2e6da3cf11b49861afb34fba357fea89f54b35ce5ed7434ae09103fe53e2be75b93fc579fedf919f6d5e407e +R = dda994b9c428b57e9f8bbaebba0d682e3aac6ed828e3a1e99a7fc4c804bff8df151137f539c7389d80e23d9f3ee497bf +S = a0d6b10ceffd0e1b29cf784476f9173ba6ecd2cfc7929725f2d6e24e0db5a4721683640eaa2bbe151fb57560f9ce594b + +Msg = 3b309bb912ab2a51681451ed18ad79e95d968abc35423a67036a02af92f575a0c89f1b668afe22c7037ad1199e757a8f06b281c33e9a40bab69c9874e0bb680b905d909b9dc24a9fe89bb3d7f7d47082b25093c59754f8c19d1f81f30334a8cdd50a3cb72f96d4b3c305e60a439a7e93aeb640dd3c8de37d63c60fb469c2d3ed +d = 39bea008ec8a217866dcbdb1b93da34d1d3e851d011df9ef44b7828b3453a54aa70f1df9932170804eacd207e4f7e91d +Qx = 5709ec4305a9c3271c304face6c148142490b827a73a4c17affcfd01fffd7eaa65d2fdedfa2419fc64ed910823513faf +Qy = b083cda1cf3be6371b6c06e729ea6299213428db57119347247ec1fcd44204386cc0bca3f452d9d864b39efbfc89d6b2 +k = 3c90cc7b6984056f570542a51cbe497ce4c11aeae8fc35e8fd6a0d9adeb650e8644f9d1d5e4341b5adc81e27f284c08f +R = d13646895afb1bfd1953551bb922809c95ad65d6abe94eb3719c899aa1f6dba6b01222c7f283900fe98628b7597b6ea6 +S = 4a9a38afda04c0a6b0058943b679bd02205b14d0f3d49b8f31aac289129780cdb1c555def8c3f9106b478729e0c7efaa + +Msg = f072b72b8783289463da118613c43824d11441dba364c289de03ff5fab3a6f60e85957d8ff211f1cb62fa90216fb727106f692e5ae0844b11b710e5a12c69df3ed895b94e8769ecd15ff433762d6e8e94d8e6a72645b213b0231344e2c968056766c5dd6b5a5df41971858b85e99afbf859400f839b42cd129068efabeea4a26 +d = e849cf948b241362e3e20c458b52df044f2a72deb0f41c1bb0673e7c04cdd70811215059032b5ca3cc69c345dcce4cf7 +Qx = 06c037a0cbf43fdf335dff33de06d34348405353f9fdf2ce1361efba30fb204aea9dbd2e30da0a10fd2d876188371be6 +Qy = 360d38f3940e34679204b98fbf70b8a4d97f25443e46d0807ab634ed5891ad864dd7703557aa933cd380e26eea662a43 +k = 32386b2593c85e877b70e5e5495936f65dc49553caef1aa6cc14d9cd370c442a0ccfab4c0da9ec311b67913b1b575a9d +R = 5886078d3495767e330c7507b7ca0fa07a50e59912a416d89f0ab1aa4e88153d6eaf00882d1b4aa64153153352d853b5 +S = 2cc10023bf1bf8ccfd14b06b82cc2114449a352389c8ff9f6f78cdc4e32bde69f3869da0e17f691b329682ae7a36e1aa + +Msg = cf4945350be8133b575c4ad6c9585e0b83ff1ed17989b6cd6c71b41b5264e828b4e115995b1ae77528e7e9002ac1b5669064442645929f9d7dd70927cb93f95edeb73e8624f4bc897ec4c2c7581cb626916f29b2d6e6c2fba8c59a71e30754b459d81b912a12798182bcff4019c7bdfe929cc769bcc2414befe7d2906add4271 +d = d89607475d509ef23dc9f476eae4280c986de741b63560670fa2bd605f5049f1972792c0413a5b3b4b34e7a38b70b7ca +Qx = 49a1c631f31cf5c45b2676b1f130cbf9be683d0a50dffae0d147c1e9913ab1090c6529a84f47ddc7cf025921b771355a +Qy = 1e207eece62f2bcc6bdabc1113158145170be97469a2904eaaa93aad85b86a19719207f3e423051f5b9cbbe2754eefcb +k = 78613c570c8d33b7dd1bd1561d87e36282e8cf4843e7c344a2b2bb6a0da94756d670eeaffe434f7ae7c780f7cf05ca08 +R = 66f92b39aa3f4aeb9e2dc03ac3855406fa3ebbab0a6c88a78d7a03482f0c9868d7b78bc081ede0947c7f37bf193074ba +S = e5c64ed98d7f3701193f25dd237d59c91c0da6e26215e0889d82e6d3e416693f8d58843cf30ab10ab8d0edd9170b53ad + +Msg = d9b5cf0b50416573ff3c63133275a18394dd4326be2041e8d97e6e4e3855a4a177e9d26dfd223fe8aa74564edb49bd72de19916fb6f001f44530d5c18e2c332bce1b7415df5927ece5f3824f34d174b963136b53aef1fb78fb0c06a201a40b2db38e4d8216fc1e392a798c8ab4b3a314496b7f1087804ebfa89bf96e9cdb80c0 +d = 083e7152734adf342520ae377087a223688de2899b10cfcb34a0b36bca500a4dfa530e2343e6a39da7ae1eb0862b4a0d +Qx = 70a0f16b6c61172659b027ed19b18fd8f57bd28dc0501f207bd6b0bb065b5671cf3dd1ed13d388dcf6ccc766597aa604 +Qy = 4f845bf01c3c3f6126a7368c3454f51425801ee0b72e63fb6799b4420bfdebe3e37c7246db627cc82c09654979c700bb +k = 28096ababe29a075fbdf894709a20d0fdedb01ed3eeacb642a33a0da6aed726e13caf6cf206792ec359f0c9f9b567552 +R = ee2923f9b9999ea05b5e57f505bed5c6ba0420def42c6fa90eef7a6ef770786525546de27cdeb2f8586f8f29fb4ee67c +S = 50ef923fb217c4cf65a48b94412fda430fac685f0da7bd574557c6c50f5b22e0c8354d99f2c2f2c2691f252f93c7d84a + +Msg = 9e4042d8438a405475b7dab1cd783eb6ce1d1bffa46ac9dfda622b23ac31057b922eced8e2ed7b3241efeafd7c9ab372bf16230f7134647f2956fb793989d3c885a5ae064e85ed971b64f5f561e7ddb79d49aa6ebe727c671c67879b794554c04de0e05d68264855745ef3c9567bd646d5c5f8728b797c181b6b6a876e167663 +d = 63578d416215aff2cc78f9b926d4c7740a77c142944e104aa7422b19a616898262d46a8a942d5e8d5db135ee8b09a368 +Qx = cadbacef4406099316db2ce3206adc636c2bb0a835847ed7941efb02862472f3150338f13f4860d47f39b7e098f0a390 +Qy = 752ad0f22c9c264336cde11bbc95d1816ed4d1b1500db6b8dce259a42832e613c31178c2c7995206a62e201ba108f570 +k = 7b69c5d5b4d05c9950dc94c27d58403b4c52c004b80a80418ad3a89aabc5d34f21926729e76afd280cc8ee88c9805a2a +R = db054addb6161ee49c6ce2e4d646d7670754747b6737ca8516e9d1e87859937c3ef9b1d2663e10d7e4bd00ec85b7a97a +S = fcc504e0f00ef29587e4bc22faada4db30e2cb1ac552680a65785ae87beb666c792513f2be7a3180fc544296841a0e27 + +Msg = 0b14a7484a40b68a3ce1273b8a48b8fdb65ba900d98541c4bbd07b97e31bcc4c85545a03e9deab3c563f47a036ff60d0361684ba241b5aa68bb46f440da22181ee328a011de98eff34ba235ec10612b07bdfa6b3dc4ccc5e82d3a8d057e1862fef3def5a1804696f84699fda2ec4175a54a4d08bcb4f0406fdac4eddadf5e29b +d = ed4df19971658b74868800b3b81bc877807743b25c65740f1d6377542afe2c6427612c840ada31a8eb794718f37c7283 +Qx = 33093a0568757e8b58df5b72ea5fe5bf26e6f7aeb541b4c6a8c189c93721749bcaceccf2982a2f0702586a9f812fc66f +Qy = ebe320d09e1f0662189d50b85a20403b821ac0d000afdbf66a0a33f304726c69e354d81c50b94ba3a5250efc31319cd1 +k = d9b4cd1bdfa83e608289634dbfcee643f07315baf743fc91922880b55a2feda3b38ddf6040d3ba10985cd1285fc690d5 +R = 009c74063e206a4259b53decff5445683a03f44fa67252b76bd3581081c714f882f882df915e97dbeab061fa8b3cc4e7 +S = d40e09d3468b46699948007e8f59845766dbf694b9c62066890dd055c0cb9a0caf0aa611fb9f466ad0bbb00dbe29d7eb + +Msg = 0e646c6c3cc0f9fdedef934b7195fe3837836a9f6f263968af95ef84cd035750f3cdb649de745c874a6ef66b3dd83b66068b4335bc0a97184182e3965c722b3b1aee488c3620adb835a8140e199f4fc83a88b02881816b366a09316e25685217f9221157fc05b2d8d2bc855372183da7af3f0a14148a09def37a332f8eb40dc9 +d = e9c7e9a79618d6ff3274da1abd0ff3ed0ec1ae3b54c3a4fd8d68d98fb04326b7633fc637e0b195228d0edba6bb1468fb +Qx = a39ac353ca787982c577aff1e8601ce192aa90fd0de4c0ed627f66a8b6f02ae51315543f72ffc1c48a7269b25e7c289a +Qy = 9064a507b66b340b6e0e0d5ffaa67dd20e6dafc0ea6a6faee1635177af256f9108a22e9edf736ab4ae8e96dc207b1fa9 +k = b094cb3a5c1440cfab9dc56d0ec2eff00f2110dea203654c70757254aa5912a7e73972e607459b1f4861e0b08a5cc763 +R = ee82c0f90501136eb0dc0e459ad17bf3be1b1c8b8d05c60068a9306a346326ff7344776a95f1f7e2e2cf9477130e735c +S = af10b90f203af23b7500e070536e64629ba19245d6ef39aab57fcdb1b73c4c6bf7070c6263544633d3d358c12a178138 + +[P-384,SHA-512] + +Msg = 67d9eb88f289454d61def4764d1573db49b875cfb11e139d7eacc4b7a79d3db3bf7208191b2b2078cbbcc974ec0da1ed5e0c10ec37f6181bf81c0f32972a125df64e3b3e1d838ec7da8dfe0b7fcc911e43159a79c73df5fa252b98790be511d8a732fcbf011aacc7d45d8027d50a347703d613ceda09f650c6104c9459537c8f +d = 217afba406d8ab32ee07b0f27eef789fc201d121ffab76c8fbe3c2d352c594909abe591c6f86233992362c9d631baf7c +Qx = fb937e4a303617b71b6c1a25f2ac786087328a3e26bdef55e52d46ab5e69e5411bf9fc55f5df9994d2bf82e8f39a153e +Qy = a97d9075e92fa5bfe67e6ec18e21cc4d11fde59a68aef72c0e46a28f31a9d60385f41f39da468f4e6c3d3fbac9046765 +k = 90338a7f6ffce541366ca2987c3b3ca527992d1efcf1dd2723fbd241a24cff19990f2af5fd6419ed2104b4a59b5ae631 +R = c269d9c4619aafdf5f4b3100211dddb14693abe25551e04f9499c91152a296d7449c08b36f87d1e16e8e15fee4a7f5c8 +S = 77ffed5c61665152d52161dc13ac3fbae5786928a3d736f42d34a9e4d6d4a70a02d5af90fa37a23a318902ae2656c071 + +Msg = 45db86829c363c80160659e3c5c7d7971abb1f6f0d495709bba908d7aa99c9df64b3408a51bd69aba8870e2aaff488ef138f3123cf94391d081f357e21906a4e2f311defe527c55e0231579957c51def507f835cceb466eb2593a509dcbee2f09e0dde6693b2bfe17697c9e86dd672f5797339cbe9ea8a7c6309b061eca7aef5 +d = 0a3f45a28a355381a919372f60320d6610cfb69c3e318eb1607db3cadfc42b728b77a6a9e9e333de9183c58933daf60f +Qx = 832cbb7061a719a316e73dbad348fa67cd17c33f40b9000a3d3b691a2a2cd821052566717c3ead01089b56086af1366f +Qy = 1e15a048d1dce642d9ebcbfac7f92b1bcee90fd0240cc79abd29e32e0e655c4ee1fd34fb88178bba92aca100e7794ed0 +k = 2a78e651623ba604c42cf094fc7d046629306f508853427ba091448800d1092c041bb2323035fc9d19a8d44950f7dcc3 +R = 0db0cc9a2bda8dd7e565ad36f91b1c5756d78164dc8a72a5bee4b6bc45ea38c7a16b01d05b1893d4e06b62db24c30385 +S = abd383edaeda7d0b8de1b54fcd3c28874fed62ab266f1f84c8ba796a7b54e5e0695fdb43ce7fe90ed00fa468d87bca64 + +Msg = 4672fce0721d37c5be166bffa4b30d753bcf104b9b414db994b3ed33f36af4935ea59a0bb92db66448b3f57dad4fc67cef10ce141bf82c536be604b89a0bc0e8bca605b867880049d97142d30538fc543bd9d4fab7fdbe2f703815cdb6361beb66acff764bc275f910d1662445b07b92830db69a5994857f53657ed5ca282648 +d = 2e408c57921939f0e0fe2e80ce74a4fa4a1b4fa7ab070206298fe894d655be50e2583af9e45544b5d69c73dce8a2c8e7 +Qx = a2b24a5ad4a2e91f12199ed7699e3f297e27bf8b8ea8fbe7ed28366f3544cd8e680c238450f8a6422b40829d6647b25c +Qy = 2732be0075536e6519f6a099b975a40f8e0de337fa4d48bd0762b43f41cab8deafdef9cfbb9973e457801e3bf9c93304 +k = b10b6258afdde81f9c971cc1526d942e20cafac02f59fee10f98e99b8674636bff1d84a6eaa49c0de8d8cfdc90d8ce84 +R = be428a8de89a364a134719141ee8d776a3a8338f1132b07e01b28573d8eaf3b9008b63304c48821e53638b6141f9660b +S = 866181dbef5c147d391bed6adcee408c339982c307adc718c2b9ab9e5642d8dedc36dd6402559a3ab614c99c1e56b529 + +Msg = 9ae48fdd9bfc5cb0f4d4761e28b2073bda05a3e3fe82c212e66701dc4573cc67a829b0f82d7520b1bf11db0c6d1743822bbe41bb0adbd7222aa5fae70fbd1a31f2d4453a01c81e064d775388468be96f6063f8673b7b8d4455fe1bd4c801ad5e625a015eaa4a1a18da490d2af8642201eaba3c611cbd65f861d8e19ca82a1ee6 +d = 1c285da72a8eb1c3c38faab8d3bb4e68dc95c797082b9a3991a21c1de54759071ecf2265fb1eff504ab24174bc6710cf +Qx = 11acb1b5cc59a4f1df1913a8d6e91cbdafb8206dc44aff7d9da45906b664fc33194d9935a82aa4d62f39618897c86025 +Qy = 832ed0b9575fff52a3603bfe89f312751b4c396da98324117a61b3f525d27b2266f6cfb22be07e50b6874435e380ed62 +k = 2513075e02cc7fb3cff7b7adde46da31c5493749b5cf02758bd5b098a838bfd4d5e4c7fb8268bdc37e219c30efebe878 +R = b3d638b3be45f14f170da5bdc22d2114deac93ab340a25b3af2b5c18584bb9147e00dc6c67a2274f79aa4838793eb63f +S = 876112bdca2c725eb2f6dbd76d07710a31f0c16d38430cb0817f320a25a9ecfec8a66137d0304612ae29a6a484fd3319 + +Msg = 817d6a110a8fd0ca7b4d565558f68b59a156744d4c5aac5c6610c95451793de2a756f774558c61d21818d3ebeeeb71d132da1c23a02f4b305eccc5cd46bd21dfc173a8a91098354f10ffbb21bf63d9f4c3feb231c736504549a78fd76d39f3ad35c36178f5c233742d2917d5611d2073124845f1e3615b2ef25199a7a547e882 +d = 9da37e104938019fbdcf247e3df879a282c45f8fb57e6655e36b47723af42bec3b820f660436deb3de123a21de0ca37b +Qx = 722d0ea6891d509b18b85ca56f74deb5c3030d2a30433824123d430d03c99279572c3b28ecf01e747b9db8acc55d0ba3 +Qy = 7e2605ea7092214f366f3639037bffd89fe103c646e990839d3a1ced8d78edb5b9bc60d834fd8e2a3c17e920bdae023a +k = c8c18e53a9aa5915288c33132bd09323638f7995cd89162073984ed84e72e07a37e18c4c023933eace92c35d10e6b1b6 +R = 6512a8a2be731e301dcf4803764297862bbfa0ac8daed64d8e98b34618ecb20520fc5d3cf890b7783edf86e7ea407541 +S = 4ff10301f7b4168fae066361376007c1d7aa89a75c87719d0b54711ffef5ef3726f3eef84f7ebc025c110bde511b17f6 + +Msg = 464f10ec6fb229a51db5fd0e122f2cb8a9a022117e2987f4007bf5565b2c16aba0714e2e3cdd0c100d55ac3017e36fc7501ad8309ab9572aa65424c9eb2e580a119c55777676ec498df53ef6ae78fd8a988130ee0e6082bf1ef71cd4c946021018a8ca7154d13b174c638912613b0bdb9001c302bf7e443ad2124ab2c1cce212 +d = 0661ab3bf9f7bef51bec7dff758de289154557beb9ce18cc4b8cc09a871e8322af259cf188b593dc62f03a19e75f7f69 +Qx = b4f100558043858efa728082d9b99ad5192b59b0947434f5ba7ff2514508a6d71ba54e7221c31cb0712103272b3f6fa4 +Qy = 34f6df4eeb2da11498044635067c2715ed15ae251c78ffb9030d87909ea8539b66394e93109ca54c0406cf99960c3e93 +k = 84a87137edb6894f96c5a8e94a3765162034feb84dfea94e1c71411170c285a80321ec7999e25861844143209804882c +R = 4dc9d1b949b36e3c3847ac1c7ed114e1bc9cbe76119cf6fcd3f1b69ee6ee54e3255f1bb288fe2f8bd6d4049a21793c27 +S = 56a561d647b62ccae1e6df818b1a6fbde66c82ef0ff69ee415f183e7daf76be22630c7e02cd3fd729dfa490f26824584 + +Msg = 4e3e0fb96320ddccde8b463c273654c4f7164920b1d63430921d2e808dee403e6420eedda0a557b911d00736a4f8798dd4ef26673efd6d190988ad4929ec64f8685cfb76070a36cd6a3a4bf2f54fb08a349d44642b6f614043fef9b2813b63457c76537d23da7b37310334f7ba76edf1999dad86f72aa3446445a65952ac4e50 +d = 66e7cfdeb7f264cf786e35210f458c32223c3a12a3bc4b63d53a5776bc9b069928452484f6241caa3781fd1a4109d4db +Qx = 3c7682de540ab231daf21bf9fc80bda6abf7e17dcc79d476c7b7c3bd4d42d386877fd8ba495c1b0333e04fb5fd2a1505 +Qy = 0a1582e4f4d72abea9d3476aff8369c41261f0c5dddf2ca82e10f7a163f73df09473d9e5e2552187104e4cc7c6d83611 +k = 2fa266f5cce190eb77614933ca6a55121ad8bae168ff7a9043d96d13b5ca2fe70101ff9fe1e2b2cd7413e6aa8f49abde +R = e7ecda9da0c52d0474a9f70094dc8f061d7d6a22210d3b69a7be8f389aa666f256322099b87d16ad35357ea856574dba +S = ba348eb40a2830ec5a1130264ac0a8675420b1ae243e808a778135809ece21f42c0c881166321102b4f02df4c5c7ed9d + +Msg = c466b6b6baf7e6ffa876ec06105e2d43534e0517c07b1c4c9fb67ba81ce09525a7721ec3c290f2b1f65b6463d41598e7a25b2238501629953a5ca955b644354fb6856733a2e5bb8f5bc21a0c803493f5539f9fb83aab3dba2c982989c2270c61ab244b68bfe1b948d00c2ed975e09c29b5f8a7effcad8652a148cc880d503217 +d = 92c2f7ee64af86d003ab484e12b82fcf245fc330761057fec5b7af8f7e0a2d85b468c21d171460fcb829cae7b986316d +Qx = ca43a306479bf8fb537d4b9ff9d635bbb2a0d60d9e854d5b7e269d09d91f78c6b90b616e4c931629453645a2bb371e14 +Qy = 356c4d7f10e690614eaf7f82ba0f9dc1aad98130c0ad9fe353deec565cc04bef789a0a4242322e0058b46cd02f2de77d +k = 6ec81fb74f8725ba225f317264460ee300cfd2f02092000989acbdad4799cf55c244a65c557113328fe20282e6badb55 +R = cd7a4309bcebc25a8e10899fe2eda5f8b2dbcf329cd2f3d65befd67393e83fba2f8a67a15c01a6ac8314f9f5e87a9dca +S = 6dcfc0426bc148e67e91d4784e3d7e9bc3b7ce3676be62daa7f3f55dfdff6d9dc735b5e3e0bbd0785db1f76f7ac065f3 + +Msg = feac892b7720af80b3c9eede51e923f18d3d0c5de4c31f4aa75e36df7c7c2fd8f41778851a24b69e67dccb65e159dd5c383243bad7cfedcc5e85c8a01c34b0b94ba8e07e4c024c09d279b3731e8b62f9562d3c4f5042567efe42a9d0eaaabab28bc6f11232fc8ceaaf4518d9f3b2bebf020294496b7f6b879e69503f75fecd3d +d = 15347caaad1067f1848a676bd0a8c52021ae604b79d02775a0459226e0391a3acd26653c916fcfe86149fb0ee0904476 +Qx = e5a0463163964d984f5bad0072d45bc2059939e60a826ccca36c151460ae360f5d6679f60fe43e999b6da5841c96e48a +Qy = 30f2dd425a3fa2c95d34124217250b39e3b4a14f3e6e415ae8e5b0409eb72f43f78b64d0ce6f2d49980d6f04cd1391db +k = 1a2d224db4bb9c241ca5cab18920fad615fa25c1db0de0f024cb3ace0d11ef72b056885446659f67650fdff692517b1c +R = 87b4de0fb21df38dfc9a4b1e350da67547e307f55b5b9dd6615e408afe7c3553a6e02722847367439e636074faa2182b +S = 375d965753b9ed6c6c08576726f8308c2f8dbd2737824464e71265d47907e26f615bbeb8203ec617520d4ecd1851dc44 + +Msg = cf2982e3bf174ce547741b969403cd11e9553067e6af8177d89511a0eb040db924530bdba65d8b1ff714228db0737c1756f509e1506014a10736e65be2f91980a73891496e90ff2714a3601c7565cdcef5a395e2e0e1652f138d90d61eaa9cba993b823245647f6e07cec9b8b4449cd68a29741cd1579c66e548ca0d0acf33aa +d = ac1cb5e59bda2eff3413a3bab80308f9fb32c595283c795de4c17fdae8d4647b5f108fd0801aee22adb7db129283b5aa +Qx = bc6b1a718284803553c173089c397870aaaecca579bb8e81a8cfa12473cd2057567fa8726a19ed427cc035baeec2c551 +Qy = 14f82997d1129b669f0015350e47ad561b1b13441af4fb44656f15ed0c5706984d66655accc52f2e943eef39cb1cdc21 +k = 8053a46e875f446056b06d4318fa3e8977622de7207cbf0996bf35b0e9b19aaa507f642bcf0be9f048f1af09806f6946 +R = a994eb15b64114ce8a9342d18b5edda96a6d76314a5ac03da723699177d352a4a9f3b7121b11a91e43a6af4025da51d6 +S = 8183ae33a888e99aa76882da0a6705ad102f2bbd9572fad0d2e4d6d70151970469e00c5220e59c14724d771c1384b302 + +Msg = bf9fdd4107ef5a6070108771ac9eee4f0c8043bf0d04db772a47294f4137e2439d94b337114b074e57e0cb78d0ccf352a2833e9788ee2a1a9ffeacd34f38fcefb86653d70c7dadd4cf6548d608e70acdef6c7530974b92c813798add659752a8c72b05e1ad9c65c21834ce6fbe49d8a1426b5a54270794436d284364fac6ec1a +d = 205f1eb3dfacff2bdd8590e43e613b92512d6a415c5951bda7a6c37db3aae39b9b7ec6edd256609e75373419087fa71f +Qx = c9f1f63a18c761b077a1ec35fbb2de635db9b8592c36194a01769b57728c7755d4c79b3d5b97a1a4631e30c86d03f13c +Qy = f8c4a38770054d5cc9bb9182e6d4638242c4fd16e869ac22e44c4b9402d594e0c6f5df6a9a7de32a4893d9f6588f1950 +k = ecd395c5d8b7d6e6b2b19644e0d2e6086c912c6a0f5b8ed4b94b7290b65852c9741ce8eeb08d8751ead8a183e17d76c6 +R = e81331d78b438b0b8d98c1be03385ba5d614af182f1677f259126cc3de7eaac6c19b02be955d936b6bf9c27c6796e6f0 +S = 17c2b7a8e0fc93909762aa9f86f9561e759ecb88f02337b2018363be6095d9e4324a6d3296046686624b5efad6b52878 + +Msg = 5d634fb39a2239256107dc68db19751540b4badac9ecf2fce644724401d6d632b3ae3b2e6d05746b77ddc0c899878032248c263eda08d3d004d35952ad7a9cfe19343d14b37f9f632245e7b7b5fae3cb31c5231f82b9f1884f2de7578fbf156c430257031ba97bc6579843bc7f59fcb9a6449a4cd942dffa6adb929cf219f0ad +d = e21e3a739e7ded418df5d3e7bc2c4ae8da76266a1fc4c89e5b09923db80a72217f1e96158031be42914cf3ee725748c1 +Qx = 0f753171922b5334f3dd2778a64ce2da8295121939beae71ad85e5344e893be0fd03cf14e1f031adec098e0c4409449c +Qy = 45c10a0ffc0eb2f1cec5c89b698061108313ee7d449ad580efad344f0e7cf35be8a18fca620f112e57bdc746abdace55 +k = d06bea06b25e6c30e866b1eb0657b45673e37b709013fb28fd7373afc8277cbc861354f821d0bd1927e52ec083a0f41f +R = e8d4a31dd0e7d2522be62a32608e744c3775ceb606dc897899f0c73f1a40ce9a8be854cd506e65cd81fd7fa2c616cb7b +S = 8151b681b6b6046d3c36f332d06d9ba7751e740631cdb759f88c50a25a8e950d5023df8a15c77243743733c4feaf21d5 + +Msg = c9b4ff721b3e886f0dc05856ffff0aabb64a8504b1746a47fdd73e6b7ebc068f06ac7ffa44c757e4de207fc3cbfaf0469d3ac6795d40630bcafe8c658627e4bc6b86fd6a2135afbc18ccc8e6d0e1e86016930ca92edc5aa3fbe2c57de136d0ea5f41642b6a5d0ddeb380f2454d76a16639d663687f2a2e29fb9304243900d26d +d = 93434d3c03ec1da8510b74902c3b3e0cb9e8d7dccad37594d28b93e065b468d9af4892a03763a63eae060c769119c23c +Qx = a52c25f2af70e5bc6a992ecef4ea54e831ed5b9453747d28aec5cffb2fcfee05be80c5cbab21606b5507aa23878adee1 +Qy = 2cf2a9afeff83f3041dc8a05f016ccae58aa1a0e0dc6be9d928e97f2598c9ba5e9718d5eb74c9cfb516fd8c09f55f5b9 +k = 13d047708ae5228d6e3bbada0e385afdb3b735b31123454fdf40afe3c36efed563fd2cce84dcc45c553b0993d9ca9ec3 +R = a0203f6f2c456baac03538ed506a182e57a25151802cf4b2557613b2fb615ebd4c50ddc505f87c048a45bad3b2fc371c +S = 0eab56457c4080400fa3af124761d5a01fef35f9649edba8b97d22116386f3b8b363e97ef3f82616d5d825df1cf865ef + +Msg = db2ad659cf21bc9c1f7e6469c5f262b73261d49f7b1755fc137636e8ce0202f929dca4466c422284c10be8f351f36333ebc04b1888cba217c0fec872b2dfc3aa0d544e5e06a9518a8cfe3df5b20fbcb14a9bf218e3bf6a8e024530a17bab50906be34d9f9bba69af0b11d8ed426b9ec75c3bd1f2e5b8756e4a72ff846bc9e498 +d = e36339ddbe8787062a9bc4e1540690915dd2a2f11b3fe9ee946e281a0a2cbed426df405ed9cb0eca42f85443efd09e0c +Qx = a1ffb4b790d1593e907369b69de10b93cddbb02c6131f787422364d9d692768ef8097970306cce16c97f2b10c538efa7 +Qy = d0692028601ea794d2563ffe9facc7273938fab47dd00b8960be15549a9c2b3f8552583eb4c6cd212fe486c159c79153 +k = 2226f7329378cecd697f36ae151546643d67760856854661e31d424fae662da910e2157da9bb6dfbe3622296e0b5710c +R = 20dcc25b67dd997621f437f65d78347fb57f8295b1b14453b1128203cda892bcfe726a2f107d30975d63172e56f11d76 +S = 51cff592cbef75ef8321c8fa1e4229c4298b8180e427bee4e91d1e24fc28a729cf296beb728960d2a58cf26773d8e2e2 + +Msg = dbd8ddc02771a5ff7359d5216536b2e524a2d0b6ff180fa29a41a8847b6f45f1b1d52344d32aea62a23ea3d8584deaaea38ee92d1314fdb4fbbecdad27ac810f02de0452332939f644aa9fe526d313cea81b9c3f6a8dbbeafc899d0cdaeb1dca05160a8a039662c4c845a3dbb07be2bc8c9150e344103e404411668c48aa7792 +d = 5da87be7af63fdaf40662bd2ba87597f54d7d52fae4b298308956cddbe5664f1e3c48cc6fd3c99291b0ce7a62a99a855 +Qx = 54c79da7f8faeeee6f3a1fdc664e405d5c0fb3b904715f3a9d89d6fda7eabe6cee86ef82c19fca0d1a29e09c1acfcf18 +Qy = 926c17d68778eb066c2078cdb688b17399e54bde5a79ef1852352a58967dff02c17a792d39f95c76d146fdc086fe26b0 +k = 1b686b45a31b31f6de9ed5362e18a3f8c8feded3d3b251b134835843b7ae8ede57c61dc61a30993123ac7699de4b6eac +R = 9dbfa147375767dde81b014f1e3bf579c44dd22486998a9b6f9e0920e53faa11eed29a4e2356e393afd1f5c1b060a958 +S = e4d318391f7cbfe70da78908d42db85225c85f4f2ff413ecad50aad5833abe91bdd5f6d64b0cd281398eab19452087dd + + +[P-521,SHA-224] + +Msg = 58ec2b2ceb80207ff51b17688bd5850f9388ce0b4a4f7316f5af6f52cfc4dde4192b6dbd97b56f93d1e4073517ac6c6140429b5484e266d07127e28b8e613ddf65888cbd5242b2f0eee4d5754eb11f25dfa5c3f87c790de371856c882731a157083a00d8eae29a57884dbbfcd98922c12cf5d73066daabe3bf3f42cfbdb9d853 +d = 1d7bb864c5b5ecae019296cf9b5c63a166f5f1113942819b1933d889a96d12245777a99428f93de4fc9a18d709bf91889d7f8dddd522b4c364aeae13c983e9fae46 +Qx = 1a7596d38aac7868327ddc1ef5e8178cf052b7ebc512828e8a45955d85bef49494d15278198bbcc5454358c12a2af9a3874e7002e1a2f02fcb36ff3e3b4bc0c69e7 +Qy = 184902e515982bb225b8c84f245e61b327c08e94d41c07d0b4101a963e02fe52f6a9f33e8b1de2394e0cb74c40790b4e489b5500e6804cabed0fe8c192443d4027b +k = 141f679033b27ec29219afd8aa123d5e535c227badbe2c86ff6eafa5116e9778000f538579a80ca4739b1675b8ff8b6245347852aa524fe9aad781f9b672e0bb3ff +R = 06b973a638bde22d8c1c0d804d94e40538526093705f92c0c4dac2c72e7db013a9c89ffc5b12a396886305ddf0cbaa7f10cdd4cd8866334c8abfc800e5cca365391 +S = 0b0a01eca07a3964dd27d9ba6f3750615ea36434979dc73e153cd8ed1dbcde2885ead5757ebcabba117a64fcff9b5085d848f107f0c9ecc83dfa2fa09ada3503028 + +Msg = 2449a53e0581f1b56d1e463b1c1686d33b3491efe1f3cc0443ba05d65694597cc7a2595bda9cae939166eb03cec624a788c9bbab69a39fb6554649131a56b26295683d8ac1aea969040413df405325425146c1e3a138d2f4f772ae2ed917cc36465acd66150058622440d7e77b3ad621e1c43a3f277da88d850d608079d9b911 +d = 17e49b8ea8f9d1b7c0378e378a7a42e68e12cf78779ed41dcd29a090ae7e0f883b0d0f2cbc8f0473c0ad6732bea40d371a7f363bc6537d075bd1a4c23e558b0bc73 +Qx = 0156cd2c485012ea5d5aadad724fb87558637de37b34485c4cf7c8cbc3e4f106cb1efd3e64f0adf99ddb51e3ac991bdd90785172386cdaf2c582cc46d6c99b0fed1 +Qy = 1edeeda717554252b9f1e13553d4af028ec9e158dbe12332684fc1676dc731f39138a5d301376505a9ab04d562cc1659b0be9cb2b5e03bad8b412f2699c245b0ba2 +k = 1dc3e60a788caa5f62cb079f332d7e5c918974643dca3ab3566a599642cd84964fbef43ce94290041fe3d2c8c26104d9c73a57a7d4724613242531083b49e255f33 +R = 12592c0be6cce18efb2b972cd193d036dcb850f2390fa8b9b86b2f876548bc424fb3bc13c1e5c415fa09d0ecfcae5bf76fb23e8322d7eecb264a2ae6d20ef50d405 +S = 11bc9713be88e3b9912a3e5f5d7b56f20573e979b1a75d04ce339f724bddffa4665d25995fe24d32507d8a07c5e10169f5338ef2827737f7b0291752b21237217e3 + +Msg = 7ba05797b5b67e1adfafb7fae20c0c0abe1543c94cee92d5021e1abc57720a6107999c70eacf3d4a79702cd4e6885fa1b7155398ac729d1ed6b45e51fe114c46caf444b20b406ad9cde6b9b2687aa645b46b51ab790b67047219e7290df1a797f35949aaf912a0a8556bb21018e7f70427c0fc018e461755378b981d0d9df3a9 +d = 135ea346852f837d10c1b2dfb8012ae8215801a7e85d4446dadd993c68d1e9206e1d8651b7ed763b95f707a52410eeef4f21ae9429828289eaea1fd9caadf826ace +Qx = 18d40cc4573892b3e467d314c39c95615ee0510e3e4dbc9fa28f6cd1f73e7acde15ad7c8c5339df9a7774f8155130e7d1f8de9139ddd6dfe1841c1e64c38ea98243 +Qy = 17021782d33dc513716c83afe7ba5e7abef9cb25b31f483661115b8d6b5ae469aaf6f3d54baa3b658a9af9b6249fd4d5ea7a07cb8b600f1df72b81dac614cfc384a +k = 0c24acc1edb3777212e5b0bac744eadf4eda11fa150753b355bf96b189e6f57fc02284bb22d8b3cd8bba7a09aae9f4ea955b382063425a6f8da2f99b9647b147172 +R = 183da7b8a9f9d5f08903359c1a2435b085fcf26a2ed09ab71357bb7634054acc569535e6fe81d28233e4703005fc4bf83ce794d9463d575795aa0f03398e854cefd +S = 0b3621145b9866ab7809139795cc30cd0404127a7f0fafa793660491009f6c53724fdb0b1ffbf0fd51c131180b8a957fe66e76d2970247c024261c768dee9abbfb9 + +Msg = 716dabdb22a1c854ec60420249905a1d7ca68dd573efaff7542e76f0eae54a1828db69a39a1206cd05e10e681f24881b131e042ed9e19f5995c253840e937b809dfb8027fed71d541860f318691c13a2eb514daa5889410f256305f3b5b47cc16f7a7dad6359589b5f4568de4c4aae2357a8ea5e0ebaa5b89063eb3aa44eb952 +d = 1393cb1ee9bfd7f7b9c057ecc66b43e807e12515f66ed7e9c9210ba1514693965988e567fbad7c3f17231aacee0e9b9a4b1940504b1cd4fd5edfaa62ba4e3e476fc +Qx = 1e855c935139c8092092cfa733db1292530506eeb2bbb1687f9602c36d97a6714e998892d5d3b842d1896a6ece9d549e9792881a256256137b3dff180c96cc5d07b +Qy = 18d83b6e93cd287311f7bf7c1d7f9eeabcf0b69c12f2d8f40e333e81e956d968532a37a4c04d761874df293b484cd7053b03fdbc2fdcd3b4c412d6f272fb7c93fe6 +k = 1d98619bdc04735d30c222fc67da82c069aea5f449af5e8c4db10c1786c0cb9e6f2cc0bb66fa6be18c485570d648dafcd0a973c43d5c94e9a9dacbd3170e53fa2a0 +R = 0bf47fabe107ce0ec03e2ad60a79b058e1bebb18568b6a8cdbe86032e71aa30c15766105b2ea952cfa79bcab046df601159f96e179bbcf252dc68ac73d31481fdae +S = 1f918fec69cd07d90f9d892b7117e7519c3224947f4262f1fd97077dd5386a6c78aeddff3ee97e59ea353f06029f1336f0d6ef5c0f4b17ca59343a55319b7bfc3db + +Msg = 9cc9c2f131fe3ac7ea91ae6d832c7788cbbf34f68e839269c336ceef7bef6f20c0a62ea8cc340a333a3002145d07eba4cf4026a0c4b26b0217a0046701de92d573d7c87a386a1ea68dc80525b7dcc9be41b451ad9f3d16819e2a0a0b5a0c56736da3709e64761f97cae2399de2a4022dc4c3d73c7a1735c36dbde86c4bc5b6f7 +d = 179fa164e051c5851e8a37d82c181e809a05fea9a3f083299b22684f59aa27e40dc5a33b3f7949338764d46bfe1f355134750518b856d98d9167ef07aac3092c549 +Qx = 1857cc7bbed20e87b3fd9a104956aa20c6502192910e0e7598410526ebfe1c99397b85189612a60c51fb8f4dd5cb08a8cd2e702563062dcb043410715c5323a0046 +Qy = 1fce8d135284310d2f38c216030634b32cd223222f0d9d8d2b7c55477c4b8b74fc6c96a6092f34b05ca44d3633a5037c2166c479a032bb4f949f89fc1ba5236d07d +k = 16d9704c0cee791f2938bb2a8a595752a3635c2f557efeecefd719414b5f2aaf846080f582c76eae7a8fddf81859b49d0131c212524d55defa67dca1a9a28ca400f +R = 1c9a4e51774384e8362876a87c572e6463a54413c7c6252c552ebb182f83e45ace436ade4ca373d8a7216e83efb62c8b41c4d5132a0afa65078f16d189baca39187 +S = 1e92a7dd5fea29a666398e1df5775cbb5664fe6943fe4c1d2bba516b7543c84df584458e53919c4ffab579a26fb3c892a5d1a77b0a07428c89350f8b559e627b014 + +Msg = 14c69f8d660f7a6b37b13a6d9788eff16311b67598ab8368039ea1d9146e54f55a83b3d13d7ac9652135933c68fafd993a582253be0deea282d86046c2fb6fd3a7b2c80874ced28d8bed791bd4134c796bb7baf195bdd0dc6fa03fdb7f98755ca063fb1349e56fd0375cf94774df4203b34495404ebb86f1c7875b85174c574c +d = 13dabca37130ba278eae2b3d106b5407711b0d3b437fbf1c952f0773571570764d2c7cb8896a8815f3f1975b21adc6697898e5c0a4242092fc1b80db819a4702df4 +Qx = 0bc2aebf40cd435bc37d73c09d05f2fd71321111a767c2b0d446f90dd4a186839c694ceb734e027e7ee948f0f63e4d3f1656d3d543df23c342a599306909b347109 +Qy = 1f4c98ac03f0718e58d5d1762c920445b11dbdd60ec7f60095809204e14965a4ecb0be6fea06adbac8ba431d6f144c75c199225df2a619a34be99897125b3a10af8 +k = 0401187c8b89945a1e48cda9ee52167789f4121e67482a7ac797899f5d3d2e623aed31e4adae08a8d43e69028fa074d2650317cbc765f6ed191cf0317b4bae57881 +R = 1e572afed754016fba43fc33e352932c4db65efcb84e2bd159b40fc5925893b161effc40240be28d8c07154d2615f605c6f0451b976522d95afd37f46602df7a12a +S = 030370c1c5352c2b663ac1858b42f69545b2f58ed5b2c007f303726977d3c756b5d644ec6788f94c886f78269aa190a3d8d1ae10e4fd24d937c4556fb9e1953fd6d + +Msg = 8d8e75df200c177dbfe61be61567b82177ea5ec58e2781168d2277d2fd42668f01248ca3eb29ffa2689b12ae40f9c429532b6d2e1f15891322b825a0a072a1c68fa09e78cfdef3e95ed6fdf7233a43cb68236560d49a3278f0b3f47cb08f475bd9ab2f60755ea4a1767de9313b71a1b9ea87ef33f34682efbda263b0f8cc2f52 +d = 198681adbde7840d7ccd9cf1fb82056433fb4dd26bddf909af7b3b99da1ca2c05c8d4560ecd80ba68f376f8b487897e374e99a9288ed7e3645cc0d00a478aae8d16 +Qx = 057ce3777af7032f1f82308682e71fe09f88bf29dacd5018a725e1caa4b1e2bfdd894fe618f9266f31ba089856dc9c1b70e4a2faa08b4b744d1aafcd5ae99e2c736 +Qy = 199bcfef2021bc5890d7d39ec5dc0c26956801e84cae742cf6c50386eb289b6e97754dd25a94abf81f1cb1b36935b5eb29f4b32a6516d2ff6a7d23064a0daec94b3 +k = 19d2d74ad8ee2d85048f386998a71899ef6c960b4ab324e5fd1c0a076c5a632fd0009500076522e052c5c9806eef7056da48df6b16eb71cdf0f1838b0e21715fce0 +R = 18ecacbcffd5414bbb96728e5f2d4c90178e27733d13617e134ec788022db124374bbaa11e2c77fe3f38d1af6e998e1b0266b77380984c423e80ffa6ff2bcafd57a +S = 1c727f34b6a378f3087721a54e9796499b597ecf6666b8f18312d67e1190a8a66e878efc2367b551267494e0245979ef4deed6d2cbf2c3711af6d82ccfeb101a377 + +Msg = 10631c3d438870f311c905e569a58e56d20a2a560e857f0f9bac2bb7233ec40c79de145294da0937e6b5e5c34fff4e6270823e5c8553c07d4adf25f614845b2eac731c5773ebbd716ab45698d156d043859945de57473389954d223522fbafecf560b07ef9ba861bcc1df9a7a89cdd6debf4cd9bf2cf28c193393569ccbd0398 +d = 08c4c0fd9696d86e99a6c1c32349a89a0b0c8384f2829d1281730d4e9af1df1ad5a0bcfccc6a03a703b210defd5d49a6fb82536f88b885776f0f7861c6fc010ef37 +Qx = 164ac88ed9afe137f648dd89cdd9956682830cac5f7c1a06d19a1b19f82bb1d22dfeefea30d35c11202fed93fd5ce64835d27c6564d6e181287fa04a2d20994986b +Qy = 05cb83669265f5380ccefe6b4f85fdf0049e6703f6f378a0b2e52ed0fbbcf300afebb722f4ed48e3819cb976c1d60e2ba05646b478f6dfecfbae730e9644c297f00 +k = 189801432cba9bf8c0763d43b6ec3b8636e62324587a4e27905b09a58e4aa66d07d096dbce87824e837be1c243dd741f983c535a5dd2f077aac8beee9918258d3cb +R = 0917723f7241e8dc7cd746b699ab621d068dd3a90e906aaf0a4862744b96fd4e5ccdb9c7796c27f7196e693d06ec209464c3ea60ad6313e9b77cceaa14767e6651c +S = 0957b0ecdc3668f6efa5d0957615bcfffd6419c5e57579b74f960f65ae3fb9e8284322ff710b066f7e0959ac926d3cf9a594bdb70bbec756c96910b26a2486dee9e + +Msg = 80aad6d696cbe654faa0d0a24d2f50d46e4f00a1b488ea1a98ed06c44d1d0c568beb4ab3674fc2b1d2d3da1053f28940e89ba1244899e8515cabdd66e99a77df31e90d93e37a8a240e803a998209988fc829e239150da058a300489e33bf3dcdaf7d06069e74569fee77f4e3875d0a713ccd2b7e9d7be62b34b6e375e84209ef +d = 1466d14f8fbe25544b209c5e6a000b771ef107867e28ed489a42015119d1aa64bff51d6b7a0ac88673bbc3618c917561cff4a41cdb7c2833dab5ebb9d0ddf2ca256 +Qx = 1dc8b71d55700573a26af6698b92b66180cf43e153edadb720780321dbb4e71d28e0a488e4201d207fc4848fe9dd10dcabec44492656a3ff7a665fe932445c82d0b +Qy = 1920b16331b7abeb3db883a31288ef66f80b7728b008b3cc33e03a68f68d9e653a86e3177bbc00014fa5ea4c1608c0d455c2e2ac7bd8ab8519ebf19955edf1baf8d +k = 160d04420e0d31b0df476f83393b1f9aff68389cc3299e42ef348d97646f7531a722b66ddfb9501bbb5c4a41d84c78be7233b11489bceb817d23060e6017433fab8 +R = 08077aabd0a342f03f912007c586cfedfc63f93d1118f720d5b62b3ce141a60f86f111dfd8fc2e31a6778981f1a5e28f29a7369bd7897bb41240c8d3a9c170e0ee0 +S = 00abc75fc154b93840579457820957e89d1260fee0a4b9bb1946f61ca1e71afd76bb5e1077b3e38ceb39d1fac5ef8b217c4110617b3ad118e02b3fcc2a39ef38613 + +Msg = 8a7792a2870d2dd341cd9c4a2a9ec2da753dcb0f692b70b64cef2e22071389c70b3b188dea5f409fb435cbd09082f59de6bc2ff9e65f91b7acc51e6e7f8e513148cb3c7c4664f227d5c704626b0fda447aa87b9d47cd99789b88628eb642ed250312de5ba6b25f3d5342a3cbb7ebd69b0044ee2b4c9ba5e3f5195afb6bea823d +d = 01a99fcf54c9b85010f20dc4e48199266c70767e18b2c618044542cd0e23733817776a1a45dbd74a8e8244a313d96c779f723013cd88886cb7a08ef7ee8fdd862e7 +Qx = 1912d33b01d51e2f777bdbd1ada23f2b1a9faf2be2f2a3b152547db9b149b697dd71824ca96547462e347bc4ef9530e7466318c25338c7e04323b1ba5fd25ea7162 +Qy = 0bbe9b1e3a84accd69b76b253f556c63e3f374e3de0d1f5e3600fc19215533b2e40d6b32c3af33314d223ea2366a51d1a337af858f69326389276f91be5c466e649 +k = 14fafd60cb026f50c23481867772411bb426ec6b97054e025b35db74fe8ea8f74faa2d36e7d40b4652d1f61794878510b49b7b4fe4349afccd24fc45fec2fd9e9e7 +R = 18b1df1b6d7030a23a154cacce4a2e3761cc6251ff8bf6c9f6c89d0a15123baef9b338ada59728349ce685c03109fcde512ed01a40afd2ca34e1bc02ecf2871d45c +S = 0a399f9b9e21aeddf450429fec2dc5749e4a4c7e4f94cee736004dcc089c47635da22845992cd076a4f0a01d2cc1b0af6e17b81a802361699b862157ad6cad8bd1d + +Msg = f971bcd396efb8392207b5ca72ac62649b47732fba8feaa8e84f7fb36b3edb5d7b5333fbfa39a4f882cb42fe57cd1ace43d06aaad33d0603741a18bc261caa14f29ead389f7c20536d406e9d39c34079812ba26b39baedf5feb1ef1f79990496dd019c87e38c38c486ec1c251da2a8a9a57854b80fcd513285e8dee8c43a9890 +d = 1b6015d898611fbaf0b66a344fa18d1d488564352bf1c2da40f52cd997952f8ccb436b693851f9ccb69c519d8a033cf27035c27233324f10e9969a3b384e1c1dc73 +Qx = 110c6177ceb44b0aec814063f297c0c890671220413dbd900e4f037a67d87583eaf4b6a9a1d2092472c17641362313c6a96f19829bb982e76e3a993932b848c7a97 +Qy = 0f6e566c4e49b2ee70a900dc53295640f3a4a66732df80b29f497f4ae2fa61d0949f7f4b12556967bb92201a4f5d1384d741120c95b617b99c47a61e11c93a482d6 +k = 1a88667b9bdfe72fb87a6999a59b8b139e18ef9273261549bc394d884db5aa64a0bc7c7d38a8ef17333478d2119d826e2540560d65f52b9a6dc91be1340cfd8f8f8 +R = 015f73def52ea47ddb03e0a5d154999642202e06e6734ac930c1dc84756c67bbb1cca9f21f92d61bfdb2052c5dd2833349610f68139393d77250a7662ef7bd17cbe +S = 155c744a729f83b27d1f325a91e63a0d564fe96ff91eaa1bad3bff17d2abffa065d14a1d20a04dd993f6ed3260b60bcc6401e31f6bc75aaafe03e8c1a9cd14d2708 + +Msg = ec0d468447222506b4ead04ea1a17e2aa96eeb3e5f066367975dbaea426104f2111c45e206752896e5fa7594d74ed184493598783cb8079e0e915b638d5c317fa978d9011b44a76b28d752462adf305bde321431f7f34b017c9a35bae8786755a62e746480fa3524d398a6ff5fdc6cec54c07221cce61e46fd0a1af932fa8a33 +d = 05e0d47bf37f83bcc9cd834245c42420b68751ac552f8a4aae8c24b6064ae3d33508ecd2c17ec391558ec79c8440117ad80e5e22770dac7f2017b755255000c853c +Qx = 1a6effc96a7f23a44bf9988f64e5cfafdae23fa14e4bee530af35d7a4ddf6b80dcd0d937be9dd2db3adcda2f5216fecbce867ee67e7e3773082f255156e31358c2f +Qy = 1e7760190dfbe07ec2df87067597087de262c1e0a12355456faba91b2e7277050d73b924e14c0e93b8457a8b3e1f4207ce6e754274f88ad75c000d1b2977edc9c1a +k = 18afea9a6a408db1e7a7bb1437a3d276f231eacfc57678bfa229d78681cbe4e800e6065332a3128db65d3aa446bb35b517dca26b02e106e1311881a95b0302d15e8 +R = 01c49b3c1d21f1678bdbe1ac12167e95e06617190bdee1a729c1c649210da19e2e210f6689e1310513bfe2ac6c0f4ee5f324f344b31b18df341eaadb826d07adc9b +S = 129d4931ba457443012f6ffecd002f2abc3a4b65a58fee8457917ebcf24b29a1d3055b7fc62939a74ebb0c3582172ee7c3c75e0b2fa2367c6e04df63a7a91d593ad + +Msg = d891da97d2b612fa6483ee7870e0f10fc12a89f9e33d636f587f72e0049f5888782ccde3ea737e2abca41492bac291e20de5b84157a43c5ea900aef761006a4471072ab6ae6d515ffe227695d3ff2341355b8398f72a723ae947f9618237c4b6642a36974860b452c0c6202688bc0814710cbbff4b8e0d1395e8671ae67ada01 +d = 1804ab8f90ff518b58019a0b30c9ed8e00326d42671b71b067e6f815ac6752fa35016bd33455ab51ad4550424034419db8314a91362c28e29a80fbd193670f56ace +Qx = 0a79529d23a832412825c3c2ad5f121c436af0f29990347ecfa586ce2e57fd3c7e0624d8db1f099c53473dbc2578f85416ad2ac958a162051014fb96bf07f9e1d17 +Qy = 17c0750f26df0c621d2d243c6c99f195f0086947b1bf0f43731555f5d677e2d4a082fb5fe8da87e1592a5fa31777da3299cede5a6f756edf81c85b77853388bb3ab +k = 042d7c36fec0415bc875deb0fab0c64548554062e618aee3aa6670ffd68ab579fe620d3a9316357267fd3111c0ed567dca663acd94b646d2ba0771953cd9690ef42 +R = 0d01dfbef126febbdfa03ef43603fd73bc7d2296dce052216e965fed7bb8cbbc24142bfcddb60c2e0bef185833a225daa0c91a2d9665176d4ad9986da785f4bfcf0 +S = 16627e2614dbcd371693c10bbf579c90c31a46c8d88adf59912c0c529047b053a7c7715142f64dcf5945dbc69ff5b706c4b0f5448d04dd1f0b5a4c3765148bf253d + +Msg = 924e4afc979d1fd1ec8ab17e02b69964a1f025882611d9ba57c772175926944e42c68422d15f9326285538a348f9301e593e02c35a9817b160c05e21003d202473db69df695191be22db05615561951867f8425f88c29ba8997a41a2f96b5cee791307369671543373ea91d5ed9d6a34794d33305db8975b061864e6b0fe775f +d = 0159bff3a4e42b133e20148950452d99681de6649a56b904ee3358d6dd01fb6c76ea05345cb9ea216e5f5db9ecec201880bdff0ed02ac28a6891c164036c538b8a8 +Qx = 12d7f260e570cf548743d0557077139d65245c7b854ca58c85920ac2b290f2abfeccd3bb4217ee4a29b92513ddce3b5cbf7488fb65180bb74aeb7575f8682337ef5 +Qy = 17560186230c7e8bff0bffce1272afcd37534f317b453b40716436a44e4731a3ec90a8f17c53357bc54e6ff22fc5b4ca892321aa7891252d140ece88e25258b63d5 +k = 14b8a30f988cefdc0edec59537264edb0b697d8c4f9e8507cf72bc01c761304bd2019da1d67e577b84c1c43dd034b7569f16635a771542b0399737025b8d817e1c3 +R = 0fc50939ebca4f4daa83e7eaf6907cb08f330c01d6ea497b86becda43dfcad47cb5c48f5eb2cc924228628070bcd144088c449a7873242ba86badf796097dbecd6d +S = 0ccb6463c4301ba5c043e47ed508d57dd908fd0d533af89fd3b11e76343a1cf2954ce90b0eb18cbc36acd6d76b3906612d8a0feec6ebed13d88650ed9c708b28a11 + +Msg = c64319c8aa1c1ae676630045ae488aedebca19d753704182c4bf3b306b75db98e9be438234233c2f14e3b97c2f55236950629885ac1e0bd015db0f912913ffb6f1361c4cc25c3cd434583b0f7a5a9e1a549aa523614268037973b65eb59c0c16a19a49bfaa13d507b29d5c7a146cd8da2917665100ac9de2d75fa48cb708ac79 +d = 17418dfc0fc3d38f02aa06b7df6afa9e0d08540fc40da2b459c727cff052eb0827bdb3d53f61eb3033eb083c224086e48e3eea7e85e31428ffe517328e253f166ad +Qx = 00188366b9419a900ab0ed9633426d51e25e8dc03f4f0e7549904243981ec469c8d6d938f6714ee620e63bb0ec536376a73d24d40e58ad9eb44d1e6063f2eb4c51d +Qy = 09889b9203d52b9243fd515294a674afd6b81df4637ffdddc43a7414741eda78d8aa862c9cbbb618acec55bb9a29aac59616fc804a52a97a9fc4d03254f4469effe +k = 1211c8824dcbfa0e1e15a04779c9068aed2431daeac298260795e6a80401f11f6d52d36bcee3cfa36627989c49d11475163aa201d2cd4c5394144a6bb500bbaf02b +R = 1d59401b8ac438855d545a699991142685077a409de2418c7ccfe01a4771b3870e76287a9654c209b58a12b0f51e8dc568e33140a6b630324f7ef17caa64bf4c139 +S = 143af360b7971095b3b50679a13cd49217189eaee4713f4201720175216573c68f7ac6f688bfe6eb940a2d971809bf36c0a77decc553b025ed41935a3898685183b + +[P-521,SHA-256] + +Msg = 8ab8176b16278db54f84328ae0b75ef8f0cd18afdf40c04ad0927ed0f6d9e47470396c8e87cde7a9be2ffbfe6c9658c88b7de4d582111119c433b2e4a504493f0a1166e3a3ea0d7b93358f4a297d63f65a5e752f94e2ee7f49ebcc742fa3eb03a617d00c574245b77a20033854d82964b2949e2247637239ab00baf4d170d97c +d = 1e8c05996b85e6f3f875712a09c1b40672b5e7a78d5852de01585c5fb990bf3812c3245534a714389ae9014d677a449efd658254e610da8e6cad33414b9d33e0d7a +Qx = 07d042ca19408524e68b981f1419351e3b84736c77fe58fee7d11317df2e850d960c7dd10d10ba714c8a609d163502b79d682e8bbecd4f52591d2748533e45a867a +Qy = 197ac6416111ccf987d290459ebc8ad9ec56e49059c992155539a36a626631f4a2d89164b985154f2dddc0281ee5b5178271f3a76a0914c3fcd1f97be8e8376efb3 +k = 0dc8daaacddb8fd2ff5c34a5ce183a42261ad3c64dbfc095e58924364dc47ea1c05e2599aae917c2c95f47d6bb37da008af9f55730ddbe4d8ded24f9e8daa46db6a +R = 09dd1f2a716843eedec7a6645ac834d4336e7b18e35701f06cae9d6b290d41491424735f3b57e829ad5de055eaeef1778f051c1ee152bf2131a081e53df2a567a8a +S = 02148e8428d70a72bc9fa986c38c2c97deda0420f222f9dc99d32c0acba699dc7ba0a2b79ce5999ff61bd0b233c744a893bc105bca5c235423e531612da65d72e62 + +Msg = c4bc2cec829036469e55acdd277745034e4e3cc4fcd2f50ec8bd89055c19795a1e051ccf9aa178e12f9beab6a016a7257e391faa536eaa5c969396d4e1ade36795a82ebc709d9422de8497e5b68e7292538d4ccdc6dd66d27a3ece6a2844962b77db073df9489c9710585ba03d53fa430dbc6626dc03b61d53fc180b9af5dea6 +d = 0b65bf33b2f27d52cbfabcadce741e691bf4762089afd37964de1a0deda98331bf8c74020a14b52d44d26e2f6fa7bcddbe83be7db17a0c8a1b376469cf92c6da27c +Qx = 10038bb9a7aea626de68c14c64243150e72c69e2f8a1ab922bfbdaa6f33d24fb4542c0324357b0dd640bbcd07632ecd253f64ca2bfbfbf3de9b24fffd0568ab82da +Qy = 0faf867d95308cc36d6f46844a0f535dc70f9768eed011a2464d2f308fa1d8e72c3616aec7e70516908183ffce7fdd36984a15f73efaa3858c2edf16a784d40e6c2 +k = 14aeb96c57d99677a1f5e4588064215e7e9af4027bfb8f31ff6126dbf341b8e6f719465e4273e91ba32670feca802549808322b7ee108bb20653cf20f93284d365f +R = 075ead62edf7d86c5d1bc2443d1aeb5dc034fd999e6ea012cef7499d9d050cd97d262095884e9fc89a42e15bd3dee80fe3c1ba10f4caabc4aabb86347023028b663 +S = 129a992a6ff66d41948d11fa680f732b1a74315b804c982805190ed9d2fae223f2b149980b9241998cdea0c5672595a8a49d5186a0ef7a46c0a376f925bdda81726 + +Msg = 1c1b641d0511a0625a4b33e7639d7a057e27f3a7f818e67f593286c8a4c827bb1f3e4f399027e57f18a45403a310c785b50e5a03517c72b45ef8c242a57b162debf2e80c1cf6c7b90237aede5f4ab1fcaf8187be3beb524c223cc0ceff24429eb181a5eea364a748c713214880d976c2cd497fd65ab3854ad0d6c2c1913d3a06 +d = 02c4e660609e99becd61c14d043e8b419a663010cc1d8f9469897d7d0a4f076a619a7214a2a9d07957b028f7d8539ba7430d0b9a7de08beeeae8452d7bb0eac669d +Qx = 0fb3868238ca840dbb36ecc6cf04f5f773ea0ab8e8b0fdcf779dc4039a8d7146a417504e953c0cb5e7f4e599cc2c168deda8b7f16084b5582f89f2ece4cae5167f7 +Qy = 1f90b5c15eeda48e747cf3ee8183166a49dbfac6161cbd09d29d40a6854f4c495e88a435892a920cdaad20d41985890b648badd4f0a858ffcbd9afdfc23134ede18 +k = 1f875bbf882cd6dd034a87916c7b3ba54b41b2ea2ce84ebaf4e393fcf7291fee09dec2b5bb8b6490997c9e62f077c34f0947fe14cec99b906dd6bf0b5d301e75ca1 +R = 07aa70425697736b298233249f5d0cf25c99e640c9ff88035ef1804820e1bfe7d043755f02d7a079494f7fa6dc26740c4e6b7b430c63f29c67bbd3a5c88d2f0e8d1 +S = 0e0d42e4ff11cf5be37a9fda348514d5097a662f214687cbfb28ff42d635b13029871ca4f464bb1fbce02d5da4d5fb61b2a071844259fc863d136197bec3a61e7c7 + +Msg = adb5f069b2b501a3ebb83d4f1808eb07710ac4a7b12532996855a20bcc54b2f76812915f632163c3654ff13d187d007152617cf859200194b59c5e81fc6cc9eb1ceb75d654050f260caa79c265254089270ccd02607fdcf3246119738c496dc3a4bd5d3be15789fc3d29a08d6d921febe2f40aef286d5d4330b07198c7f4588e +d = 17c3522007a90357ff0bda7d3a36e66df88ca9721fb80e8f63f50255d47ee819068d018f14c6dd7c6ad176f69a4500e6f63caf5cf780531004f85009c69b9c1230c +Qx = 13a4bea0eed80c66ea973a9d3d4a90b6abbb5dee57d8affaf93390a8783a20982eba644d2e2809f66530adeeee7f9a1da7515447e9ba118999f76f170c375f621f7 +Qy = 12f9dfaee40a75d8442b39b37a5c19ea124b464236e9b9a31bae6780cfd50f7ea4a700154b5ea0feeb64e9b35a1b0e33e46900cca1f34d13bb17e5017769841af27 +k = 18388a49caeda35859ef02702c1fd45ff26991998bd9d5e189c12c36cdae3f642ddd4a79561bd1d3e1cd9359de8f5c9e1604a312d207a27b08a6033f2741794ced5 +R = 15c6264795837dfea19f91876455f564f073c5c84a3c9d76e67872ae0447ba0d4850d8721302b25bec7ebfedd2721de140b2f3dead547042b24b0876117e7093cc1 +S = 060eb74236c189a28ed20bd0822eb22d75f7d97c9043a3c8e3f6d4c90bc8ca02ac4d37c1171c799a1c7dfd2fcbf83406b5e48c051e0fbf0fd937bfe6c3db4e18154 + +Msg = f253484d121d1ce8a88def6a3e9e78c47f4025ead6f73285bf90647102645b0c32d4d86742a50b8b7a42d5f6156a6faf588212b7dc72c3ffd13973bdba732b554d8bffc57d04f8167aef21ee941ee6ffb6cce0f49445bd707da8deb35dca650aaf761c3aa66a5ebccddd15aee21293f63061a7f4bfc3787c2cd62c806a1a9985 +d = 0c4dad55871d3bd65b016d143ddd7a195cc868b3048c8bbcb1435622036bdb5e0dec7178ca0138c610238e0365968f6ddd191bbfacc91948088044d9966f652ff25 +Qx = 014858a3b9bd426b678fdcf93fc53d17e7a9e8fe022442aaaba65399d12fd3a6a381958fb0f07ac6088f4e490506ec0f1ab4d0dbd461126f7eb46ff69cfa8bd88af +Qy = 18c18ce29ecc6d79d26a2de0cd31c4b32e84b5e90f6ba748f86c5afbd89618aceb9079460cbd1a8261ed5476973e61bf1d17ea78b022387443800c9247d21dde550 +k = 05577108f4187a173e5c29e927a8fc8f5ffd37e184254a6e381ff1018955aec91a35f30085e8cee6a7555c10f9efdce26d62f2b4b52dfdbaeafc3a30983e2d50d5b +R = 0344375ae7c804cbe32ced7a20976efae5d9c19eb88b6e24514d1d0cfb728b0f4601098b18b2e98f42b5222dd5237d4d87767007bf5acb185c5526d72047e2cb1a1 +S = 02de4cfa908c73c1102d6fb7062baf54a056a9517701e036c9c51e09899d60051612d59348945f845dffebec5aa395b2fac7229929033615788777306ccad96d0a3 + +Msg = 33bab1c369c495db1610965bc0b0546a216e8dd00cd0e602a605d40bc8812bbf1ffa67143f896c436b8f7cf0bed308054f1e1ff77f4d0a13c1e831efbd0e2fcfb3eadab9f755f070ba9aeaceb0a5110f2f8b0c1f7b1aa96a7f2d038a1b72e26400819b1f73d925ea4e34d6acaf59d0a461a34ce5d65c9c937a80e844e323a16d +d = 03d4749fadcc2008f098de70545a669133c548ce0e32eec1276ff531bcff53533144555728ad8906d17f091cc0514571691107350b6561858e90dbe19633aaf31bf +Qx = 10fe5986b65f6e65d13c88c4d2aed781a91026904f82129d46779bdadaf6b733c845a934e941ab4a285efdea9c96ecc9dc784d87e4d937b42c337b3a9cb111a9600 +Qy = 077853768a2a4d6f596f57414e57ec60b76d3cd5ece8351cd1f335ebcb8801a3d91fb82c65caaeb5c31eea9918367bb5906863ff3ccaf7a6cee415e0d75c15ac2e0 +k = 1fbb4de337b09e935a6dc6215ffcfcb85d236cc490585e73251a8b8bac37cfa36c5d1df5f4536d33659be1e7a442529a783452f7efda74a4f661b6a127f9248aaf7 +R = 09d8f10eeff6178594c89d6e8184f9502117384813243ddf9ccf3c8eac5dc6502c472dfc1487a5caffc569f7dedd14a8ebcb310e9bacdb79fb6655aba026cdf87f2 +S = 0f74236c7915d638708d17c9f10e39dda358faf9bbb821d8dcda0d151aac143bfb165ad0a23a65cd3de532e32cad928728f5ae1c16f58fc16577f3ca8e36f9e708b + +Msg = 08c8b7faaac8e1154042d162dca1df0f66e0001b3c5ecf49b6a4334ce4e8a754a1a8e4daf8ec09cf1e521c96547aed5172ef852e82c03cddd851a9f992183ac5199594f288dbcc53a9bb6128561ff3236a7b4b0dce8eaf7d45e64e782955ee1b690ce6a73ece47dc4409b690de6b7928cbe60c42fc6a5ddf1d729faf1cc3885e +d = 096a77b591bba65023ba92f8a51029725b555caf6eff129879d28f6400e760439d6e69ce662f6f1aecf3869f7b6057b530a3c6ff8ed9e86d5944f583ee0b3fbb570 +Qx = 0fdf6aed933dba73913142ef8bdcd4b760db8500831cd11d7707ab852a6372c05d112a1e7fbc7b514c42142c7370d9f4129493cd75cc6f2daf83747078f15229db6 +Qy = 0ef91dffb3c43080a59534b95ca585ee87f6145f6a0199b2b82c89f456d8bd8e6ac71c78039c08177184484eb2ebd372f189db3a58fab961a75a18afec1ee32764a +k = 13aa7b0471317a2a139c2f90df1c40d75e5a8a830fbaf87030fffdb2ef6f2c93d1310c9ed7fe9d7bcd4fe46537ff2495bc9c4f0aaff11461f5e4bebbfbce9a8740a +R = 1c7a21800962c91d4651553633b18612d931bb88bff8b743ed595b4e869437e50f8e84fbf334c99061db123a1c40b73b07e203790561a37df65a660355ba2017d78 +S = 1301e1782559a38f1ca0eebe9bed0f5c7c33103d506a24f8a688f500ee1fe37f97b6685319279e82e6fe43cfd823ccbc123309974cffa76c4f8d41ec02a3cbc45f1 + +Msg = ba74eed74282811631bd2069e862381e4e2a1e4e9a357b1c159a9ce69786f864b60fe90eeb32d8b72b099986fc594965a33285f7185b415df58fead7b8b50fc60d073680881d7435609ad1d22fd21e789b6730e232b0d2e888889fb82d6ad0337ab909308676164d4f47df44b21190eca8ba0f94995e60ad9bb02938461eee61 +d = 015152382bfd4f7932a8668026e705e9e73daa8bade21e80ea62cf91bd2448ebc4487b508ca2bdaaf072e3706ba87252d64761c6885a65dcafa64c5573c224ae9e6 +Qx = 00b8c7c0186a77dc6e9addd2018188a6a40c3e2ba396f30bbd9293dba2841d57d60866b37f587432719b544d8bf7eb06d90a8c0dc9c93b0c53d53b2f667077228ca +Qy = 1dd2e5c73ab908ae34f701689f1cd3cf5186d3a2bc941e208bf3ef970e5e429ee9b154d73286b2e5da423e75b7c7b78c7bdf915da92279db43265a0cdefca51f86a +k = 0d03506999f5cc9ec3304072984a20a9c64a22ad9b418495ca904f4bbddc96e76d34672cb52763339d3f3bc5b1701c00a675b972797e3a086314da1a8d338436566 +R = 085406c0ff5ec91f598bb579ad8714ad718c3e133d5dcc2e67c5d2339c146b69919cac07f3bc2bda218f4c7c8be04855e2ca6fff7fbdc4fc0fda87c8c3081cad4f5 +S = 1b45f2066e583636215ae135afc202b8bf3f301eccff2e1c0198b9aeddf695fa8179488e7b622fc307f601e2f6551815117cc836bb09ef888f8e64a45d9c84ad30c + +Msg = dc71f171a28bdc30968c39f08f999b88dc04c550e261ecf1124d67f05edeae7e87fe9b8135a96fe2bc3996a4f47213d9d191184a76bd6310e1ee5cb67ea7fc3ef6f641a0ba165198040fa668192b75a4754fc02c224bd4a74aade5a8c814adf151c2bfeda65165a04ef359e39847c84e312afb66d4cd1db50d41ef3fe5f31296 +d = 1750ff0ca0c166560b2034bc5760fe0b3915340bc43216e9de0c1d4a76550e8b2036e8b874230f8d29354aed43e183610f24fd4abd4b0be2f111dae942bd7a121f7 +Qx = 1b4b8947192a7c0166c0e0b2791e217370836283e805f3ee11cfb78445aba3c5bc39fe594e01916617ad59e7c8e740d8f2d07d88905d3f33bd5e51aafd4943c5dc6 +Qy = 1175d117232836c28e717ce2a55e59f4ec550effde30d18e3d99e42c6aa2283c7b3e7f2f6ff1fca605dde78c3a5bffa689347b4c93f51ba59a1787bb7d5e43861dc +k = 023645023d6bdf20652cdce1185c4ef225c66d54f18632d99ccf743bf554d04c214c88ce52a4f71ec75c899ad1b3c07c34112ca20b55c217ff1d72c9528e2774ce8 +R = 1e933f68ce0f8403cb16822b8e0564b1d39a35f27b53e4ae0bcdff3e051759464afbc34998ba7c8a7ee34ef6c1aaa722cffe48356fd0b738058358d4c768b3186c1 +S = 0a67368a305508ce6d25d29c84f552a4a513998990fef4936244f891a2909c30d5fdc9e8a267ecbf3c597138f4a08f7e92bee57d5420eadd700fee864bf78b2614b + +Msg = b895788d7828aaeace4f6b61a072ffa344d8ea324962ba6dab5efda93f65bf64a0f2ac6d5721d03ee70e2aef21cdba69fd29040199160e3a293b772ffb961ed694a8dc82800dab79367a4809a864e4aff6bc837aaa868e952b771b76591c0bb82249034e3208e593d85973d3fea753a95b16e221b2561644535c0131fe834ae7 +d = 023048bc16e00e58c4a4c7cc62ee80ea57f745bda35715510ed0fc29f62359ff60b0cf85b673383b87a6e1a792d93ab8549281515850fa24d6a2d93a20a2fff3d6e +Qx = 0ba3dc98326a15999351a2ec6c59e221d7d9e7ee7152a6f71686c9797f3f330d3150123620d547813ba9d7cc6c6d35cc9a087d07dff780e4821e74ad05f3762efd6 +Qy = 18b051af9824b5f614d23ecadd591e38edbfe910ad6cbebc3e8a6bec11ea90691c17deb3bc5f34a4a3acd90b7b10f521f6ee7b3cfbfdc03b72d5a8783a4a77c3e4c +k = 06099d2667f06c58798757632d07d8b3efbe9c1323efb0c244be6b12b3b163ba1b7cf5246c98dcc0771665a66696d687af5f28ed664fd87d5093df6427523d4db84 +R = 10dc80ea853064a2ba5a781f108aca3785c5ec0aa45aa05ba31d4de671170797589e863d54a3a986aadf6f670277f50355713dfb27d4ec7e348f787910b3cd668cd +S = 018572bfad4f62e3694d1f2e6ffd432faed2e2b9d7e3611a07138212f1e79e6c394839f7cfae96bc368422630016fb9346681eadc5f9699e7331c3b5fde6d65e4c6 + +Msg = 2c5bd848c476e34b427cfe5676692e588e1957957db7b5704492bd02104a38216535607f5d092dc40020130c04a3aaf0f1c52409834926d69a05d3f3188187a71d402a10ba34eac8629b4c6359b1095f30f710219298bf06b9f19bfc299981d7e251ca232a0a85338a7e02464731d1b25d4a1f68baf97064516590644820c998 +d = 02b8b866ce4503bb40ffc2c3c990465c72473f901d6ebe6a119ca49fcec8221b3b4fa7ec4e8e9a10dbd90c739065ad6a3a0dd98d1d6f6dcb0720f25a99357a40938 +Qx = 1b8c7a169d5455f16bfe5df1ba5d6ec9c76e4bad9968d4f5f96be5878a7b6f71d74bfac0076dd278bc4630629f3294646f17d6b6c712b0087e2c4d576039cfdc8b9 +Qy = 18faffd5422dfd1b61432fa77b9a288b2b7d546656c0dcca3032179e6f45ee3cf61d6a447fc51731cb54457343a41569fcf78cef42895f4da5efcb14ea1fc065f8d +k = 0ac89e813f94042292aa1e77c73773c85cf881a9343b3f50711f13fa17b50f4e5cb04ac5f6fc3106a6ef4c9732016c4e08e301eefac19199459129a41a7589e0628 +R = 05bc7a253a028ee8b7253979b8d689d41d8df6fae7736341f22e28b6faf0cbbdebbd2ef4d73e56d2021af2c646dc15539a7c1e1c4dc9c7674808bd7968d8a66f947 +S = 0fd71575837a43a4cf1c47d0485cfd503c2cf36ebcea0fdef946ad29acb7fb2e7c6daf6b4eb741eb211081aed6207d02569f1518988f275ad94c7fd4735cb18a92e + +Msg = 65a0b97048067a0c9040acbb5d7f6e2e6ac462e1e0064a8ce5b5bbf8e57059e25a3ef8c80fc9037ae08f63e63f5bdb9378c322ad9b2daf839fad7a75b1027abb6f70f110247da7e971c7c52914e5a4f7761854432fa16b2a521e7bcaee2c735a87cad20c535bf6d04a87340c229bf9af8647eedca9e2dc0b5aa90f7fea3cdc0a +d = 0a43b32ad7327ec92c0a67279f417c8ada6f40d6282fe79d6dc23b8702147a31162e646291e8df460d39d7cdbdd7b2e7c6c89509b7ed3071b68d4a518ba48e63662 +Qx = 172fb25a3e22c2a88975d7a814f3e02d5bb74cfb0aaa082c5af580019b429fddd8c7f9e09b6938f62e8c31019b25571aaceef3c0d479079db9a9b533ee8e1670abd +Qy = 0ff5516223b6cc7c711705f15b91db559014e96d3839249c5c849f2aced228a8998177a1e91177abbb24b57a8ea84d944e0c95da860ae0925f1b40c0e1b7c9e0a46 +k = 0383eda042e06c0297fbd279a2ad40559c5c12ad458f73458eebcc92b308d3c4fcec20a5b59f698e16fa6ea02dba8661b6955f67c052f67b0a56460869f24cfdf7d +R = 1b9c35356b9d068f33aa22a61370dae44a6cb030497a34fb52af23c6b684677370268f06bb4433be6795a71de570088aec17ce0c9933d2f76c7edce7f406f62fedd +S = 06f07ea453cfa20ad604ba855332f62834657b0b795684d50c1562a675456e37f4dae45f0df47d8e27e47bc9ce9c9cbba1554c5b94b0b17401b73c8d0c0902c6cc4 + +Msg = d6e366a87808eea5d39fe77cac4b8c754e865a796062e2ec89f72165cd41fe04c48148068c570e0d29afe9011e7e7a2461f4d9897d8c1fa14b4ff88cab40059d17ab724f4039244e97fcecb07f9ffeec2fb9d6b1896700fe374104a8c44af01a10e93b268d25367bf2bef488b8abcc1ef0e14c3e6e1621b2d58753f21e28b86f +d = 03c08fdccb089faee91dac3f56f556654a153cebb32f238488d925afd4c7027707118a372f2a2db132516e12ec25f1664953f123ac2ac8f12e0dcbbb61ff40fb721 +Qx = 193301fc0791996ca29e2350723bd9aa0991ddbb4a78348ee72bdcd9ed63ce110ba3496f2ce0331b5c00d4d674c1b70114e17ce44a73c3e16bab14ed1ee924202e4 +Qy = 0aea9b288cfb2933ec0a40efa8e2108774e09b3863b3193d0dac6cc16ccaa5bd5f9ce133aec5cd3b62cbaeec04703e4b61b19572705db38cfaa1907c3d7c785b0cd +k = 0d0e90d5ee7b5036655ad5c8f6a112c4b21c9449ca91c5c78421e364a2160bbac4428303657bc11ea69f59fb0fe85a41b8f155a362343094456fd2a39f2a79e4804 +R = 1a8c23a2965d365a4c2ffd0802ae8b3a69c6b84a1ba77fd8a5f2f61e8ec3a1dcb336f136e2a997252eaa94caf9b5ad6c9ecff5bf33abf547ca84985bb89908a11d7 +S = 1cc42a2dd97aa42b9df5ea430e0d4cb13106dd6da6e8c9315c96ed7b052db365bbde6960c9a965954a4398c18ea7db9593bbfc3c3b6b3466ff806fccac3de6424ab + +Msg = f99e1d272d0f5fb9c4f986e873d070ec638422bc04b47c715595e2cf1a701cdf88bc6c4b20085b357bad12ccba67cac8a5ca07f31ba432f9154ff1fadefd487a83a9c37e49fb70a2f170e58889cab0552e0a3806ccfa2a60d96e346851d84b7de6d1a4b8cf37567dc161a84f13421e3412457d4bc27f6213453c8519a2d7daa2 +d = 0969b515f356f8bb605ee131e80e8831e340902f3c6257270f7dedb2ba9d876a2ae55b4a17f5d9acd46c1b26366c7e4e4e90a0ee5cff69ed9b278e5b1156a435f7e +Qx = 0fc7ae62b05ed6c34077cbcbb869629528a1656e2e6d403884e79a21f5f612e91fc83c3a8ac1478d58852f0e8ba120d5855983afd1a719949afa8a21aec407516c3 +Qy = 0aa705da6459a90eaa2c057f2e6614fb72fc730d6fdebe70e968c93dbc9858534768ea2666553cd01db132331441823950a17e8d2345a3cab039c22b21bfe7bd3b9 +k = 19029260f88e19360b70c11107a92f06faa64524cfbd9f70fecf02bd5a94f390582a7f4c92c5313bb91dc881596768d86f75a0d6f452094adbe11d6643d1a0b2135 +R = 07f2158e9b9fa995199608263969498923cf918fdc736427c72ce27ce4a3540dce2e8e5e63a8fc7ba46f7fa42480efbf79c6ed39521f6e6ec056079e453e80a89d9 +S = 08e349eed6f1e28b0dbf0a8aeb1d67e59a95b54a699f083db885f50d702f3c6a4069591afaa5b80b3c75efb1674ebd32c7ead0040d115945f9a52ee3a51806cad45 + +Msg = 91f1ca8ce6681f4e1f117b918ae787a888798a9df3afc9d0e922f51cdd6e7f7e55da996f7e3615f1d41e4292479859a44fa18a5a006662610f1aaa2884f843c2e73d441753e0ead51dffc366250616c706f07128940dd6312ff3eda6f0e2b4e441b3d74c592b97d9cd910f979d7f39767b379e7f36a7519f2a4a251ef5e8aae1 +d = 013be0bf0cb060dbba02e90e43c6ba6022f201de35160192d33574a67f3f79df969d3ae87850071aac346b5f386fc645ed1977bea2e8446e0c5890784e369124418 +Qx = 167d8b8308259c730931db828a5f69697ec0773a79bdedbaaf15114a4937011c5ae36ab0503957373fee6b1c4650f91a3b0c92c2d604a3559dd2e856a9a84f551d9 +Qy = 19d2c1346aadaa3090b5981f5353243300a4ff0ab961c4ee530f4133fe85e6aab5bad42e747eee0298c2b8051c8be7049109ad3e1b572dda1cac4a03010f99f206e +k = 1a363a344996aac9a3ac040066a65856edfb36f10bb687d4821a2e0299b329c6b60e3547dde03bdbd1afa98b0b75d79cf5aac0ef7a3116266cadf3dfbd46f8a4bfc +R = 1ff097485faf32ce9e0c557ee064587c12c4834e7f0988cf181d07ba9ee15ae85a8208b61850080fc4bbedbd82536181d43973459f0d696ac5e6b8f2330b179d180 +S = 0306dc3c382af13c99d44db7a84ed813c8719c6ed3bbe751ead0d487b5a4aa018129862b7d282cce0bc2059a56d7722f4b226f9deb85da12d5b40648bf6ec568128 + +[P-521,SHA-384] + +Msg = dbc094402c5b559d53168c6f0c550d827499c6fb2186ae2db15b89b4e6f46220386d6f01bebde91b6ceb3ec7b4696e2cbfd14894dd0b7d656d23396ce920044f9ca514bf115cf98ecaa55b950a9e49365c2f3a05be5020e93db92c37437513044973e792af814d0ffad2c8ecc89ae4b35ccb19318f0b988a7d33ec5a4fe85dfe +d = 095976d387d814e68aeb09abecdbf4228db7232cd3229569ade537f33e07ed0da0abdee84ab057c9a00049f45250e2719d1ecaccf91c0e6fcdd4016b75bdd98a950 +Qx = 13b4ab7bc1ddf7fd74ca6f75ac560c94169f435361e74eba1f8e759ac70ab3af138d8807aca3d8e73b5c2eb787f6dcca2718122bd94f08943a686b115d869d3f406 +Qy = 0f293c1d627b44e7954d0546270665888144a94d437679d074787959d0d944d8223b9d4b5d068b4fbbd1176a004b476810475cd2a200b83eccd226d08b444a71e71 +k = 0a8d90686bd1104627836afe698effe22c51aa3b651737a940f2b0f9cd72c594575e550adb142e467a3f631f4429514df8296d8f5144df86faa9e3a8f13939ad5b3 +R = 02128f77df66d16a604ffcd1a515e039d49bf6b91a215b814b2a1c88d32039521fbd142f717817b838450229025670d99c1fd5ab18bd965f093cae7accff0675aae +S = 008dc65a243700a84619dce14e44ea8557e36631db1a55de15865497dbfd66e76a7471f78e510c04e613ced332aa563432a1017da8b81c146059ccc7930153103a6 + +Msg = 114187efd1f6d6c46473fed0c1922987c79be2144439c6f61183caf2045bfb419f8cddc82267d14540624975f27232117729ccfeacccc7ecd5b71473c69d128152931865a60e6a104b67afe5ed443bdbcdc45372f1a85012bbc4614d4c0c534aacd9ab78664dda9b1f1e255878e8ac59e23c56a686f567e4b15c66f0e7c0931e +d = 04ceb9896da32f2df630580de979515d698fbf1dd96bea889b98fc0efd0751ed35e6bcf75bc5d99172b0960ffd3d8b683fbffd4174b379fbdecd7b138bb9025574b +Qx = 0e7a3d30d5bd443549d50e9b297aaa87bc80b5c9e94169602d9d43d6d0c490c0bed8cc2170288b106bdbf4c9f1ce53fd699af0b4c64b494b08520e57dc01ab9a8b0 +Qy = 1d81056d37aec8a75d588f6d05977416e6f24ad0117a7f4450036d695612e7bc2771caed80e580314eebc88c8fc51c453f066e752481f212b57165d67f8a44f375a +k = 046639c5a3ec15afae5e4a7a418ac760846512d880c359bc2c751b199ce43b10887e861b14127809754dbea47f6cc0140d2817e3f5b9a80ce01abd81f81b748433a +R = 0f913de91e19bd8f943d542ae357bacc942a0967abc9be6c06239a379db8cc733fa50013e0b0f088bce9d630262feaa33b30d84f91bcf5ce9976e4e740fcb112f84 +S = 08a73a5c9c24235e0d9cecaac653f68ce5a6fb186ce67fa058d6ddbbd4d0a8c4d194e571148e8ad6c8882b4e33d2f60fb23dd7d07a1ae60864e8277918f592b3dc6 + +Msg = 6744b69fc2420fe00f2352399bd58719e4ecdd6d602e2c80f194d607e58b27a0854745bfd6d504de2eb30b04cee0f44af710dd77e2f816ac3ac5692fad2d1d417893bb0edba2707a4c146a486f8728ca696d35cc52e9c7187c82d4bdb92eb954794e5ad15133f6bfea1f025da32ada710a3014cf11095b3ff69a94d087f17753 +d = 00a8db566bd771a9689ea5188c63d586b9c8b576dbe74c06d618576f61365e90b843d00347fdd084fec4ba229fe671ccdd5d9a3afee821a84af9560cd455ed72e8f +Qx = 04f5b790cbe2984b71d41af5efed6c6893d15e13f31816d55a9c2926a104eee66f1ada83115d1388551218773b8b9d1138e3e3f027bb4392c90c14fd232580b4a11 +Qy = 0660eb160e9bfc8c5619e70e948e238c6fd37739bc1bb657b8e8436e63628f91992be7e63d9a7359623a1340642777b22026feb51116a6c50c54c3589b9bd39b6cb +k = 1e7b5e53571a24bd102dd7ad44a4b8d8a4e60e5957bc3c4e5d3c73109f55233f072e572c7892f425ba5e64d3cb7966096bb34a47e26cd5b3e3b44108b310d9f681b +R = 1a88bcd7e2bdff6e497d943dde432fb3f855a7177c466319cb53b701230c299db030276269685857d1e3f28110e690f2f529c8d18115eb381f313bc891d92ad278e +S = 146f1984ea879274dfd5e86ad92e564a4de081523ddbb1c397b8f9595911ef2e6501bc081584d5340f7aa47e1af036234ac6f27a5ac31f78dd3b0ff1a62693c630d + +Msg = 16001f4dcf9e76aa134b12b867f252735144e523e40fba9b4811b07448a24ef4ccf3e81fe9d7f8097ae1d216a51b6eefc83880885e5b14a5eeee025c4232319c4b8bce26807d1b386ad6a964deb3bdca30ee196cfdd717facfad5c77d9b1d05fdd96875e9675e85029ecbf4f94c524624746b7c42870c14a9a1454acf3354474 +d = 1a300b8bf028449344d0e736145d9dd7c4075a783cb749e1ec7988d60440a07021a25a3de74ea5e3d7bd4ab774d8ad6163adae31877ef0b2bd50e26e9e4be8a7b66 +Qx = 05055b9ad726ba8a48219b0ecbfffb89f8428de895b231f676705b7de9f2022d9ff4e0114ebb52dea342f9bf76b2fb060c020e29d92074ebb1fbfe5290a58c8bc10 +Qy = 0415af7f20a6e945315adbf757316bb486c80780a0a3a15b4b9609f126d7341053a2b726ab63cb46feee527b0bf532b32b477e5671aea23d9b3c3e604b9029954b5 +k = 05a2e92717bb4dab3ee76724d4d9c2d58a32b873e491e36127985f0c9960c610962ca1c4510dba75c98d83beebdc58b1d8678e054640951d11db1bd2d8a4ab8476b +R = 104a78ce94f878822daaf00ee527fbdbf6cceb3cbb23a2caa485e4109466de8910252f92379ab292cac8d1eda164f880c0067696e733fc8588a27703a3e1f5b8f1f +S = 1ffe23e8ab5a31668a81161a234ea14879771fe9866f8872eb6edb672e0fe91d2bb75c9767a2dfbac7c15c802211236b22ea41ecd055a0b8b311ffc4255f86d5c67 + +Msg = a9824a7b810aa16690083a00d422842971baf400c3563baa789c5653fc13416111c0236c67c68e95a13cec0df50324dcc9ae780ce4232607cb57dd9b2c61b382f0fa51fd4e283e2c55ffe272597651659fbd88cd03bfa9652cd54b01a7034c83a602709879e1325c77969bebfd93932ce09a23eae607374602201614ff84b141 +d = 06a253acd79912a74270fc0703ed6507ab20a970f2bc2277f782062092cf0e60ae1ca1bb44dec003169bc25ef6e7123dd04692f77b181a6d7e692e66b09d35a540c +Qx = 1f15c6b1df156fdd8381cd7446e039435e445f8f36f0247475058da0e371bf72753f6e39f98066bc79370b038c39687ba18e16cb118fe6538b7568c5403c251f6b7 +Qy = 12d2b4f46b854eeae75f1c63f55b76bf0c604d47f870c28a50ecdeb52bba1dd9a0ff12e680804ff864111207652da7dd10b49edf66bb86be00bc06672de91982457 +k = 165faf3727e42fd61345cfa7b93e55fb4bf583b24bdc14ce635b6c99dbd788012f14da9a210b677c44acdd851e672f1a48188d6b8946c0efeebfe8a597ba0090a2c +R = 1ad9463d2759abd568626548578deefdcd8b2d050ce6d9c7ed05feca20167484b86e89bdcc936fd647e0f8aedd7b6add2b8cf13ff6ff013c2b5540c6c56fda97a0c +S = 1645a7d0e11015256cfb034adca198695eea6aedd44d9fbf496850ccfed950f43fffd8dbf41e113f2d3837d8a5dd62b2ed580112ff05800b1f73196e5576810e15b + +Msg = 90d8bbf714fd2120d2144022bf29520842d9fbd2dc8bb734b3e892ba0285c6a342d6e1e37cc11a62083566e45b039cc65506d20a7d8b51d763d25f0d9eaf3d38601af612c5798a8a2c712d968592b6ed689b88bbab95259ad34da26af9dda80f2f8a02960370bdb7e7595c0a4fffb465d7ad0c4665b5ec0e7d50c6a8238c7f53 +d = 0d5a5d3ddfd2170f9d2653b91967efc8a5157f8720d740dd974e272aab000cc1a4e6c630348754ab923cafb5056fc584b3706628051c557fce67744ee58ba7a56d0 +Qx = 128a4da5fc995678e457ceb3929adee93c280f851abe900fa21f4f809dafad4e33b381e0cd49ce8dd50e2e281cea162bfd60a1d6a1c0ee2228e6a011e171b559ab8 +Qy = 06eb0917cd72256992c49ea527f6bb0315f13d8047794a0f1da1e93737703b1c2a74a00441ef3b47b6a2ff789c49ae32d91cabe7b29247aeec44f6c40a76597a2ca +k = 03269983a5c2bcc98e9476f5abf82424566b1f08b17204d29e310ece88f99eb677a537f86fe2529e409cfef2c12929644100099e0de2f27c0f0ac11105a4dca935b +R = 1a5257ae1e8187ba954f535b86ff9b8d6a181a3b95c250d090cb4e9c3bfbd03aa64696a76c569728ef67780d6338d70ce46da40b87a3e49bfe154b93930890dfa93 +S = 05b6ccdfd5c63c7db76d3a0478064a2a376e0e050cb093be795a72a549247c2e4adba9183145c63d46479dbbdcf09986a6f64c09c7e16abc4853f6376c9558b014a + +Msg = 09952b1e09995e95bf0022e911c6ab1a463b0a1fdd0eec69117b34af1103c720b57600217de7cd178fef92de5391e550af72a8dcf7badf25b06dd039417f9a7d0f5be88fcd4e9655931d5b605452a667c9d1bae91d3476e7d51cff4108f116a49966fb3a7cff8df1c09734ce5620faf2dccb3dc5d94e7e9ac812da31f6d07a38 +d = 1bcedf920fa148361671b43c64e3186e1937eb1bd4b28cbd84c421472394552889bc05509aa732ef69d732b21b750523fdfd811f36467690fe94e01e64c9d5cbbe9 +Qx = 0d33c151d202a5d4d831348e940b027ee32e4b0b9b48d823a05c67ff3bdaee0189fc6680565f352c062e99968afc643208b4f9c7af185b861658a88c4ad0fcc8ba2 +Qy = 0e4441ddb546468ad8ffa6074f137edfbb81e82e0e7d8f05c4c54598aa996a9cde54cb371f642bfdd4ae7eca5b769696030027129a4183da93567ad142a2dff5183 +k = 046e619b83aac868b26d0b3cbfab55e630e0b55c461985b5d00f94ff3a5ce90ff412cebf46bbd84550d2031d573ca27d924624428360708c8d8491c29eb01d30f2e +R = 08427c0f0ac0263472cd423c0fb554bf3c851b9c775c566ab0f6878717bd57665830767b05b7789c5c0b078195bd943dc737325552d32877ecb04a7c41bd07cd80c +S = 10bb6652d6a624c40a7dd06828f15774130d02369ceb1a7d03b553e16e17b7fa5b5401f15885d5e4fc2e55c0c7a1b97871ab02f76386b93a16aa6e7eb65debac6dd + +Msg = 0bb0f80cff309c65ff7729c59c517d50fc0ed5be405ef70cb910c3f62c328c90853d4473530b654dda6156e149bc2222a8a7f9be665240e2fbe9d03f78a2356af0bacd1edb84c4801adc8293a8a0bd6123d1cf6ba216aca807a7eb4dca76b493eb6e3dbb69d36f0f00f856222f24d9b93ec34c3b261be2fca0451c00571928e5 +d = 03789e04b3a2a0254ade3380172c150d2fad033885e02ea8bea5b92db3f4adbab190ae423080a1154dfedec694c25eab46ce638be3db4e4cba67bc39f62d6e7db2d +Qx = 1dbc2cf19627bdccf02432b1761f296275230c150cdde823ce3141ec315d7d05e16b2c29e2a67491078d5316883e933d85b4b10d4f64c477d3c4e0442dc928983a2 +Qy = 07562e720807dd118d3d8b265b3abc61a71fce43e3dce0e7b5ae18b7a4cb01ecc00d39c1f22e150a9a8728997e502144f5b3f6fa9b4cb8a4136212b082ca394e3f6 +k = 0fbccd8d7804bdd1d1d721b5ec74d4ba37603bc306f9fce2ec241853d8e07334e6b4b12c4ecca0c54bd71193dd7146507933a20737c5f3e15085830fab9b30ca57b +R = 181915a3998d8fa214f9715f4ca928d09c36de168dc15c6970a8a062b5cea2dc969b2437ca17b684f78a1fd583aad8e6c762c8f4ab0c91b86a497145e3ca440d307 +S = 15a6c18c5c77f5470b27d061eafdc26b78561941a3b2ab0f5c81d40899fc053c3d9ed12d7d61e298abbae470009c7b2157731c58d7b16a66fa5abaf5e8a1b8ed394 + +Msg = 7efacf213382ce30804e78b7256854d759147dba9729c51b2759465715bf2c421034c23dc651c13d6cce95f71fe6a84dfbee5768163ac5789ac0474c5ddf4115684683c5f7c204b33b8bcc0c03ac58f66cef2f53b721fe2fac91ad841126101a88f512a7c2ded38549d9f050d4b7961dda48a1489f026c5d111701762418cfe3 +d = 124700aa9186353e298edefc57bec0c7d0201cca10c1d80dd408d5d71040592b0ac59facdadfa8712445f5977ef8d4854022720c3f02d60e0732dbb2f171fcf1490 +Qx = 0c80fc4cecae5d53348524ddba6a160b735c75b22fdb39af17e2a613d09246e3bb0fd3f2978577f6db5d2118e05c7898024808f8eb8e021d7969cdcf7fc981200bb +Qy = 1a880c93943fd446d4b3923b574d2221c1bb7b645fb5534dda60e827b497666ff586b77921f7e7f605147947194cffd2fef0678880b89cc0bc7fb74fa96d4b112d7 +k = 01a05238d595ded5c61d3bf6fde257dbf13095af8a5cb3a2e579e8e4c550fe31d12b71cc2dbcb295e6c4fd0fb8c22d1b741c097cc59d826ced1a8771f09983143c4 +R = 132762bc81e9922a8d642e3a9d0218affa21fa2331cfcb9e452545c5981c64a8f7e4cc8e68056023b2aa78bead59061d19c7f646c931163a91e544b106b3be8de9e +S = 0c3a1b0b000c3169984132add51d611e2cb7069a262a6983d2ae72b459c36e6469509bdb0f473600b8686700b08910779dee9ba83f82e755d4a4ef5f124eb09397f + +Msg = 28edff8b9d85f5f58499cc11f492abdfab25e8945975bbaeee910afa2b8fc1295ec61406309ce4e09f4ab4f462959fc2a2786802466eb26d3b01be6919893ae75d0fdc2dc8a82e662550f9fce9627dd364188aaba5c6faa1b2d8a2235adfa5ad0dc140f88a2b2f103f5690e877d07fe8fd30d02d2b2729bd3d8eb5b23a21f54c +d = 1f532d01af885cb4ad5c329ca5d421c5c021883bd5404c798d617679bb8b094cbb7e15c832fb436325c5302313ce5e496f9513455e7021ffad75777a19b226acfa1 +Qx = 0c0bd76b0027b85bdd879052220da1494d503f6a4bb972105a48ae98e7dda8c2d9fd9336f5646385b961ef68e8464e3a95b00f96614b1a408ceaa2c87b077b6a8fb +Qy = 17eb7eb5c78db7819af92e8537d110d9f05a5e24f954f4dde21c224d4040f059ec99e051702f390413d2708d18f84d82998c61847475250fb844b20082cbe651a6b +k = 14e66853e0f7cd3300ebcae06048532e19cbb95bee140edc1c867ce7310637651445b6dfeb1d99d2e32f2ffb787ebe3fe35032277f185d3dad84f95806924550abe +R = 0c5b3a57161098e2e8e16e0a5ae8ecf4a14df14927eea18ed4925d11dc429dda145159323ba970174b194b9b4608a8fa2373b7a825c5e8bd80574e49698285c2c82 +S = 1a0c038a51796158b42eb5b0dac37aff9ab93b903a47e06ebbdd15946e4bcc9a3b3875b18cf6294c33fc6c3693cef04ed1a43d08951e664c760e2cf3fb4e47490d2 + +Msg = bae2a8897c742fd99fbf813351cd009d3f2e18d825ca22e115276484bce8f82f8c7c0c21dd2af208404d8ef45bb5a6c41693912b630897d5246801bf0775aa9bbac8be98cb861d172c3563dc59e78a58ed13c66dea496471b3ad0eeae8995293e4ab97373edc1837ffc95ff1cc0c1e90e64ea8680b2ca5f1e09bf86b99b343b6 +d = 11abf508bca68a85a54bc0659e77efad3c86112c9db04db2883e76144aa446918bb4bb0784b0b6a0e9aa47399fe3de5aaecfd8894a0d130bb0c366c40d9d5050745 +Qx = 05c0ea363a3a12633ea39d564587ebdd3a22a175ef32b9ebfc7311304b19cb3a62b5adc36f6afb6a6f7fabbf810ee89fdb72854fefd613e7798e9b9ff5938ea54c6 +Qy = 0bd06a85e47b885c08124b55a3fcc07ca61647cda6efbfdbd21b24d1ea7a4c7300d46cd798e76063aa979adef6f0698b15e5b7ae8a2ab39ab4f50b2d20614db6317 +k = 19cadb8c7eb10565aa4567e0709873918720f0e4b42b4817afb0b0547c70cd1100229deae97a276b9c98ea58b01d4839fee86336d749d123b03e8b1a31166acc110 +R = 0667448a8bbef1c810d40646977dc22f3dfb52a4d80928ded5e976e199cbed02fbd5a08546756ece14548d721a6eb380d0e1a71ad0660dbcac6163c776eedd3e249 +S = 0ae7f0a238daaddb7fb4a1707fe5132daf653f8e19f732347134c96f1dd798f867c479a4a4609a568a15b61afed70790adbde13ac5f68c468d0230852c1a2c22581 + +Msg = d57a26a9593e72bfc87322524639bcaae5f2252d18b99cdaa03b14445b0b8a4dd53928f66a2e4f202fb25b19cad0eb2f1bfda2ab9b0eb668cdcd0fe72f5d9ef2e45e0218590f7ab9d2c9342202610c698bc786cce108a7d4a6730a13e9ea1b470e781f1237d3f84f44abde808516975546bd89075ef9a9732bfd7ee33b6f4399 +d = 18dbf520d58177e4b7a0627674d220137983f486dd2fd3639f19751804e80df0655db6afd829cdf75238de525e1a7a9f048049b593dd64b4b96cc013f970c05ea1f +Qx = 18b872690c37995be324ddb5c2bd5462841bb062f8e63da248a853de79c3d6bb9a2eb1e6933afda0998ca43491cc807b08ace2d5336a43d0ab50563a2d3d98755f0 +Qy = 002ff31221aa32aa6546f35e8fe5b9361f938362a5e89e77ae130ba8bce3729e912dfac35a2fd21efe84b45b8be2a340850e4b574e1885b35c2afbe196b57c6cf4c +k = 098faeb73054639cb2e4442cd68e7b3a13f4b3f397a7b26f303afa40789f8ddd3d918f1ce4f0be53c8cb69c380744e2297d7fc01e2b3daef4ce64dd3a2644234753 +R = 09c0e7649f814f70a8416cb78bc4601472a363fe97f5c587305778169677860dd97f87b5ab07c3a953bc4615fc34634509d6a25621bdded33ed42446d059509c190 +S = 120b90e1cfb8a1b5e530df7b17d1128bc051ca4f1a65dd9c9d9d3c59d2f00c7c1e994c52b8671d40294b4d574d2c04475d5bebeacd3a0d3870a54dc7a4805614f40 + +Msg = 8fdcf5084b12cfc043dd3416b46274e021bbed95d341d3c500c102a5609d3a34de29f8fa9f0adb611a1f47a97ad981f8129d718fc0d6c709eab1a3490db8d550f34eb905b9e00663543afc5bc155e368e0bc919a8b8c9fa42093603537a5614927efa6be819ed42ececbf1a80a61e6e0a7f9b5bc43b9238e62d5df0571fea152 +d = 002764f5696aa813cd55d30948585f86288ae05aeb264ca157cd09e1d09a10515a849b0791b755ccc656a34707be9e52f5762d290a7d2bcd6de52c600ff862eaf4e +Qx = 127279c88719dc614db387f102e55104ea1c704ac7f57f3bca936f728439b76556730dd7cde2ac1ad0a4c2c2f036ab6f00cf34cb87ea36113571f300713044106d2 +Qy = 134a0786c31f5f2291b83c50fb579ae4c620b95e5a8bdc0c7e1ee6b996c89d764f1b20403e7faa203f397425ada297045dd8ba0e4b155d4900da249e934faab7991 +k = 08bffb0778cbb06466cecc114b9e89ca243a2b2b5e2597db920bc73a8bbcbe3f57144ad33409ef7faaab430e13f4c42d304d11347360c84972ca20b1539cce3a288 +R = 1f8f504e64a502e51e7c129517931c3b71f0d8a63b19cfe01ff7c951c6525249608b3ef5d00061d77eb6b3d69581adeaa3732c773bbb9b919c3e7c71fdc09f44d06 +S = 058044fc64b340604ffd02a5b2918d76fd6fb59ea895feab7aa218e6f1e8c8f226eb9ee345ef8140183a69272582005077b008006aab11597e808d7ff1e8382c924 + +Msg = 00669f433934992257bed55861df679804107d7fa491672574a7624949c60049b0533383c88d6896c8de860704c3e6a6aefce83efa57c4d57e9ab253da5d15e1f53ab6dce218b592772ab0bc01fee8e63368e85c0639301456fe2d44cd5396a7f2b22761cd03b80eba7883eede8249a2f5db2183bf00550c5c002f45a5e4fb31 +d = 1b0c9acd3eeb618b4b0de4db402206f0f29adc69d7ad324b6db6601b351f723ac8fe949eeacd34228649bf0126276e5aceb0137d00c30dd858aef2d6b6449de2e89 +Qx = 1811c8884486aaa083ddee1c51cb6e861cb830bd5eaa929f72efadbbd1286566ae7e7ba7fde7e02529900d35ee64591652d28798bfc1bed0d192602a9cf5a7d22e3 +Qy = 06d7fc9dd494816cfd29613d4689af67f7d0a2e6fbad5d4d6e0130189172a1ab601c5ca71deaa8bfcb5a190d49da191672ff6fc048e146cb902acec5eae6d87e60a +k = 1fdc4f108070af3c66c9ba7b6c1f2603a19ceb4760399df81228cfc7eafde1082b5a0716a3ff82fbe84726f14dd0db3376ca184a78c3c60679bab6cd45f77f9b9ce +R = 1ec310339ff056faeb341c4499c43782078b04be1725ae9a6cdcb6011c46d1a4eb3d75c358225e4ec142fd1cd344186f5eb597f7ba559ddfa954824365d5b6edaec +S = 005b679a33fdb7e04834f071cd0ac514c04add9f2614ab9bbd9b407b1420fed3f3e02a108e7e279899e43dcf64ae4083c289a87cd7d2103bdc036a95d36800ac7c6 + +Msg = 4be81dcfab39a64d6f00c0d7fff94dabdf3473dc49f0e12900df328d6584b854fbaebaf3194c433e9e21743342e2dd056b445c8aa7d30a38504b366a8fa889dc8ecec35b3130070787e7bf0f22fab5bea54a07d3a75368605397ba74dbf2923ef20c37a0d9c64caebcc93157456b57b98d4becb13fecb7cc7f3740a6057af287 +d = 181e1037bbec7ca2f271343e5f6e9125162c8a8a46ae8baa7ca7296602ae9d56c994b3b94d359f2b3b3a01deb7a123f07d9e0c2e729d37cc5abdec0f5281931308a +Qx = 0cfa5a8a3f15eb8c419095673f1d0bd63b396ff9813c18dfe5aa31f40b50b82481f9ed2edd47ae5ea6a48ea01f7e0ad0000edf7b66f8909ee94f141d5a07efe315c +Qy = 18af728f7318b96d57f19c1104415c8d5989565465e429bc30cf65ced12a1c5856ac86fca02388bc151cf89959a4f048597a9e728f3034aa39259b59870946187bf +k = 09078beaba465ba7a8b3624e644ac1e97c654533a58ac755e90bd606e2214f11a48cb51f9007865a0f569d967ea0370801421846a89f3d09eb0a481289270919f14 +R = 19cf91a38cc20b9269e7467857b1fc7eabb8cea915a3135f727d471e5bfcfb66d321fabe283a2cf38d4c5a6ecb6e8cbee1030474373bb87fcdfcc95cf857a8d25d0 +S = 1cf9acd9449c57589c950f287842f9e2487c5610955b2b5035f6aacfd2402f511998a1a942b39c307fc2bcab2c8d0dae94b5547ddccfb1012ca985b3edf42bbba8b + +[P-521,SHA-512] + +Msg = 9ecd500c60e701404922e58ab20cc002651fdee7cbc9336adda33e4c1088fab1964ecb7904dc6856865d6c8e15041ccf2d5ac302e99d346ff2f686531d25521678d4fd3f76bbf2c893d246cb4d7693792fe18172108146853103a51f824acc621cb7311d2463c3361ea707254f2b052bc22cb8012873dcbb95bf1a5cc53ab89f +d = 0f749d32704bc533ca82cef0acf103d8f4fba67f08d2678e515ed7db886267ffaf02fab0080dca2359b72f574ccc29a0f218c8655c0cccf9fee6c5e567aa14cb926 +Qx = 061387fd6b95914e885f912edfbb5fb274655027f216c4091ca83e19336740fd81aedfe047f51b42bdf68161121013e0d55b117a14e4303f926c8debb77a7fdaad1 +Qy = 0e7d0c75c38626e895ca21526b9f9fdf84dcecb93f2b233390550d2b1463b7ee3f58df7346435ff0434199583c97c665a97f12f706f2357da4b40288def888e59e6 +k = 03af5ab6caa29a6de86a5bab9aa83c3b16a17ffcd52b5c60c769be3053cdddeac60812d12fecf46cfe1f3db9ac9dcf881fcec3f0aa733d4ecbb83c7593e864c6df1 +R = 04de826ea704ad10bc0f7538af8a3843f284f55c8b946af9235af5af74f2b76e099e4bc72fd79d28a380f8d4b4c919ac290d248c37983ba05aea42e2dd79fdd33e8 +S = 087488c859a96fea266ea13bf6d114c429b163be97a57559086edb64aed4a18594b46fb9efc7fd25d8b2de8f09ca0587f54bd287299f47b2ff124aac566e8ee3b43 + +Msg = b3c63e5f5a21c4bfe3dbc644354d9a949186d6a9e1dd873828782aa6a0f1df2f64114a430b1c13fe8a2e09099e1ed05ef70de698161039ded73bcb50b312673bb073f8a792ac140a78a8b7f3586dffb1fc8be4f54516d57418ccc9945025ce3acf1eb84f69ceee5e9bd10c18c251dbc481562cd3aae54b54ab618cb1eeda33cf +d = 1a4d2623a7d59c55f408331ba8d1523b94d6bf8ac83375ceb57a2b395a5bcf977cfc16234d4a97d6f6ee25a99aa5bff15ff535891bcb7ae849a583e01ac49e0e9b6 +Qx = 04d5c8afee038984d2ea96681ec0dccb6b52dfa4ee2e2a77a23c8cf43ef19905a34d6f5d8c5cf0981ed804d89d175b17d1a63522ceb1e785c0f5a1d2f3d15e51352 +Qy = 014368b8e746807b2b68f3615cd78d761a464ddd7918fc8df51d225962fdf1e3dc243e265100ff0ec133359e332e44dd49afd8e5f38fe86133573432d33c02fa0a3 +k = 0bc2c0f37155859303de6fa539a39714e195c37c6ea826e224c8218584ae09cd0d1cc14d94d93f2d83c96e4ef68517fdb3f383da5404e5a426bfc5d424e253c181b +R = 1a3c4a6386c4fb614fba2cb9e74201e1aaa0001aa931a2a939c92e04b8344535a20f53c6e3c69c75c2e5d2fe3549ed27e6713cb0f4a9a94f6189eb33bff7d453fce +S = 16a997f81aa0bea2e1469c8c1dab7df02a8b2086ba482c43af04f2174831f2b1761658795adfbdd44190a9b06fe10e578987369f3a2eced147cff89d8c2818f7471 + +Msg = 6e0f96d56505ffd2d005d5677dbf926345f0ff0a5da456bbcbcfdc2d33c8d878b0bc8511401c73168d161c23a88b04d7a9629a7a6fbcff241071b0d212248fcc2c94fa5c086909adb8f4b9772b4293b4acf5215ea2fc72f8cec57b5a13792d7859b6d40348fc3ba3f5e7062a19075a9edb713ddcd391aefc90f46bbd81e2557b +d = 14787f95fb1057a2f3867b8407e54abb91740c097dac5024be92d5d65666bb16e4879f3d3904d6eab269cf5e7b632ab3c5f342108d1d4230c30165fba3a1bf1c66f +Qx = 0c2d540a7557f4530de35bbd94da8a6defbff783f54a65292f8f76341c996cea38795805a1b97174a9147a8644282e0d7040a6f83423ef2a0453248156393a1782e +Qy = 119f746c5df8cec24e4849ac1870d0d8594c799d2ceb6c3bdf891dfbd2242e7ea24d6aec3166214734acc4cbf4da8f71e2429c5c187b2b3a048527c861f58a9b97f +k = 186cd803e6e0c9925022e41cb68671adba3ead5548c2b1cd09348ab19612b7af3820fd14da5fe1d7b550ed1a3c8d2f30592cd7745a3c09ee7b5dcfa9ed31bdd0f1f +R = 10ed3ab6d07a15dc3376494501c27ce5f78c8a2b30cc809d3f9c3bf1aef437e590ef66abae4e49065ead1af5f752ec145acfa98329f17bca9991a199579c41f9229 +S = 08c3457fe1f93d635bb52df9218bf3b49a7a345b8a8a988ac0a254340546752cddf02e6ce47eee58ea398fdc9130e55a4c09f5ae548c715f5bcd539f07a34034d78 + +Msg = 3f12ab17af3c3680aad22196337cedb0a9dba22387a7c555b46e84176a6f8418004552386ada4deec59fdabb0d25e1c6668a96f100b352f8dabd24b2262bd2a3d0f825602d54150bdc4bcbd5b8e0ca52bc8d2c70ff2af9b03e20730d6bd9ec1d091a3e5c877259bcff4fd2c17a12bfc4b08117ec39fe4762be128d0883a37e9d +d = 15807c101099c8d1d3f24b212af2c0ce525432d7779262eed0709275de9a1d8a8eeeadf2f909cf08b4720815bc1205a23ad1f825618cb78bde747acad8049ca9742 +Qx = 160d7ea2e128ab3fabd1a3ad5455cb45e2f977c2354a1345d4ae0c7ce4e492fb9ff958eddc2aa61735e5c1971fa6c99beda0f424a20c3ce969380aaa52ef5f5daa8 +Qy = 14e4c83f90d196945fb4fe1e41913488aa53e24c1d2142d35a1eed69fed784c0ef44d71bc21afe0a0065b3b87069217a5abab4355cf8f4ceae5657cd4b9c8008f1f +k = 096731f8c52e72ffcc095dd2ee4eec3da13c628f570dba169b4a7460ab471149abdede0b63e4f96faf57eab809c7d2f203fd5ab406c7bd79869b7fae9c62f97c794 +R = 1e2bf98d1186d7bd3509f517c220de51c9200981e9b344b9fb0d36f34d969026c80311e7e73bb13789a99e0d59e82ebe0e9595d9747204c5f5550c30d934aa30c05 +S = 12fed45cc874dc3ed3a11dd70f7d5c61451fbea497dd63e226e10364e0718d3722c27c7b4e5027051d54b8f2a57fc58bc070a55b1a5877b0f388d768837ef2e9cec + +Msg = a1eed24b3b7c33296c2491d6ee092ec6124f85cf566bb5bc35bffb5c734e34547242e57593e962fb76aee9e800eed2d702cc301499060b76406b347f3d1c86456978950737703c8159001e6778f69c734a56e5ce5938bd0e0de0877d55adeee48b0d8dfa4ac65fd2d3ce3e12878bac5c7014f9284d161b2a3e7d5c88569a45f6 +d = 18692def0b516edcdd362f42669999cf27a65482f9358fcab312c6869e22ac469b82ca9036fe123935b8b9ed064acb347227a6e377fb156ec833dab9f170c2ac697 +Qx = 1ceee0be3293d8c0fc3e38a78df55e85e6b4bbce0b9995251f0ac55234140f82ae0a434b2bb41dc0aa5ecf950d4628f82c7f4f67651b804d55d844a02c1da6606f7 +Qy = 1f775eb6b3c5e43fc754052d1f7fc5b99137afc15d231a0199a702fc065c917e628a54e038cbfebe05c90988b65183b368a2061e5b5c1b025bbf2b748fae00ba297 +k = 161cf5d37953e09e12dc0091dc35d5fb3754c5c874e474d2b4a4f1a90b870dff6d99fb156498516e25b9a6a0763170702bb8507fdba4a6131c7258f6ffc3add81fd +R = 14dfa43046302b81fd9a34a454dea25ccb594ace8df4f9d98556ca5076bcd44b2a9775dfaca50282b2c8988868e5a31d9eb08e794016996942088d43ad3379eb9a1 +S = 120be63bd97691f6258b5e78817f2dd6bf5a7bf79d01b8b1c3382860c4b00f89894c72f93a69f3119cb74c90b03e9ede27bd298b357b9616a7282d176f3899aaa24 + +Msg = 9aace26837695e6596007a54e4bccdd5ffb16dc6844140e2eeeb584b15acb2bbffd203c74440b6ee8db676fd200b4186a8c3e957c19e74d4d865ada83f80655323dfa3570907ed3ce853b6e8cc375ed2d758a2f5ad265dd3b47650517a49b3d02df9e0c60c21576378c2b3a08481eec129b2a75608e13e6420127a3a63c8a3f1 +d = 0a63f9cdefbccdd0d5c9630b309027fa139c31e39ca26686d76c22d4093a2a5e5ec4e2308ce43eb8e563187b5bd811cc6b626eace4063047ac0420c3fdcff5bdc04 +Qx = 14cab9759d4487987b8a00afd16d7199585b730fb0bfe63796272dde9135e7cb9e27cec51207c876d9214214b8c76f82e7363f5086902a577e1c50b4fbf35ce9966 +Qy = 1a83f0caa01ca2166e1206292342f47f358009e8b891d3cb817aec290e0cf2f47e7fc637e39dca03949391839684f76b94d34e5abc7bb750cb44486cce525eb0093 +k = 01e51fd877dbbcd2ab138fd215d508879298d10c7fcbdcc918802407088eb6ca0f18976a13f2c0a57867b0298512fc85515b209c4435e9ef30ab01ba649838bc7a0 +R = 11a1323f6132d85482d9b0f73be838d8f9e78647934f2570fededca7c234cc46aa1b97da5ac1b27b714f7a171dc4209cbb0d90e4f793c4c192dc039c31310d6d99b +S = 0386a5a0fc55d36ca7231a9537fee6b9e51c2255363d9c9e7cb7185669b302660e23133eb21eb56d305d36e69a79f5b6fa25b46ec61b7f699e1e9e927fb0bceca06 + +Msg = ac2175940545d4fbab6e2e651c6830aba562e0c11c919e797c43eff9f187a68a9e5a128e3e2a330b955a3f4577d3f826529ad1b03d7b60f7ad678f005053b41dc0f8d267f3685c6abe1a0e9a733c44b2f3ca48b90806f935141c842e3a6c06a58f5343d75e3585971a734f4ae1074ce5b54f74bd9342f4bbca738d260393f43e +d = 024f7d67dfc0d43a26cc7c19cb511d30a097a1e27e5efe29e9e76e43849af170fd9ad57d5b22b1c8840b59ebf562371871e12d2c1baefc1abaedc872ed5d2666ad6 +Qx = 09da1536154b46e3169265ccba2b4da9b4b06a7462a067c6909f6c0dd8e19a7bc2ac1a47763ec4be06c1bec57d28c55ee936cb19588cc1398fe4ea3bd07e6676b7f +Qy = 14150cdf25da0925926422e1fd4dcfcffb05bdf8682c54d67a9bd438d21de5af43a15d979b320a847683b6d12ac1383a7183095e9da491c3b4a7c28874625e70f87 +k = 1c1308f31716d85294b3b5f1dc87d616093b7654907f55289499b419f38ceeb906d2c9fe4cc3d80c5a38c53f9739311b0b198111fede72ebde3b0d2bc4c2ef090d2 +R = 00dbf787ce07c453c6c6a67b0bf6850c8d6ca693a3e9818d7453487844c9048a7a2e48ff982b64eb9712461b26b5127c4dc57f9a6ad1e15d8cd56d4fd6da7186429 +S = 0c6f1c7774caf198fc189beb7e21ca92ceccc3f9875f0e2d07dc1d15bcc8f210b6dd376bf65bb6a454bf563d7f563c1041d62d6078828a57538b25ba54723170665 + +Msg = 6266f09710e2434cb3da3b15396556765db2ddcd221dce257eab7399c7c490135925112932716af1434053b8b9fe340563e57a0b9776f9ac92cbb5fba18b05c0a2fafbed7240b3f93cd1780c980ff5fe92610e36c0177cabe82367c84cee9020cf26c1d74ae3eb9b9b512cb8b3cb3d81b17cf20dc76591b2b394ef1c62ac12ee +d = 0349471460c205d836aa37dcd6c7322809e4e8ef81501e5da87284b267d843897746b33016f50a7b702964910361ed51d0afd9d8559a47f0b7c25b2bc952ce8ed9e +Qx = 00bbd4e8a016b0c254e754f68f0f4ed081320d529ecdc7899cfb5a67dd04bc85b3aa6891a3ed2c9861ae76c3847d81780c23ad84153ea2042d7fd5d517a26ff3ce4 +Qy = 0645953afc3c1b3b74fdf503e7d3f982d7ee17611d60f8eb42a4bddbec2b67db1f09b54440c30b44e8071d404658285cb571462001218fc8c5e5b98b9fae28272e6 +k = 00eb2bd8bb56b9d2e97c51247baf734cc655c39e0bfda35375f0ac2fe82fad699bf1989577e24afb33c3868f91111e24fefe7dec802f3323ac013bec6c048fe5568 +R = 14bf63bdbc014aa352544bd1e83ede484807ed760619fa6bc38c4f8640840195e1f2f149b29903ca4b6934404fb1f7de5e39b1ea04dba42819c75dbef6a93ebe269 +S = 05d1bcf2295240ce4415042306abd494b4bda7cf36f2ee2931518d2454faa01c606be120b057062f2f3a174cb09c14f57ab6ef41cb3802140da22074d0e46f908d4 + +Msg = 3de9e617a6868dca1a1432d503f923535da3f9b34426b2a4822174399c73b1c1ee67311410a58c17202ac767844b2024d8aa21a205707d93865693ac25a24fc87034fa3a7a7e27c3344cb03b87602c15180a5fe6a9dd90cd11af4a0f150207bf2d83f55b12c088adae99aa8cfa659311b3a25beb99056643760d6a282126b9b2 +d = 07788d34758b20efc330c67483be3999d1d1a16fd0da81ed28895ebb35ee21093d37ea1ac808946c275c44454a216195eb3eb3aea1b53a329eca4eb82dd48c784f5 +Qx = 0157d80bd426f6c3cee903c24b73faa02e758607c3e102d6e643b7269c299684fdaba1acddb83ee686a60acca53cddb2fe976149205c8b8ab6ad1458bc00993cc43 +Qy = 16e33cbed05721b284dacc8c8fbe2d118c347fc2e2670e691d5d53daf6ef2dfec464a5fbf46f8efce81ac226915e11d43c11c8229fca2327815e1f8da5fe95021fc +k = 0a73477264a9cc69d359464abb1ac098a18c0fb3ea35e4f2e6e1b060dab05bef1255d9f9c9b9fbb89712e5afe13745ae6fd5917a9aedb0f2860d03a0d8f113ea10c +R = 07e315d8d958b8ce27eaf4f3782294341d2a46fb1457a60eb9fe93a9ae86f3764716c4f5f124bd6b114781ed59c3f24e18aa35c903211b2f2039d85862932987d68 +S = 1bcc1d211ebc120a97d465b603a1bb1e470109e0a55d2f1b5c597803931bd6d7718f010d7d289b31533e9fcef3d141974e5955bc7f0ee342b9cad05e29a3dded30e + +Msg = aa48851af7ef17abe233163b7185130f4646203c205e22bcc2a5a3697bcab998c73a9ffe1d3ea0b7978ce7df937a72586eb5ca60b0d939a7d1c115c820171c89c8116b7e2c7b98cf0f14e4c4df3cb2f319ad3ab0ea25ff14526ddc037469f000bf82100acd4cdf94feb4eba4ea1726f0569336604a473aee67d71afebb569209 +d = 1f98696772221e6cccd5569ed8aed3c435ee86a04689c7a64d20c30f6fe1c59cc10c6d2910261d30c3b96117a669e19cfe5b696b68feeacf61f6a3dea55e6e5837a +Qx = 07002872c200e16d57e8e53f7bce6e9a7832c387f6f9c29c6b75526262c57bc2b56d63e9558c5761c1d62708357f586d3aab41c6a7ca3bf6c32d9c3ca40f9a2796a +Qy = 1fe3e52472ef224fb38d5a0a14875b52c2f50b82b99eea98d826c77e6a9ccf798de5ffa92a0d65965f740c702a3027be66b9c844f1b2e96c134eb3fdf3edddcf11c +k = 1a277cf0414c6adb621d1cc0311ec908401ce040c6687ed45a0cdf2910c42c9f1954a4572d8e659733d5e26cbd35e3260be40017b2f5d38ec42315f5c0b056c596d +R = 0d732ba8b3e9c9e0a495249e152e5bee69d94e9ff012d001b140d4b5d082aa9df77e10b65f115a594a50114722db42fa5fbe457c5bd05e7ac7ee510aa68fe7b1e7f +S = 134ac5e1ee339727df80c35ff5b2891596dd14d6cfd137bafd50ab98e2c1ab4008a0bd03552618d217912a9ec502a902f2353e757c3b5776309f7f2cfebf913e9cd + +Msg = b0d5d52259af364eb2d1a5027e5f7d0afe4b999cc5dd2268cfe76f51d2f17b541bdd7867e23a1bb897705153d9432a24012108979c6a2c9e2567c9531d012f9e4be764419491a52eae2e127430b0ab58cb8e216515a821b3db206447c235bf44ee304201b483b2a88844abaa18bca0147dfff7e502397dd62e15524f67eb2df2 +d = 13c3852a6bc8825b45fd7da1754078913d77f4e586216a6eb08b6f03adce7464f5dbc2bea0eb7b12d103870ef045f53d67e3600d7eba07aac5db03f71b64db1cceb +Qx = 0c97a4ebcbbe701c9f7be127e87079edf479b76d3c14bfbee693e1638e5bff8d4705ac0c14597529dbe13356ca85eb03a418edfe144ce6cbf3533016d4efc29dbd4 +Qy = 11c75b7a8894ef64109ac2dea972e7fd5f79b75dab1bf9441a5b8b86f1dc1324426fa6cf4e7b973b44e3d0576c52e5c9edf8ce2fc18cb3c28742d44419f044667f8 +k = 1e25b86db041f21c2503d547e2b1b655f0b99d5b6c0e1cf2bdbd8a8c6a053f5d79d78c55b4ef75bff764a74edc920b35536e3c470b6f6b8fd53898f3bbc467539ef +R = 1dce45ea592b34d016497882c48dc0c7afb1c8e0f81a051800d7ab8da9d237efd892207bc9401f1d30650f66af8d5349fc5b19727756270722d5a8adb0a49b72d0a +S = 0b79ffcdc33e028b1ab894cb751ec792a69e3011b201a76f3b878655bc31efd1c0bf3b98aea2b14f262c19d142e008b98e890ebbf464d3b025764dd2f73c4251b1a + +Msg = 9599788344976779383a7a0812a096943a1f771ee484d586af1a06207478e4c0be9c200d42460fe837e24b266c8852d80d3c53cc52ffb1913fc3261145fc6da575611efd16c026059a2e64f802517ffd1b6b34de10ad2909c65c2155e8d939b8115400c1d793d23955b15f5d1c13c962ff92b4a815cee0e10f8e14e1f6e6cd38 +d = 1654eaa1f6eec7159ee2d36fb24d15d6d33a128f36c52e2437f7d1b5a44ea4fa965c0a26d0066f92c8b82bd136491e929686c8bde61b7c704daab54ed1e1bdf6b77 +Qx = 1f269692c47a55242bb08731ff920f4915bfcecf4d4431a8b487c90d08565272c52ca90c47397f7604bc643982e34d05178e979c2cff7ea1b9eaec18d69ca7382de +Qy = 0750bdd866fba3e92c29599c002ac6f9e2bf39af8521b7b133f70510e9918a94d3c279edec97ab75ecda95e3dd7861af84c543371c055dc74eeeff7061726818327 +k = 1b7519becd00d750459d63a72f13318b6ac61b8c8e7077cf9415c9b4b924f35514c9c28a0fae43d06e31c670a873716156aa7bc744577d62476e038b116576a9e53 +R = 183bddb46c249e868ef231a1ebd85d0773bf8105a092ab7d884d677a1e9b7d6014d6358c09538a99d9dca8f36f163ac1827df420c3f9360cc66900a9737a7f756f3 +S = 0d05ee3e64bac4e56d9d8bd511c8a43941e953cba4e5d83c0553acb87091ff54f3aad4d69d9f15e520a2551cc14f2c86bb45513fef0295e381a7635486bd3917b50 + +Msg = fdde51acfd04eb0ad892ce9d6c0f90eb91ce765cbe3ce9d3f2defe8f691324d26b968b8b90e77706b068585f2a3ee7bf3e910528f7403c5af745a6f9d7ba6c53abd885c3b1be583415b128f4d3f224daf8563476bd9aa61e9c8518c144335f8f879c03696bddbe3ac37a8fbede29861611feaa87e325e2f60278b4893ed57fb0 +d = 1cba5d561bf18656991eba9a1dde8bde547885ea1f0abe7f2837e569ca52f53df5e64e4a547c4f26458b5d9626ed6d702e5ab1dd585cf36a0c84f768fac946cfd4c +Qx = 12857c2244fa04db3b73db4847927db63cce2fa6cb22724466d3e20bc950a9250a15eafd99f236a801e5271e8f90d9e8a97f37c12f7da65bce8a2c93bcd25526205 +Qy = 0f394e37c17d5b8e35b488fa05a607dbc74264965043a1fb60e92edc212296ae72d7d6fe2e3457e67be853664e1da64f57e44bd259076b3bb2b06a2c604fea1be9d +k = 0e790238796fee7b5885dc0784c7041a4cc7ca4ba757d9f7906ad1fcbab5667e3734bc2309a48047442535ff89144b518f730ff55c0c67eeb4c880c2dfd2fb60d69 +R = 1d7ce382295a2a109064ea03f0ad8761dd60eefb9c207a20e3c5551e82ac6d2ee5922b3e9655a65ba6c359dcbf8fa843fbe87239a5c3e3eaecec0407d2fcdb687c2 +S = 161963a6237b8955a8a756d8df5dbd303140bb90143b1da5f07b32f9cb64733dc6316080924733f1e2c81ade9d0be71b5b95b55666026a035a93ab3004d0bc0b19f + +Msg = beb34c997f905c77451ac392f7957a0ab8b23325bd5c63ca31c109ac8f655a1e3094240cb8a99284f8091de2ab9a7db2504d16251980b86be89ec3a3f41162698bab51848880633e0b71a38f8896335853d8e836a2454ecab2acdcc052c8f659be1d703b13ae1b090334ac50ab0137ddb5e8b924c0e3d2e5789daaef2fdd4a1e +d = 0972e7ff25adf8a032535e5b19463cfe306b90803bf27fabc6046ae0807d2312fbab85d1da61b80b2d5d48f4e5886f27fca050b84563aee1926ae6b2564cd756d63 +Qx = 1d7f1e9e610619daa9d2efa563610a371677fe8b58048fdc55a98a49970f6afa6649c516f9c72085ca3722aa595f45f2803402b01c832d28aac63d9941f1a25dfea +Qy = 1571facce3fcfe733a8eef4e8305dfe99103a370f82b3f8d75085414f2592ad44969a2ef8196c8b9809f0eca2f7ddc71c47879e3f37a40b9fecf97992b97af29721 +k = 0517f6e4002479dc89e8cbb55b7c426d128776ca82cf81be8c1da9557178783f40e3d047db7e77867f1af030a51de470ee3128c22e9c2d642d71e4904ab5a76edfa +R = 1c3262a3a3fb74fa5124b71a6c7f7b7e6d56738eabaf7666b372b299b0c99ee8a16be3df88dd955de093fc8c049f76ee83a4138cee41e5fe94755d27a52ee44032f +S = 072fd88bb1684c4ca9531748dfce4c161037fcd6ae5c2803b7117fb60d3db5df7df380591aaf3073a3031306b76f062dcc547ded23f6690293c34a710e7e9a226c3 + +Msg = 543c374af90c34f50ee195006d5f9d8dd986d09ad182fcbefa085567275eee1e742bfe0af3d058675adeb5b9f87f248b00a9fbd2aa779129123a5b983f2f26fc3caf2ea34277550c22fe8c814c739b46972d50232993cddd63a3c99e20f5c5067d9b57e2d5db94317a5a16b5c12b5c4cafbc79cbc2f9940f074bbc7d0dc71e90 +d = 1f0ec8da29295394f2f072672db014861be33bfd9f91349dad5566ff396bea055e53b1d61c8c4e5c9f6e129ed75a49f91cce1d5530ad4e78c2b793a63195eb9f0da +Qx = 09ec1a3761fe3958073b9647f34202c5e8ca2428d056facc4f3fedc7077fa87f1d1eb30cc74f6e3ff3d3f82df2641cea1eb3ff1529e8a3866ae2055aacec0bf68c4 +Qy = 0bed0261b91f664c3ff53e337d8321cb988c3edc03b46754680097e5a8585245d80d0b7045c75a9c5be7f599d3b5eea08d828acb6294ae515a3df57a37f903ef62e +k = 0ac3b6d61ebda99e23301fa198d686a13c0832af594b289c9a55669ce6d62011384769013748b68465527a597ed6858a06a99d50493562b3a7dbcee975ad34657d8 +R = 0cef3f4babe6f9875e5db28c27d6a197d607c3641a90f10c2cc2cb302ba658aa151dc76c507488b99f4b3c8bb404fb5c852f959273f412cbdd5e713c5e3f0e67f94 +S = 0097ed9e005416fc944e26bcc3661a09b35c128fcccdc2742739c8a301a338dd77d9d13571612a3b9524a6164b09fe73643bbc31447ee31ef44a490843e4e7db23f + + +[K-233,SHA-224] + +Msg = f23f784fe136c9fc0d169503d361e9c6148b0f1fbdcae0a97fae1af7033ddef25cb7489c9963cfcb009a8cbfe44a8510a64a073eb1deae4c324ceb9302008c92c69b2dafcc9077fd3cc3c7c119edc3ced36d176ceaa55ac036bf7f07f6fa215e8bb8196e59a5e1c9af4f98b90ab4970885bd7015fa26a09e03c7cf6b4b23d929 +d = 04c1d414696cc3657dd9df73ace56eda2636769ce7082e064c260be45a5 +Qx = 1f228c0a75b057eb07fe7ce8223ed4163148c1fdab61e0f787271f836a9 +Qy = 0cdfa5655d96ffd5ffb6027bfaa04da7b5d8fbdbb6202c8bb79f056ce43 +k = 058f8511089fcd59324469f6736b92693afe26bd4719e198f1f2287dc5f +R = 016bafefb4933ffd00bd1db6d6c4fac8a06375603adc0aa2a5664083ff4 +S = 03bcb84b8f1990cfc7b88f2b8cc817105cd8e150808e7c87b310cdc47e3 + +Msg = 400bcb297552bb37f2f8135a9314a35f5126788bb6fa4dc74152731ff64c5dab4b902103d85443dec20e16b1d6629930cdc2bd183d4099f0e96295a63c2fe266f5e9d050c401a8681b4a438efe53cbd8f2f43e2a31e9f88926a9c82917d873f6e8cd5ff5eb8c1ca36126b0bfc8c2b0e85a7c9e7a45f1875ca9c82019ebedb729 +d = 027cb1d84865a16992476c9e353283d5d6a40c349a8e9179d1b1f403531 +Qx = 1191227d064176f4ab020faea61330df5eb59163ecb4ea59c23e6f1f6c8 +Qy = 12dbfbf85b3624b9f56446f840602f9b839bab1368295b3ae919cb07c07 +k = 01a41af270269be052a62a9879638e3432a1479b05776ce61f45c0c361b +R = 041a5f1d28b70bfa2925b9428ab8bac9fa174d88ae27d754824c7d16ead +S = 044d359065672b3d3dfe8389fbc6fc751ca6a46820626c466174fb9b922 + +Msg = 5f74d4b35c49fa454c97c05fdb6b9f6822cf1a2295f15bd766dbcb413d77c910bd8f4147e8f317fac2300fa21cb80134d1b6f8ae8e50518c1f648a28506e419f5a6e8f05abffdb3dd2587606c7e9c223ecff4f46b121216730ea13202b59128a7616bb2fd23a7e4a5aa08641cc07b669641313febfc88d64d99447353dae3f06 +d = 031b443f46c4b5224237fac1022ee1570173f664aba0c84dbaa4246bdc1 +Qx = 05f57b0e5f2e175006f4058cbb4ca9a0cac912c551ef1b94e97498fcc5a +Qy = 0f3a554d077b751478f8a2b7c2a9cf15effed958e0ac1a9e3db1e023c5f +k = 07ff6ef3026c5a960e632beeb7313b3bca0baec76cea1fd9b82cedc3245 +R = 0099741698549c32a4e86aab6194527cea703ff869849c538a938585a83 +S = 02ad706c6f5dcff512498d84f1877eb997dfbe9b3d13b339917632d3cb1 + +Msg = 8f92096876d9f81bcd992369d42d0b5877ac969004d17c8627c58d8b8b7bbf7a37e8cb6afa962b9b043bbbaa5bef4a5ee38d8bd31cb5866b828265a2f4102a616f87009cd346fcb8af5519fb577c60d8792472232f33dc615655e53d2b715b15a2697b492f108b7906e1e3597c6911f8cc30c7121ae338a6b747ec368f8e4a36 +d = 048f6ca29f35f253a4962734357c995920967b9eeff1ba5fd2080bfede5 +Qx = 12b7ca7c21292f8795b2fbfd63a28c5a4ec8c850d6240f973c903bc8170 +Qy = 1be9855e5c5a5064c27d1862010b2fd0d7be5a0180c861a288ceac89d6d +k = 07dcb9725323fd7668991ce9a907b7129d53fae9016e253c53d057d195d +R = 0498c4fca6ed7c2998347b464d3e562a74b0e4f3a6c1dc453aaa61bb710 +S = 03a77a13f011404d5c5341dcd2ca44dc2b08f21f09f524045c281fb221e + +Msg = 3d275dbde44494c45fc15fe89e2ae32aa26426a17e923e895c7941a5582fb95df4d49873ab1bde358017f336b911b886b626b744806ab8113418473c441f1964159ded1b12122d53ac56573167588e4b55f36b8bca8c67823883a51fb6e7f204d1c6b07ea49b577bfab9ca6b8d51f72268b022e3a4db6f9d265ee8382f9b7b66 +d = 019b940eabbe682f961d9f3d90432e347fef3910e641656825d775705b1 +Qx = 1efcc9f4576047c43eab1c13e0547b1c5ec1cd2afd2345fda72b5e1b50f +Qy = 0c7b5968af47e58f4ec15c0cd82ccd0b9f5bfde06c7f86fe5cd0105d693 +k = 03f783a94d1de73e4593f5d6d02238cfa0486e3ddf2bc0b95a528038e3c +R = 013c467531f3f6508534ad072edb210e4182ce5a798d8a46674e92a0b4d +S = 0685982aa8e2f3e46ecc03e00e7323f3b891da437235cfe9800139ee8d7 + +Msg = d2fa68e1f7dad02916b12fa38f1849d6d409dbad0344438520b4dd9b77d62d39ac9ae3cdeab03ccbcfd4de703c6e798873671731c108f322b9f2a68145e3e210c9b15b879798e5c53c5022742e9819b99edabb2f44d89ae221f7a99dc84421a6905695ff91928db608f861745f17584d56e34b75c47281435b1b0b34e490692d +d = 07a884b22e29fa9fe945e9ba13c0df8d786dc87cef0f77f069e182dd56c +Qx = 11e831647d0ffd53d75e44abceda753ab470b3cc93b457590617d925a19 +Qy = 03db5bd0aecd6504d904bcf9dcce131abd239aeadb9a64a9811eac823cc +k = 00241b763c6245b83afe61762b161c41467ef35b7f27a9c1066f02babd3 +R = 0514adca3481ac5f99287e6e966a5c223296b07a9456eb582ec5568688c +S = 07ff6a2f7cb1d2594a11d8d0adb6fe50b4e740f025e7b4333ee26163d92 + +Msg = 3830f75cf9df4eb2998c7c1b5fe11c1476bcf849c3a8fa7d3d0b5bc2292e5d07465ab8cc9381c575d909e509c5dac49c78817c04e4bef18bd51bb09aa5897f21634633a5ce6d20bb4638cb6c3927351eaec7b62cf4a33956916045c392f325adafb10a88a5f86d7e41dd77908fa7284210071c22aa40ef40da6339c02da05392 +d = 05da61f881d5a0dc085bb93764f584352882923cd237d878220ec624c1a +Qx = 18d740441eff1f785a14d04da4ba69540cbb469780ffd36e1dfae4f1de2 +Qy = 18072ab30e999ae26b872ef46a9a0604296d02c08fba9477d9e03f0f75d +k = 000f95c5678fd08dda790cc60bfa578118f8687228a2ef5f31e71a6884b +R = 074a6599b8cab75e0cf752e3f41288fbc673d52074950edb14f76524949 +S = 03523804351e3224e816cd4fb7191f332585f68053ddb32a85cc0fadc03 + +Msg = 65b9fe15e6c35d453caa6bad39ee78a720a04b60d8a0a0f049186d2f777e48ae2d657e174df53edb7beb9f7d8f21904ed674add0cda5b62a7308de76c324a144021e8c6d387daaba4ce48bf7dfe9c8aeee2c64e434ece1fa5ddcafcf3e5d0013a1eeec1742a00d384cc2ec0d7eda83bb4dccfb0e57045ebfc27a4f404d03da37 +d = 03fe9f04647f6d82b13ec1ae5a8c2e49bc66b05649ad778eb16149ad83a +Qx = 158eecc6b8918e7813ef990217c603b28ed1774c740382a8af5c9af6133 +Qy = 1bbffeccd41107c7e6f83e24c822d634a7ec064fae125dc8a3ecc4fc9b3 +k = 07731edfb3ef523a165a1b5817ab2805a5cf88043c98ea2393898e19551 +R = 01fa44fa18ebafee6f419fdb9de0e8365520617558b57e9ee89f2c8fc88 +S = 053f1b2da4cabad04fea1111d525f341417587823fce71e5bfd2353c2f1 + +Msg = d26521fd41eb5d46ece6836e188bf9cb1b461d011c41e002a935d256654d01725378e845920ec4a7fd3f379df54772493df50d312c7c6aa4e909e7b83f2442c3a5e85c37d68aa015098ecfb0a5e077370f4576f4bc63bf37e1dee06d780a3b6949af5e21c2a0960fcd20821ef5f17bebf5fd5b3bdda260842cbbfad45667287a +d = 05ebce648ace4cd555413de6a456fc487d14bf4b0b9a72311ef480d2f26 +Qx = 020b46ecbdc36b4dc01111932090ba185eab2cdc4fa89775f2a6177c592 +Qy = 104cac1c800103c79642321a216bcfae497b037b29888cf9f70c507114e +k = 027733120626e564b06ba71c4946c9c8bfae43f88511ec6352d2a52f407 +R = 0592de5184510e6ecb7be8a011f862470b918354a1ad82458cf716137fe +S = 010a9c5fb6e4b70571a35c56744b57baf0108728bea2bf639af1960d1dc + +Msg = b778c021b1a92c41dbd09963da07018075d73e54d62df5c2b7bf8abe137151650d1c1c6abce7eebd8f32e8c3e6d1433773f257bb3ba4a4fb6a02c0db1e47d03c27d3a90898ebd1927c21df24c4c5443ca5b81f8ef2cc0f5e8b3d08f472bf07085df737adaedec63d99acd77b87ba98225f198b791124ac2d9b191cb9251b4b00 +d = 056653c2f85593f789a926ba49fa3da9d7f946d8f1020508c5a527ce813 +Qx = 10d65f6f5415dd86a83bb10118abfc1b1670a1664eb6dae99fb68b85019 +Qy = 12c1e673e575086ec1e76b90d59c2cbd2727f726f88298552b678ba7e60 +k = 021e26c098c9f9da9c782857fe640ff6abb21caf20a093f2277845bd10d +R = 01d67cbc8209494dca1a74cee5d9894f98f03728214f7bbdac29b0c0e78 +S = 02215f758fcf0d8dd603e79658a8061ab45bfe6d854e52ea7074fd5654e + +Msg = ec14e07f615960015a489ef999e308b42a4c571473b9bd64b433dabd9a1b1ad02e33eee9100064405175928a94543a80f440040afa2965b4e5f95f768e7fab6d3c0a5f5e1bf1df7822f78384e80f2955ea85f044ac60537d895747979f935bb0cd3673193c4a32dd7803e48d7daf70a71bc2aa97236615b6411e28fc9a652145 +d = 049a91d320783cc70a5952c32036cfc75d41f1aa84127db2dc759fb291c +Qx = 190528df8fc3ae4db6e12930f176ec9c833d1668ac5808f1046366445a4 +Qy = 1f647d55ce80b18a9add47fd1a8e4aa725297d9da03246f5c1ce503dd56 +k = 01eb80e2596d6c01431e7a4fd9e22903ea85547a31d675ff157a789a137 +R = 04523776d88199ebac2f96f9faa434bd81bde770ad4458ef126fde9198a +S = 054665f31f92f8897482d34fcb63141a7539577037c84496167e9d3389f + +Msg = 89c645339ad0eb850e4e2fe583cee175b35feb02ed7541d7e9aace24cdd3939584f73ad39526de6399c86b36de77a018e2c70b532bd0f032f9137d10480acc30c49f9baaa86f9df0033b77e98b485bf7a69cb5c281e527d3ccd1fce2415f0dda4a268ce68a0a34b16afda54ed922cd6810ac8dc766df2a3a6c5e55972e9786fc +d = 016a20016602fc7088a60469843e1d29ad67e3c3cb9500b1e2a00d4050a +Qx = 04f157541dc3a8bc8a2ad4dfb3933039b67e331b7353a2fa9ede322f4ad +Qy = 1348a7b8c9495bcbecd556870715faf3d543cb8f2368805473bca17b82e +k = 01df1ee39217d7f0d838e8b2d30a1159d8003b06e50a00d637edf08d6d1 +R = 045d16826bbc425637e7a05b826bc907f7453c70141d1bbd2cda63dd490 +S = 01ae1703cf179dfd1d5407ba2b7324cc7cac15235ee9c3756177444e122 + +Msg = ace14c4b101d2d8453c2bc22b756af016b5de537df9c3e639d208ad04ae0bf6232dc90b90c33228dc85de956db771ffde05fb4d0b15e4f218ed2771d703ae5bf981252a5bcd60c16f14483131a481cbe04dc0adb1fb8aa32cb48bb5008e8a8e5c7b7465be2fd7afbc811cf5ea6293b1a464669b49f55f57b93a8707e6042fda6 +d = 00ba922149bada2551b7be1c3df076f3f97ce93c13c50c285fef3f42363 +Qx = 12daff2cfab994b9d1d1ba73bd2f8e7883b2d92f760b0d16351ec125fd4 +Qy = 115666f7c65b95ec2d713c5ab1a3eeaaf0f931b1859733416c3c778aa2a +k = 07fc7c9503fabba0972e0e8892ec6331e0812c6452d211c5561fde79048 +R = 06477ec9d8d8d45418b9efe7ae47c0863ff94c43d8f392c079b870a7cf4 +S = 06b5a5d020b3d980b9d7880130802435ddb4e7362e36a70d193f18a7fe6 + +Msg = cec2ba0d1772c87e87d5bbbd67220692bea4301aa1a66e8dbdd7e651d45c26dc2a0d45cfc32c34d76ae3e1c61db7b0fe1863457b93937d929e6ece7462ebd16adfd708353d6f7c27aafe06593c76da7149b0cc574a4290b0d8fe219f3eada7082aca38dba3f78ed0d5942d095fa5556fc8bcef331ff0a6d5d1f4e6c51d4ff5af +d = 02d635e12a58cc6dea44e71e87c37f91e8d08659f0b7955d24f65ab55ba +Qx = 1dd33d8224ffe63a32f2de5d4fcb0e5f1fca7ca2ade5b35ffbe75cdc658 +Qy = 0bfbe9dfe13f99258c787af82631ce2133dc73207c579b29869c7463943 +k = 04ef333049c575d6688aa04f87a6162185e4a57bb752a7f903e3aff86ff +R = 01ade04af08ea1c1877779fbf6335156b1a1437f3e449f07458d700c67e +S = 010fa82467d39e5ad51cda8fcedc72ee6a78dccd0c90544814e53ba9cb4 + +Msg = ffa13cd0f51ae2643d5d4edecb493ddd653e9faddcffc370e7e958abf726a5d67a2ab36cef42ea8ebe22a6f01b9c31f6ffad01e6894487d979acb5e618f765ac0ec3550ac5dbbcede8f9fdbe52fbaba5c087ff382b6d7a09b2b5084227d324d98ff98793040884799b96d2ca593201f4414f18c43b51c53c5e5059e0641aca02 +d = 0073883e5064e06814fc4de32e15f7a6cf825d2daf6eb1df8c83e25d80a +Qx = 00d3c79d627ee0d2d88f2de2dd082112c20dbc5ed66089454f7b8fd9f81 +Qy = 1a2580e779753bcb023acba1b0852492b989c767f664c7047de8e6689fb +k = 020231e05166271f47a91dd883c580ee313e9a07195ae511f0ee62173ec +R = 0303eb4a0df97577c4cff531b3f54aa282e76669c0c5ebf4c9779c9bb82 +S = 0692432a7dfde09db7743f08130b3d3327dd98cbdc323627603518f70d7 + +[K-233,SHA-256] + +Msg = c73e3dbac9513d0361dabe94071faf03a11cba18c06d131a172d5f0125b01a5eeb6055bf72c7106fe3f4be3bd2b1771cbe7f85366dccfbc3bac20538510c3f51179cc540ddafb2f3b05a0d276899674ab1d7d8fb4f6838f04e4f9e26b8c6af31540f63f4953c85840af4c57dfa78c704f637dfc8dd750fe45e2c1e149986d127 +d = 01532271bfae8d4dfe60f69b88d3006d58e28aacfa701861cde8d624db6 +Qx = 041c1ca965338976b4c45c28b1cb64836b3b4d3e7ba2b1323ea26fbcca2 +Qy = 1a177d042fba7903007db122eabc459e37c2c7fe82e42752b267fafe4b0 +k = 06a54894825644901baf2ec3681ce5aaf93a18757d93ec9cbce7ccd9d65 +R = 03edb77fc7686b520493604db18fc69edb4cad8195a958e27ef289c4bac +S = 004337ecfac57abb9271909aa43ff4e32851df7818dcd87216d051189c0 + +Msg = d00dcd0f3212a3167403abed91c20e76f5e7a7678a4fd970f944d11e6a8cd149d0aa6fd3164c5a74c0f55193a4fa3d8ba6f99cabed10544625a7bd92b3e0b46edbd4a269bbc10518c5268c3910a2aea567ccd32d4c7a0cbef09ea42c20b636d1f711d220e23dacdb9d1146e0494401349749e5ed88e38295232a7effbae3aed6 +d = 0550406c0db882c6aee6cf3b6baf377375208c3e90cc44a067cee43efcf +Qx = 073348eaa8f2885fca3baf31830a2b28bfe983e3046418561f62ac5d247 +Qy = 0033de5aee6d0bd4de286f1de1e80bf72e5e17083032bd4dc24577b6d2d +k = 05c0e7ad0f9bbd522c862326a5734a766423fff7efbe57c51c315fa574c +R = 02103f1a0200883850b6476c7d7e7d2b3e2f60923d028ee6f8227b1ec48 +S = 007cbbc3c6295ceafb3d9cf8411f85a045b11ef8472c5ed45346d26192a + +Msg = 3d36221f87157ca4db84884b8666660c4e2b6af330480c516cded9f3bfe132543626a39bb6aed1964eb5c33ea0b95b9841665417679fceb95d199d55accfce35dd3f2283c1a7ced57d0c4b9ebe3da6e1ff2f979b6440db27caf9f6a4bbfa47e20d29ae304f4d0551fce9cc4097eb2fbedb9b24680bb17d207bdccdbe799d5b0d +d = 0257dc63752920b6854d6c2d1cca68589a38418c3d036e73760a12214ab +Qx = 11a42e9f66ecf030d0446cfb751136347d4df0ee4e031058ebdcc04df80 +Qy = 0fb7161fac8cc5ad7bc4477a39350e419776f76f184e28abce886ae9cc5 +k = 00391d36c4044896ddcd68604d5f677d1df298f46abc00eb12f1165e8a1 +R = 04e19bdc6755a603085b66355256bce98d5fdd49b4f06b628e3e185574a +S = 07697b29ce5546de969c9c4bbb5ea65f712d6cda3410f3dbfa0cd5b1a8c + +Msg = 033d82a42d0eddf58fbe3e91ddff7190e3f9fc2b1e2eede977d2c0473b358b5fce1f981ca6f88fd61ce2f79e453e3a2b77d1baab2b970ed28d5dcff58873a620e195085e61c4b8480d829525a1a944e8a4b63352f0291f0311f1f98ceb262804beec1c74947618f8e3b067866255878c2502966cefcdda4f5fa2b13d92ce7840 +d = 029025352297a7be850f8852411c09259b83219135e0e8949c1bd5b94c1 +Qx = 184345e37f07077cc8df5947c1b1fcd8404b3c31586d6ebd91b240cf42b +Qy = 19dbc9091a5d282fd6e62c34676a06a425e098567b990c47e61ef14d77e +k = 02b2663a449ead3f8cce2459e04cf84333376624d994fd9312401ae57f1 +R = 03af223fd3a6b6b240e59dca83ce2477a577494438ddee3fd09632ea67f +S = 0606576d89f2094572f0bbcb58a15d9a4bf10ae3667d4e35cdd8da32102 + +Msg = 671a7c81b64b2919722d7b258bdbd90165bb757b53106e0af03d0eef27452942f40cf52bc95cc7f6567df2613cce795f8bcfc723b2735efc35375c001d37c58480d89343697146b524835df3dbd333f7c06c98e36d3c4592ecd1f34ab57c341bb0f4c785f5b8372775f74b4bce60763fad1788e77ea158d735a64861320b36c6 +d = 02dc82d0e69e498528925c0e62a13fda9af8cefd047c10c3ffc2e41da3e +Qx = 0e5463926235ce53a85b489c3c278320ed986003962a5fc7ad4cbab0d9f +Qy = 1453e6edde95670a4653186ebd8246c28a94dd84f5a669bd3293176f1f0 +k = 034a8dfbbdc98bb1d9b175600bffd866306dffadcc4bbb6f24e7f918da5 +R = 03cf1407445cf1a619a280e139242056c23c58979f0b3f0aa7e1fc074e2 +S = 02e55f27593f2c76fafccb71493f14daf50073b35cc85f002528cc6d691 + +Msg = 0ef677f4799298f4aab73b7393598041f56e902ced1726af49657b6601a06186212e3ee8cd4bd33b760dfa2ea3c38884f94358d51dd479f2ccc8b0b352fa4e44fcfdcfbb24919d04e6ee1108527b8e8d60e8d1b467c30c18c5455e5835d483161d3fc26b4a67d6df9e3ddd9331247cb18450188752a1ca219f3396a872cb13d8 +d = 041535fff5d279bcd744b04e643458ce20b81df8a9e01b1181d52bb14e4 +Qx = 021e1227457be78e49db22335139a136ba290d34871f90ab5e6a8db6ac1 +Qy = 0df43b381a4d757864c39ce8d0b64d6a32e9e8be30f92a10a252d46a2e2 +k = 03019bd459b34133dc7331caa8976bee67f76db3a45b1793cb545e26c68 +R = 0025611bd4e3473aaea85228b2bf37eb1b4458d8166012aa098d9c1cab8 +S = 07acd38506e984fb7f1607b50837018f9b4246623dcfc9d7aceb486e76d + +Msg = 9290df0cc50c3cab6655f3a6de1f4cf613d9bc06ea7c99f38038369ff2fadefa57a3c7ae7940c1b98bb1d03503cc271f7a891bf38eec93c31dcec7892dfd2e1ab337bedde3e5325ed8d9cb7fa3096f6fafc3beb3a66cba66ba826d1032debfb4908cc9dded8c0099c85072daac4373fbc428fcaa9a6da02181ebc33f0cf926fb +d = 000ecfe580a624df66c25e87e7689fc3b471d205970ff9ab51a64aa12ed +Qx = 02ca7b9c98bb8106ae14a87d5f9f7ae1f99a5524992116e68af89da6daa +Qy = 0a2fbee769eec313cf3c8519d3f96167477f0f06dcc470408e3f637b6c2 +k = 044f065c49bb7ff0772d628104bc2e222f1fde42aaa8b9345d324d7f936 +R = 046301f3f07922d338d5b7d82104597fc50941e4bc0a15ab5e0408f9fa1 +S = 03495e335905b4842b97f00b344313ca7d6a4ff60cfeaa5d589e0a31782 + +Msg = 855c7be75fda372f062709827f333630acf28954a62a5193ff675f0dfeb63f32bca418f7cbdb346bf388d62315b19a592267ca407120db93d4e3d7125b867c4c4670b7a57a76f61734cead2caf2425eb9ff0a63293e8cd6defc9648257b401463f4533a2425e0024f1ea93365eeee3c6da20d25928602ec8b426f9b39f97f3fe +d = 013c72c73358ffa168423149ecdd897f0a5f75a641de008649f00134944 +Qx = 1c70e1b6c01477f95e718f193e13c093b101e9f16024082ac699ed6ebb6 +Qy = 1f8013a88264266cb5cc5bd38e477fe0a1aa49ae4a5ff94cb58439a7c1b +k = 07ad8a117f34bf2fcf7d689b8124e08118e28ebd172f8c220d57d3f0b88 +R = 012bc7d380192f2efe55625e39927ef799993af9451c662b562a239dfe7 +S = 035961b27e88d6731220f70e96d555f63853d14149df7bf6d24fc29441d + +Msg = 9c896f800281812ed57d31623d563377a5c725cec84313472b90e73f77d400f5d4fb236255741b73d46f7e5254d04099bec274db8a9af5fc7cc220d42cc172cbd3c3595c49ff74bfaab7b5e46c90855b611f74753ccdbbabf92e011d52e9ba753b83ed2a251a632e1bd5c6d346e38e743950c8ce0f394a837028575fa44bcc26 +d = 00ac60e2e70b7c4cda64071c7738f68773c94df9456a8ec3bbb468fa7f8 +Qx = 00109614a2ca27b7a749e53777e0f3ee2f57013ee83ea539ada6d98d8a9 +Qy = 05668f4b27213a8a024455b398de2cd7635cb620d7401f5deb4fa9ab2f4 +k = 00098489f0966e27555268a94378b7b8685ac610fb0964694aae9aa716d +R = 06d151437a0aac232a472af038b0fac095d224ce0e5487510e30c31d605 +S = 0563dbfd021c1b77f980530d0120e93c9ee4f1f092a268bd8aba7d3110e + +Msg = 139a14ead998d1a962fa47c47ef2953aa136bd912fe940709b8c560bc2a0c4bf8f3aab30a8e21b7d5f487d30b0097e3da723f11b5cb4e8c5724f5a2fe0d68ee4bacbb85e5eacf18094d2a8ec4506cf8497836a4a905059a998ea750adc54c27c69cbd0b0c1f9743a62f3d988f3fa0a9865a73fc071f526623085a2ef12838888 +d = 060bf720052e8b9508a801340c213cf53bbecf4975faee63d4b44fc647a +Qx = 196e37671def44b35c9e8c719130389b40c7ebc0ed5ae354dc73e0c40c7 +Qy = 0d3fa0a45a3cc5dfb61085290f6d18d710ad5d0d3ab31ce65b0e6915a72 +k = 0729c7e1de10e92634857a65a2ed75103df6bd4bf63b1ad6383c37a0435 +R = 06808491ffebf088476de7daf541bca3fd943d4c2089b848a130abdc0d3 +S = 02c0dcfff06a07e928c15a1fc2aceaa4b4dd6fe8eb67ccd4d01240f249f + +Msg = cf4a8e754b23d0fffc1c5c80b0cb11deeaba3064b315bc2cee96db5b9881baf90d30af4b69066f757b3020706def77a5fc1632d96bafba22a9c8cd3b52d535d941b3c7cc02b7fe6b51639d5e2084478ab3a29d2f5e0e16639fc2833a47b58e2c3fb5b2ea1830fe2ff68e571a8f281617a23d9a28db1c64ddfb1083d055030e5a +d = 07cf3c216592febd8630a478b5b3e3a605084020322adb13ac0a626bc7b +Qx = 08eee2ea13a08d4e4d71ecd2547f6d80b8f88879c9edfab5a675831fef2 +Qy = 05117c0d8a0442ad7b95cac1a984dfb9efbb7eb3c3866955da60e6cea8a +k = 038de0be25c23cbde9ed9fb259cd9a06b69bf15dafed723970dfcb91307 +R = 051c9c5fe50eb81a11c8e7b2db145c6b5dbff2c51def56f4981774c357c +S = 053887c6cc2f21bff461c9182c17f634ee2b301c3cc4af0bb1d3075f74e + +Msg = ae64030d4af9b36c8d3a6af0aff34e5ab201df04274691fb420b7d5c40c401ed7f3ade96065d34f2490d17943e27156e7bed83cd7222d0d5a73d167855fbe7ff6c3ed87f20986ad8bbbd80fed5f9705c6c783b423f641d40ff1f367f9648af5a79ea3cea0236997558bd9dcb011ea4dc64d61ea1e1f85b4f696ed586bc7705be +d = 061eda5999e5a9ed4485d2a0ac5510549b76ca37df858ea5d95aeed571b +Qx = 1642d56359cc0a5f261fdc405030d45b0d6f9c08a182d354bf2687dd9d5 +Qy = 11bf0dcbf62749a99e4b02b284aa7a6479b59b363d25319a5315423a589 +k = 03094fac5381a1b31e53f43a537d9e22ebe6bd2c149f2f69d792bd56f53 +R = 053c8c4f9a30e0500e01100bb97c00ce98f5cc6578686daa1bdbd679373 +S = 047086a88ea014f06d6345608bd0a6010e650b9f6f984b6efea9a4fb277 + +Msg = 94a9d9cd9efa3e4ccf2a37f904dd9cab5624ec9393cf8816ea591c5e70cccd2f105388ae133708fb974998ae61d218c71785f9eb808d1c28d953cc7eed00dd9854b6b4568c5ed5ee3df3b58a1e04c64f1c87fee4365ec9aa41b08a6bae234dc43a0bf2f61420acdb891a40f17f246972afee75a4c0b249dee0fc8f9b9c8a243d +d = 07e7e73171e4d2f2989dc024757c186485435b82544a448f5cfca05f281 +Qx = 181c8cf579d9259020461184979757b097d5a94245a2b9a1f8a6931ee0a +Qy = 14baf1b761a0af3dd9c0521c6489f9a778da824283c94087698daa7cf78 +k = 02b57fabe6b866fd25ad8802c6b02b680c137ea9b623457b35a24d5a5f3 +R = 07421dbfa83859354345b9c3f1ce6242605094d924a4d38c7bd952e3910 +S = 05ee48a3a5119bb3433b53a625101492216421ce67fc04dacf947ec600e + +Msg = 4db998df7b90678b8aa4ec6233c9b4629800ad1f3e2cf8f7afcac62fc6982dcb290e44587015eca8dfe77dbb4a80f9bffe75b11e961e70deed14555db6dae47d49e73004f000eb8677c18f7e8234bf0a5a104266167a05ef07152e7acc2f0368b37efe69c0c2feb51eedf7338cf9ed398f066cf1f66bacd89ab9376d41da35a2 +d = 05f7270764a0444c7159d2db867930fdb0fb9fa6b8fc80ca02e11753095 +Qx = 06806c7164a09e11629e16608b7312d9d988acefa626fe8e34e03203d11 +Qy = 19c4200c9522618dab8a16e217beb3011599ed6cc09291fe9d451f0cf02 +k = 04a8958c80481a18c6e0893da9ab2d48fa6ae30a0f1d0512196e658eba0 +R = 01d301da51eccd15e09ce0bc2d0bdcb215a43ed13792084e2969260d46f +S = 031f96a2f322d27d0bef23ba7c457fdc45a6e612f7d13e9277d36c8def3 + +Msg = dbf9b8a4ae316bd2df0c80db1cb5d7038364a2634925ff957d7c03511b57d486274b2ecf191746827c325a14dc94daacd66ad86d369e3f598f176c4f0eadec7e9edd13e34043efbe0a801b75b8186b4a6d89ceae4fb250ab570d65b6dd7c04382738fe3f6f6c867a7d84b35b20720cb0036a5d81a87126f236833831d9ff00b1 +d = 0179b924afa4acf30ecbe2b3c12de533a1f9675687876a7e5e5ddc8e03b +Qx = 175bf95ac8e768727d3b4a74c2b8a04b221247a3b8386ddf35fc39976ad +Qy = 122f32f941066150c151b9db92b86f86a10cab0828a77e4f0d5c4026540 +k = 0210c75a63699b424585f65497c6e46988c28eff3e0977e3ade599581dc +R = 06087e46c0677e3ca64a0cf030236583935d0dc03c896685dc6e446d9e2 +S = 0252e42b8f03b085f38c6849bd420837d985c9fe14750a654b584c4cc5d + +[K-233,SHA-384] + +Msg = 986d9e5d636526f4deb7545c037fe81b09c74496ddb8e42e61650c74b6fe348593f0cf8f8eca5e839baf62f17bf6ad96ec0c71dc44fdf11259dbfe7499157e402f6bd5076972354150723afb632799a990c44cd0a4fa9609ec4db133e3b4700be3ea4a338e8ba1873d345e80163ed60d0de274d7617a8382980bc2138b0a2a01 +d = 02c9eb4d392d7f2eef606e1861183acb1fc753d666225f0f154d9eda147 +Qx = 0d58fd7b5aa570b1c4b2190ec413fbcc9ef44d33ef191b6e23abcb38690 +Qy = 173e85377bdd8dac58222cd1d0f7ed98d73d6fb6c2eaf34819b08ececa9 +k = 064f9fb13784c99185f334700ccfcc4ff60b7f4d613c3de6dc5d1b8dd5a +R = 03bff54e3610ade656bbe002867168db1b521c49225eb9662950b01955c +S = 01da3fd8c08d8e17692059c669da3c7c4c146df6d3cbeaf34598d28eaae + +Msg = 68d0be2883598bfb1433886aff118349157708690380c42b8919859d96db069c7fde6e117a3669f2cff94a0f1b66b27b09e3f1b24d26299e11552a084be428446f3174da2e0414655bdceb38e58fcb065b6661190862db39c6545dead34a03584632e988d0459659dc7c7c78d4d00fc2aa10465cf24b2410f14e2a62173c9962 +d = 024661c89b77b2c743cc175a6130904461138ddc4ef771ffb9fc2c8679a +Qx = 090383de7ca48f1e71a43845565a9f0c53d2c9f8c2e0f6c4ec7eb6437fc +Qy = 1676582272e7ebc9fd56e1010a570d744ae4fa70eed3e6eeaeb0e0eda7c +k = 05cc5b36c7300a1cc3f624e9e663861b4e296f7e7a27e8f8f0a2d54eecd +R = 039c6f5b484411c434ee161ebeda7aa21b7bb26bde0301d9ff92921337e +S = 02aaae737aedecfd5d53af56ef154ac6430a45ff03a3495a34a5fe0e97e + +Msg = f0ba0407485fecd7337f4b22236533a926cc744a5f06dd08276750196f1bf7ea7984278f789f92dd07e36895a8bfe297ea43d4a1177c0368900e3b969d3083cbe626f0e27e7ab38e185c923dff46d9ba187b2acb9cf4b23ec8eedbb8044b96b5263d956e50cd6240c66d5d96517130c743752404ed09473f05d0004dc5971ff5 +d = 0065e20e5ce534576d7c17616cd4ede3bf4f500894850723bcc9f895f4b +Qx = 01413f6dd5349e94311f1d25e400b69c0f0ea446294eba4bbeb10278b85 +Qy = 066a05055d856621161d4f0e33dac82e5c0cd91ed8aa56e9abba9ec80cb +k = 07377147b59dba008ed0e6b366e511f94c7f7c9088615c6d46f46736b97 +R = 05515a6bdfde3b4b78489194d39f4bb439f58a6b3c3f9e16c8a71590b14 +S = 00778f79083d11efc8ff959f607c4cee7cc8f38b855028ea248fe291adc + +Msg = 3827276694e413c886129c452c9a66e7d09dee84f5f09bf34e4baa308b4627e096c7d45cf6ef45ba1d9a4019a60399feec10fa80e333e2aff1251c85ca48574d9b9e1affb9666828dff5afcef3edaf5e8cae823505a0c73afe76c1bf130399fb06b092ba34ab0ae15ac6c682f9ee8479b065ce75b57213b8aae0f55e4e386de5 +d = 014c85f66fbbd653f1e4e590cffe62c343ba6062df4b271fbd02e5d42f7 +Qx = 18930b4a59a1c0e92febe650347c49e29a4e83cb8c507e30ad835dbc94b +Qy = 0a237bcd130235e34b4439293f15e7a3913d659089e38e5619fa52e3c0c +k = 03c1f8d076fb4fbea91a97800607b2db3fb5a45149c0d30dce79f07e963 +R = 04b9d2c66d8cc55b64f3f62dc629ce8e50ae0bad8a4d14e8b6567fc87e4 +S = 00b9dfdbeecb061a455dd052258f3828d4b7174af972c65bd0043a9776f + +Msg = d1afb8965b48d66b9acb1ece674d9548f83395275f2d8135554cfcc7ceb96450d850dd874529433883709483d0743798db5e0dee955a4f30ba328c7934b8dd9207f3c336cf89141a175ebe23d2faed629eb4236a8aea8300604c3eb7704512f240fda66acedf1494a85058dc6a31bf9531958c332b93cfe5545046876c6b99e0 +d = 030ac7a78593b570b29f6d3d267abb6ba7e5870ee1c8ee4f1ab2f141051 +Qx = 0a409e90eb4314f95967607ea3de9817a0fdb439cf406135262624e7fac +Qy = 04b1dd719434e8dfa5861887736f32ecd635878ed4b9e290c423da09059 +k = 027c4987ff872fe499039b4432dc889960ea8e3f07be42e36a5827b3964 +R = 06829b5e02b5849689d152ceacdddbfa8f68d782b3ae8da23ea48b1acbd +S = 03dba0d2b4400495ee098325ae4450b32b83689349e82a69b799dac2cbc + +Msg = 4f95b71669fdfe5dc46d4b951b085e099de349fc740535175337127910acf24e9a0e4b2f23196ad23880da47b740d77d74fe9bcfdcc44dd7d8d1a181ac290de5cf4da22d5034cda3d8020bcc776dde8cef1786c9ce4d2c2cfb035da61406af745efb7ef1a55f2eccc5000319cf1d6380963025dcea641cfd15a3106751fec286 +d = 06d7516aa040f7d559cae248e485834e8d9bb608279ed4d4f7e1dbcd2b3 +Qx = 127a92888fdac8d4ba9c0243c9aca516bcb431911254bc2cf51883623a1 +Qy = 0606c30fbb9958fb1140643f32c5dd582c2319f71bff197d58ba3e598bb +k = 01104b6ad82327b0445e75cff0efa1281d266a9dfe4019ba2ed22dd6976 +R = 01f247b2850463e362ff8879054d3459b2cbae84b9d4bc005a2ccf4736b +S = 05b3dbdf04758d546e54c43ca5973bd8ceba646a4dd5d17ae5d2f8ec516 + +Msg = 2ad9e17780c824c4f2d1e1cbf19ab85638f2f71cb4fa3518f08085b8b358f54d4f08394a5ac29cbb3cab828c5f07f41eec51e6cd61a5f2cf44dbfa46834370cebdeb328fd3bf681e61011b5c2ebc8945ac7a2a8467606051008b15c89390e111999255bfe28634ce9bc2850a2b55a4af1c4c2f94403c78aba1ebc87386ab7b32 +d = 0137050d7b455f43a8dc2516cfff5a91062c1a2727b27df41488f3dcf18 +Qx = 15ccc90a5f3906469e3ecf7a70c429f5b50fd0ce74065d41f1bd6dccc1f +Qy = 0fe5611b8b1b35a907bc188ad2b1fb7507d1043d148283911af3ad782e9 +k = 04881e879d7c76eb2ee61fe1844567316d7efaef047b96979e6dceb7858 +R = 03799e90bc64cfd7d0246a7fc89a4d8ed0399277cab2af40fa2ec8196d8 +S = 067e8728f4d8398e4e1c25775620865bcc2d4cfe635a1f4c6b7306f6d9f + +Msg = 958773c37d3eba003aa5c489f72118b3022c52b93399e9d8001695664918b86893f4922c7b6e55b1855ed0fd1d8de5dc61af403ad660fec60d7c44bd0102c069957ed804d0d416facdc1a95355ef58554606579ef89b1842f1055cfa2ae118abbc485356824cc09dddb77d0671cb3011b33bc86cac526e3f6bb3293c7bdca1ff +d = 001fd447b33a2ee3595b9f885c290d241422afdd74c3dc4981955a7e9ad +Qx = 0e706408803188263cb149428c60de57ac757f0776e5b27a2d5a859f58c +Qy = 153b5e13f17f0178cd90427f7d608a5659b9e03effebc89da65d59698d5 +k = 0339300c00cf7e8c6195ffb71e509613018e6a417782e4f52704026a510 +R = 0227c80e36e3571e1c783358c9ffed237b251332e8ed05a8d3b454c53b5 +S = 0679a32cee8ae001a18d9a9d0ed7e99e5ae67ffcd54de7b48c62e76ac8c + +Msg = 9cb2c496b1bc7f040228571e005e7e936e48e8f469e295edf914f5648701249a20bff6b98b5e862603dd9f12bb71c160aafe9df02e2e383e9b8a9a9d700f4425ce408feabbf754be543f52204c849fed6c9d3e36e03dfbd9e35c18d7bb2295f1c484a66e73440a0a5aece5fe80b9ade9321ef18cde3eb2db15e4b18e788b0441 +d = 06a061e10b4a6e7001d95411cb31bdea9c84670a59ed61b14fbbb05c8e7 +Qx = 00ad2b726b805919cabc90d058c78896d2dd8a78484c1fec5bd5fb0e07b +Qy = 07e048ddb487f667633d6d030338ded21a2ac5f65373ddcfe1e4a3424ae +k = 013b4a86b70f0e4de6efdafd7ecc993f0d6f231b3d743ee5adf82db1515 +R = 0541c2d3b2c6f0655dd415e327f0ef07b03356f8047117c41e704169698 +S = 00300f45026200b8cc84fd564778281bd1d7e03727c242a249d9ad33338 + +Msg = 9a4bc0a029e97742ed3bca207d5912cb568e4403cda106b00247520ea02008b14c041b8c9b976294252da835f4ff27456039d79d90315abcb0b9b6958a22352672e229665457ec79571ca80447c8ff2a86e6af3dabe7427c8bdcae65e3c6746a56079ce2cf8d22235180f46646a21cd9e86032cfad874cb9c67f882fb037a13f +d = 027ec31ca31acb4d2fbacb49fc085f1261b0042cc755cc97f9b199e7a37 +Qx = 1d521f7abc2fd3b0a10732ed641cc1b7fdd7b49cf61909b215220c5253e +Qy = 019e9095c67af1b89ae6c486c4f9889c3f2994743eafe55bd9eafe438d9 +k = 0151aa44fd97be14578d68f87dbb884c960ab59d950c392e607ecae6bac +R = 07be427f46958538004186d52aa50a0f83d184a9d2f4da2974163854eec +S = 029d4ea73ab5b336ed44556f6944e734e531a5c71dc6c929e7253323906 + +Msg = 8d89e22cf802dc68ff22d43c436c79311e705ff6fd845e77c880f399f403e6d5e9e2b35511553c978171189e288cb2200fd95f84ec5ee9865c0eb9190aff6dacf783ef200e82027fa992741876456472bdf27f2bd8ee55db15408c957a120eb64cd24d299818726a73fbb0697eba726a326719765735b37a2dcff0c853c906bd +d = 04c6f4d88e5a4f4f83196f2dda9dcf2a66eaf94d50c851f59bfcea1d876 +Qx = 1e2677c1305f545472e373615d195d1f7a315f592e26fbbf44c42558050 +Qy = 1638140f48bad525625a87d0e537db5500f034e71e60e8a8c48eea04108 +k = 02185d8ec6f35d5c3f965cd00597d93caf45bbe186d4128bf877ec304eb +R = 075199f4d8af090e4666754a7dac0c1599c207735c0f54c9f11e305727c +S = 008cadf59a224f812d64c2f492e7ad4a923f3463b878dffc75eca5f8fb2 + +Msg = aa1bf5a79e5339fb9ef6c2817bd95725551d064bc5064d6586c5a879901adf808dc2ef7c78ec3b434b84569988db58b5e8e9782b1cbc2cc7c9b68e66f32d4ac4ebe7e75b345f654c7b8a5e650acc9f170f75b7aaa3957cce248cc69cf93faf8d72abc6fc1cfa9ae2d18a7b31ce720147e88e84f6563b2197882fe302449ac5ce +d = 01aa169ea84365c22981bb766bfdad27e373440850569957544b0f9332a +Qx = 1f97d91302c70798e2278348e36bbe01587e0031ac3c422141e3d4c1504 +Qy = 0a95108f6b7ff41546c98f4ea4d1b587a3280e49c6cd0d33abdebf9a1e7 +k = 03c9efc0f72d88168c2b1f7fa1c6e275839303c2bddca136dd19ef446c9 +R = 0639d1a1066465b4b2f443cd9677cfe3bf5bb33e3e9b14cab2d37f4a859 +S = 04582792ba78f782f112711ceaf36f5f0774b92a6fcaee327d687658835 + +Msg = 475664d5e22cbe0da0d0289ca9a666a37270dc71c81cffac91f6229fa39315c1d55f7e0a89b6a7a07df7d391dbdf8fb7af63d2da46ecc3b60110dbcd842da97f98d2b67f562b0364ef8e1c589519024177c8ea079794f271f6d35554c0e9d0a39062383c95721b72f4e74eaafb6fbfbda02cb670a7c4c94f67b8ebc6442e84e3 +d = 04a665b92c0c33a3f8b9eb4b0ec061d40b603de36c87096455102ffe57b +Qx = 0f0ac5238553f0cd74e6f34f7f82563cb01138e5c9bac6d5e7b8b7ad4fe +Qy = 1903e9fd8a5a2aa32913b18bddef20667061f919f8d61a5b3c814ba4aab +k = 070ef25950a795b5e22fe4cf5402f49029c5d97cf9f57f0806c0bbb5855 +R = 01248dcf1993ac2eeacd062f853ebb4b2072357e728f0589258399ea95a +S = 069800eb2e2b3a9162196dbaaf67cab4ae123ea817f223acb6e889f6d7b + +Msg = 9e5397d94465390a82a3c07e3ebf21b515776d18b4463aa5810e6b2f96ca61e92d13e034fa853c3fa45411f51f79df6f799a2c6906e6a5b7896a4576a4464f9e0be2b529a43e1f503fb640d79db6b68f3a3a7deac1b5832fbe86673784ff6db1f8438f7dd332cdd1e7ad9df8b6731aad1b6a72bde52e6bc62d80b8da57822c48 +d = 00531540d94823e19ab2b95cbc6e7492e1effcbabce875de6ba96f53aa9 +Qx = 031ba225249916a5380235220b9657162eef43d59ccab507639e19bcd6c +Qy = 062e85d61366a73b62255c741a065708701c8fa024a15401a4cd58640b0 +k = 05375df0a23646e8033ec9e3ad269e7167a663b97b4f52cf18fbb5f50f4 +R = 05bdf7d643ffde5ea191553a9c99eb42fba9a8b6e2013dcc520298d224d +S = 06cdd9e0d58bd4c5cfe66589ed7c7d15331f3e164dff562b6971af1a41d + +Msg = 3cc4c4192f317e52df6f8cefba6d4cd823c942aaee11b9a0ef5de5c2d181073b7085a55805e9554def8dc13eb978e7396044d4f4a14be2c7605998c062095c929b9c23b2b1b2fa73dd19a0c0af44ca4789f9841fa62dee8a5f91b3cc4b3264f5f67334c3f0772b30bd7431c3fbbf1f34318ce1889b6e8a76ce6d42079a451e56 +d = 022a89addd8b85809e87e0aa2c038593ec277054842854de1197833a51c +Qx = 08e760b282d0ae4eeb2fcbbfdec851468fd8e04c4dec71fc2d5d3a98a13 +Qy = 0849a56b9b0b0a1ede6b9f9522685e7ace3baa57f72709aba705814d138 +k = 05515b025d6196ffdc8bf275479d72b29a752eb3e70ebf07d4c4e7bf74d +R = 041902f9b7bc81d3a88066b03e4111ad8ff4d99dd868d5608d1f43eead4 +S = 059adb96af9f404d2f04d89fb39cf38ba5689f47bda749ae9aa1ecb097a + +[K-233,SHA-512] + +Msg = 72cdef5bdf710978e0aa334b86b8ff4a58630da314eabe98b4d611aab56f55c526983d54d19bbbf9ddba30a84b18aa0bae9f9503e9b222f842f084db83aa39625403213ca321cc0d9c8a136c826e6ea4ec108b913dd0a9ce9d5b8c7e3af53c3876e56a2037ebd6d99f037a097111c837647bedfe4c494e4288ed6427c15969e3 +d = 01df252a11ff97b4421b3a2361db94e908e8243cd50d9179f9e03e331f1 +Qx = 129f011fd5fedf3526f0437ae800a110435db907af60e16912d58523202 +Qy = 08026ed86afa7ec80277f322dfc8cf693089968ed9ceb8c95c930415a23 +k = 04fce14bc83be6f862f06680a32e9a51d1a569fdf1d9b10a89eb9fef4bf +R = 04d7b8d19dd9cabc3c2245a9d2c8431c3151eeb6f49676a865e78c26c2f +S = 0373e69da1fe35ce41ff344447fa7ffe6fc71e28dc68244372745739fc2 + +Msg = 8e4eb88c0b2d525b2c58b8e00f32def90e6dd382301de49e0ac053dbc6b61afe926d85193e2c4948f7402a3d7c614cb2c58e060362b0516a1ba4a7425f1b3d09aa20d4c3c8993a387a3248aeec51e6efa8f558dbdcfcaa13ee08413227c8351e3107e9a3e3ac124224aaea91bfe50c11c1c8ae582e718f50bc5d5c06076517d6 +d = 01d7125c299ebd0dbcc050f07de931c7ad0450af590d0a2d0228a66ac5d +Qx = 13ebde8790a113bdde87c11ccdcbc39e354b193d772921b86657f53f74a +Qy = 0aae910b0e22f1a2505f55fef2eae47ab6d47db6e49190a5469b4b6dce5 +k = 0113d1737bee59f9f477f71f77a0ac1aea86aa67002c34a1b31c421cd7c +R = 066f9871da9a22f07c9b2a44fb6c01ac74ba17649cecc33b729afcb488b +S = 037fad90c288510d0cd8e99e5d930f4fe197df779dfd6088da48986c601 + +Msg = 370fdd80f330311dbb3959666001bba61cdacf20f72f78953d946fa6cba02d24b5003f5452d535609e489b9434f192011f99f918defe877d51349870e7e75502f61145f7c261dbd2a0840926d824ebe9be3c5a77a3a84340aea930378367ed3615a47e3f792c7773f83f91ebea718a05fc62e9ed1d78629b2c27ae44fe8f8d4e +d = 021238e66119844b146d40e48341f522f6ac2f9c8a0b33aaf95a3099a41 +Qx = 1dc3ac1ecb670f867337b752cdbf48bed9f32589366f7c6ba7424af1d66 +Qy = 1e3a38ded8148bf45484ab6b77e0beff759812493347e32d2d54a322a2a +k = 03626adf8e70506e74ea27ce740f7eed1c8b37d50415be6a2681c67ad2b +R = 07a9c9056b51f1fe3e7733c6f54ed96662aa7f5a08a961f91fd6d0276df +S = 05e7600e9fda45bb966fbbb5a9404af961058a128824b6d84d9d47ebdbf + +Msg = f86c4433787c3ec3cb1663389ccf53d62f9425274ccef05fd14b1b8fef676208867764eb98d16d006ee6ebdc27b8d9a8ddd303d941fdd82b630694cdc698bbe6bd524411907834286c94b24ee199fe6d646064277f244b7df3ea2d9d52a9dc6a33d7c8d6dbc919da0fa987a67621ef0829e48310e0ea2bb86fedcf4effc0b94b +d = 015e1bdfdacd87c42ed439f3e243abf27fd42e54f3ebdfb47f60dbae5fe +Qx = 0fb7fa51c1a96baab65fc85c3b769ac84ca7b63a1fe9f507a2ee0c49395 +Qy = 05d450aed449f8f1aeaa9df0131f696c2bcd4528808d2f52b6a73f72811 +k = 070ca3f5dc30c70e576e2d2b30935b05b6e68598eeaafa1bfcb9e156e05 +R = 07e3cdc4207456773aa52b44156801b316a7ac850b3a9e717a9ae7fcdb0 +S = 07ad6de3ba8730ac887f045cae80fe2fb5237a8594e7125c4792d478594 + +Msg = 4117d593aa92e3eae1124ec7482737cd3573fe5f0f2a5051a7ce86946a2abb9e47a0c6ea75b262689b0b486476d2ab09a20efc2fb921419b1811b51a2e15891ae9e45a17ab4b96c665c6c423fc00e2d66df5804a164f0f3c958df6f25d7da6829b1fe162a0a8cf130858c83f3555d6ad627db70cb41303cc6380f7b3fed2563e +d = 00e09410548c17bbbf28a68c3963a52d39743a4f1ac28e6dfe7a6ede281 +Qx = 1f5f36a21a3b7fc5ea37528566da695922d7d9b7e6800af9c1a00f68242 +Qy = 03df4e2ba0c8648cb1fa19663f31786b850e6b80068b8c007f41de08608 +k = 03c0a2a4bea270eaf66adfb297c0e3213254cd87b11edcd90cfcd6f3104 +R = 07b684e337d6778f84bdb7a6835e91877b41d6af4b76311258fbb8339d8 +S = 064a0c22057a858b153ecdf4d275cf5523dacafdfcb46423b5613c85691 + +Msg = 882ecaff3ec8f4023df5397167f238869f78a5c499be19aea85c7486e73f66f0e08e71cf85f3f1b6f6a70796bf46a18e6b555a0a87c2088640ca73051b3dd59ebfef922be0372208fce602d8001681297b285701dbbe24ccb42541b5db4aac1a1c7f407e11c83db15b38cdbc25e930fdc6558f64d9503e214571a435d890169b +d = 049f5bea6e72d98579b78cb07d89f64503f8759dd7a73cd73713c120428 +Qx = 0974dcd68cd85117f363812a0473e972c89551e31c74c8d99f1073eaafc +Qy = 0f306c9051cf3b84803307beb3dc0d34a9758a4f535100e846462a49053 +k = 022a5564b468e706762e3ff934aa22d9aea0bf2b116b61182c9f7be19fe +R = 02e050afb84e1b0591fb64d46dd7d4a939552d68bdb4213f16c5d7ec5ec +S = 063225df0057d5368b2e103eb2181ff5760e6b2a9c13c83da042722c3e4 + +Msg = 99b3b8f876f8359bd6369ce84f9261581c52d744b90261a1427ab9e447e6d833b6b3e89af8dc770f1dd55692d01c8bbc4277a729fddfa7cbdb2ec99133201dde44ac691a77904ca816feb0a1aaacbb9fba85048bc63d73506eb908ecd697caf582747051a3a38ac8930c9a4365f407ed94ca7f2d26913c53f4c010c7ed9d7ca4 +d = 005eaa818690d1ca4838f0bc667be5721d178c3869884260fb230277c3b +Qx = 1f7b3b50167cb2ff7482240bade95f2850a02805742e6e29eabf7f9ad34 +Qy = 0f8038a8cffa0f798a01e333251996662bc3c0ee56d94c392269b63edb7 +k = 064d518f7b8c87325d8edfd42a52793d87ef8db283606dd676be8584562 +R = 07128123004a515e277dd5b571e31bbc877cc966e27ed5b2ab2c16e881b +S = 051d70485148996ec30f92097e4a12b5edf804e03e312072336bd912268 + +Msg = 8c1a83023930a85c5b2f9930521b8b8963d5523a3323d87f862a17d3505ccee01246ee1029b8b8c2b608772c4096d1e914cb398f027d91184a8e94e4feeae121eabb504a2a35c8bc9294edd15ddd979946c14c792ad787dc2d4deffa284830fc90b3f8c0ced6a99fc6de7c41b9ed261402a6b3d702ff86a9392731ecc37430c0 +d = 0603d89cd2f741d734587e77554fe6bbb1e5739d5ff73084d4de8ed69c4 +Qx = 122f2b7802917e4164ac2f54033621c78cbc7040217e5ded6b9217f95bb +Qy = 1f867df743e73806957066c2ab45c04bf1af158e146a9d1eda9e974e0d4 +k = 076850b8ca9e454bdb320da624c0dc63e14ad279185e4f8c9e49905666c +R = 04bc63bafd5bad022fe5db246680a0a0ccd0b50ff50482d3849c92eec7e +S = 07b6d8a8446ddfc64392af0aa1763d45877023c0be9ec78db47efd3c366 + +Msg = f3c9dedd7115339dd3ede7d8d06a44de66bf80b4888ab7bc386cd40a92789042440a13d2cc90dbcacca5feeec1e0e3c51724146e2c4904ed6b05c7b4e9b49d7f458ada695c5d2fc36f1193329b87c1268aa38eda9151430aa0bc004e5d2a61b9390accfc699f2efabfec785eb34f52b1beff1e4c5492e922acc348667d2a3986 +d = 07977b3aba53616dac27b4d74930da23966a88ad98f1769674789c0be3d +Qx = 0aa61b4bd2fa9c61914ae306d69d3ade7d6cf621399e5791dda8a054dcd +Qy = 12e8d9274d5593f5074c49ca34a7e2d64f9d9ccdf42df6087134b811762 +k = 03b8ee56bebb59207e107bb0c16938cab707e425f38b70f0bc918fc1b8a +R = 068502a3e5e51f5481aad31eb6614152f4957eef1becfe3a297b023a94c +S = 07b6b43be63aa79c10876179703b69caf9b03c5401b999a3c5be4737999 + +Msg = d878c4ee0bd6c84652d7f9e68df7b90cc78776d8d1b60f3e4d7465032bf401f1527ca7bfd4a3dd916e13e93fadaa5e5f20c9f47d12f8fc922a9a3aaeeeef294c221ca1adf7df85b888faec8002f17ff202da1be837827619904121167bee2d2cd694a263d9a99062cada3399dcbfcb283597a96ebec129c65e0850ec4cb4e2d7 +d = 050cd20e7eabd29008cc977d0a17e1195d79587b8f15ac2447e15daafc0 +Qx = 01ff23ff4ea1f30663b17d8f1c67ea37b8c5df7009d0c0301db483803a4 +Qy = 0ec6bde92921b83d4d84be8a67a23e1718e575101b93d9a800550a20e7d +k = 041ba36d2e810e47c3de583772e9b5908c257b2aec232d855669d4dae2e +R = 079e96ed1dfc4e31774159ef311805b5f8001203cf37a72921efaf5cbe5 +S = 00b8abcd623b17357f65ac365301a8823365ab948ae3f7fc6a4a0b8ab5d + +Msg = ac3c118cc9cbc8eb3b74d8ccc9ecbd81d1996fb25ca43c8a43bffeb244f722b93c9e969241d45d5b81fda0b399f1e3623687190e428dae077e54cad1eff75ec2f7fbb9434bf716833421bc2634885677579c237340f76787b2eb19b446d56c0f2206099b81493349f4db0ecad0e2dbe85dbff7d7070abb3d3b12ef0cec828af4 +d = 02dbb24fcaf9f3cd5d50d209937f0e2d134fa20ee3c9c2f1fff3dfbf302 +Qx = 0a07240c52e385ecf75525201f9810859123bfd8ce04a5e8f4dc4ec88b2 +Qy = 09bd811196ca9ac45b28031b9f65f9a5c4ec497d995f7dec6eb06dd2874 +k = 05785beb1ff70c7bea89b1fa14be09332ef94b09eebcc9fb1150bfe0d55 +R = 05279bb1b1ad8174e88bec4c723d65eda768c1d08d1c64c332a240a284f +S = 015a90383c2c40ddcf721067b3435915a843f9c4708cc133fd1ee53f442 + +Msg = 700313698cdfdcf0044ca07bf9e5f0702ece7cc66e35decb28d5f8cb7e7e5367a95cc1728a90cc9a53a2b5fcd4702028b742538e9b386f5d8b4a2411579ed9553021a95bd00a73f03c4184a6145aaa367e3af76659d677fe7a2e98f9ddf4aa20eb8d1a1db72c3f5590598801be7ebf44255fd7376d89d998b7068bd1296fdc38 +d = 0047142197d3d43fa46545b547968680ec81688589d1ec8d7c7e90eb969 +Qx = 179450d83cd6dd1609830ec78011143eb64d2d1509ed1adfa085a58d786 +Qy = 03ee40673ac564c6b5732868d0f8a57727150a23c484228890d768dae54 +k = 064f8892245a198c9c819152edc168e69dc7b562ef1f54dcc1960cc7db1 +R = 0293f2f989fb6b6e7cf304faf3f63eef61ab89a626cf8152e15f38bf93b +S = 04948643075cea6413b1c88a9bf11aa176611f56d027f2b165d00d46e87 + +Msg = 0374673e1a685bdee55504ce3cd333f70084dd4ae685464a16924eccea34531663fda60229166478b30193459a3113253cd6494dc26154156252dc6e822552c7c04d790eb9f8fcef2ea8dd79e72f881f7f20fff93cd73ad303c0918ec27c6486c4da61f82bcd55422d16650cc68bfd4b0132c1e7075bbf17dad919095860d445 +d = 031352b49ecde5434aac05f898e6ce4337304845d748f114c14319fe97f +Qx = 187ae6bc9167d9c69ce5544ad650055cb9a4e69c1772322d5722e68e7e0 +Qy = 0042187e9d11a921adafc694b5cc8da9226ddad1b65f764274954b17333 +k = 0761189e63fc0c3b5db92b281e5a4bc0d6fdb30bd14f8e69ca85a211bc7 +R = 0453560e6e725a2bfe0383884ba3b3dd0816d8522d9e0762f781f6b6340 +S = 01aaec4bd98c765e4830de6593280779d1222918d4acf08c8fc3d0aa351 + +Msg = 8b237085f135d6e94592f8d855ca397c8c1028236a3b412adefdac888245874f586d06950ee18118f751bfe26f4c31465ec34b578caa44cf1b7109ac4f6eab7f97ff9699b34271df035d3bf58a2ed4bcbf7577cf8e5792b1945ebb9389b680baeb8518c8fdc5540e192aa4fde0eed0d7c82be2e362b286f582d65752c8db7038 +d = 0176f124c24e4420f6e726a6ca25f09dfa0c5a37e5bf879e7bdd36c3b65 +Qx = 098c37cbd44aac5d5c749524b840fd849652349fb3e02cc8f8fd0a23790 +Qy = 151a9a88da407ae41e52b3dad1ea6031c7a36bd834007c0cb1e2c2f2f0f +k = 022e299985cf289f2fbe2b1b270fbf12ba818cd2b506f642e659cd541bf +R = 0686ac0c09f90a077cb446c910e07fdf23e845487d0333efc65b9b84147 +S = 01688b18cb42082bea69f18511b0fd9fa35da83d738763cf13ef92a119b + +Msg = e3a086ec15574f7017b3cd5f5a47ab7a73980f11074333490dfe9f8ad8926f9ea7c82271aaa74e77133b1025b0b22a6900fbb71251bb6549341a23d194e79d03462cdad52ee0d1b6f5d0d14e1136026961fa3467ccf0864bf7ae3fcc3b68cb35df7324bd9bbe58fc8aa9f63c19feedf19d935b71bf5981c74fb2a487f84e453c +d = 0755c48c3dbaf71042c58cb137f3632e3cf9d90b7b9a58fd378feef3d19 +Qx = 0bd9a720553afbfc5349e4a65a21fed0444c30304f7018ec1ff6fc8d1f9 +Qy = 109a1d6b9cc4fbd0e888d0a2b6883fd06a5da347c0d4f7882fd29eabcf0 +k = 04fedf8785c6648798748504b1c9b6a066ab6606bc9a69534f93e908f4f +R = 001e71744a1b683858444da0d270f43b0d5644424f2b38ef48a639685b3 +S = 07ff8199ffe723abacf1947a828e8596dc49ce655319087e4aca6ca34ee + + +[K-283,SHA-224] + +Msg = ef90f85fbda05e693006e4c64e1dac56223becaf0890f73b5274e6e289a5a1de2c141b825c24d595b3fd18ca855b5c1aa60dac6b5356275b11be670692cdbe5f282f93ac7b2e410a96cb9e9f80defcde98f3449f99e192bfd62040421a0ab8f99acb85369f25e5efbf81439efa8a5e1d9cf781355a0f47b037b09fe4086389a0 +d = 1e846c830a8ec04e8572d1a9d2df044ab47352fb346f67403a3bf87243871b164511c53 +Qx = 12e43e20941f2641154bb66a56f2e0428a7ad22d607fb8af658df0b382bedc7d5ae22cc +Qy = 22f226cd65052071066963b112aa302973fe2b5fdd7bb827d13da7634dd2fb9e3852ddb +k = 03a76f87ede2b5d40a0f10e15e90e29198fc3a03943efea39ddf7afc37ed4e18832af8b +R = 1be2c776c707098438fbd0561de578e4b9449f955a25626f2fbea257fc578ffa1bbbb70 +S = 1aeef69983da1a535b10a47e66d890c4413c7a8cd6a2511a1a670a4c573d4808f46e23a + +Msg = a3ebc17c867cc9c7c28797f6364f6574b80c7ec5b2d8e1542a6f5db8568c15032f92cfbceefa3fe4ee654f690b0455ee5d38dd84bb8665ffc1ff8c849bdbc4aa0ddfdbbca4eb37972fcbcee8cecc1aae21ec736ef61781716b60247b7551ec4e552d0b59a53cec5964c67cf7988787cedf769eabcc9cd5243f58034d96f0e43d +d = 101c5ed48231a56ca0ea85eb45de0e395e6df2efd4987a226ae36489dd8b2dfbf7c465c +Qx = 7011260f504d809baefb54af48c890f94fa5984c8bf228baa4b6ea14d46372390d1a8ac +Qy = 2bbfabb680659aa2611435c4058ed773467a41cdda8250f3490e4f491f1bbae452c5c36 +k = 12a3c7f0b3d64614ff97133873d75c7c1406e316e8cf60d22139dba462055baffe6c8f5 +R = 0a9933496d60716a39e1c3f3bf22a7da546eafebef80dc6f25d0c109ecbc430fdb3e80a +S = 0be56197a0098b022a7914c10f40207da58403d6c7d04edaf7efc96de740cd71f67e0de + +Msg = 60269efa4d0ffafbbc655f6f00578eadce7fc0a7eb7db923dca49b6f2bf3e13f7f829cc6133e022c3c92143c075ab9ced0531a91e6e79848194ab98bb852f40c84e7aebe71fb8bc0fd1f97ed5bb6bad6783d8dc048df42738e841d978456e055e1b8a781dfecfce2218701c7af77e7894ccac5bfff360aab0b6136b978bc39c4 +d = 019679dc589440b11f82b3716e5b2a2bd42c3b1c83e88a28e304cf5148877faf760b4de +Qx = 743ae04e4b07d154ca0749a011c97a31ac68d8e1da3491f331136873598896e5320ddcf +Qy = 776c05891c27fd912267ac166bc9acbaecbf80ccdd887aded2d7b8c2a4a5d139833aad3 +k = 099ad7fba5284e406f6cf200a39e398aa0426448c09b95e691f653d6096a63adbd39965 +R = 0285a82340d9a6d96ed9ad0fd0916216fd20edf979df41a55835ef8fafa00d242ef6f11 +S = 0a8548b405c171d2a428507f7adda4944bade7cda6dc580b1d3f94e15d7e10f0a08e008 + +Msg = 59d704d5b1f3a0605f1497f22f71b8f45b26138bc86371f00a4517554e7f6e7fa5d35189fc656ce68bd2cb8510fa3e3c3df815dfdd749b2b6ac997d443f3954c7a927e138b579801ffd035cea90840733e7884ccfe43d8d3a4a26b430673274aae312abe4ac1e1d7c67b73580fedf2d8de46572493c9205ebf0e8b4d75ccc88c +d = 1703c21fb1e09f8947e12fddf166fda6f685221fbd803d75a0ae377a54a1e494e6c5e7b +Qx = 767564e13ae544dab22c3763c5d330a5571e07ff8f2f5ba3fd729379709b1fb184f990c +Qy = 27f9e5efbd1ff6ac53a6174670eb463b12f70a603354e25c577ea292b13b8e5f022ac9c +k = 10d875acb4d0dc211a82e78c0249e74de16768003b53830bf5648cf911fef6a57f8f048 +R = 02af92243b9dadcf21561ce32ca0744810478f8d5be8e0f83d9632ecd8e86ff467268b6 +S = 1f6c50fb3bdea228a6b623be9e2ea2c371dcfeb0e604ef1029b6766c43b193d86c02f27 + +Msg = 12c8fdba3bc5f68e13f7ff8e7bee876fa68a970afc6924314dae0c2482763ced8d4752cec29ea288d350acd8a06c69289ae41ad345a1b88bcccaac903f2bff39015c289a8ad608606bfd65270a7bcdb5fb10c89bbc2d16dcb91fc9735d66103f6b1f3575622cf4d8209290315b033ee1f79968939410f465a2d37add46af2d59 +d = 071de8eb14cbfb88e61b908990ce08b81e624ef4f2cd9cdf3dd7ca9097d5ffed9ae9a71 +Qx = 136d50e1aa8203a0cd2c2d545b81d00b95c6b43b74b1fba3a6402abf756d38087affd49 +Qy = 46bec77240de7bde85ca4345f27c6df341c72a4eccd2cd495e86376c183ccb34f271cd6 +k = 1d80734927505d8d4818b3bdf1aa2e5c557e5f717a5b3fb856ca9a2161bfd74a130ee38 +R = 07894bf10885a698899b118f57e7da22222e3d187a0aabfb99fac0ce0e134b6b44a5f90 +S = 07b4a87592004d6ef8345415064b4b4672db2943c7e6098a9e6d59ee3324847e753703e + +Msg = 26013a3ddf687bb2f37d9700923906f118d5cba5d8ed5113a0e3e84cff00918125108f74f4b243e351aa5d07fa7c6ece29f5700f23e50286447883d2a058c3258a12e4ed8770cabe627ebea7ef6e8c77811ed7d9a19c53287093e39226236587ddbc63b7ad5e7ad9895c64d1d03ee432d45a067afe27d4cca920ae88a7a68db1 +d = 1d156eb15762ed00c4021884adbfc2426e910b18a5bc474268196f4b74e593a8f38702b +Qx = 0a99b45860615d7caab2f4e9bc01196a61f52f95c6c7fef615a4746d48553692d5fcf13 +Qy = 56f81a0088dec1382f8a3a863901d3443c8792cd13ce13a8f63b02d107b66d9d23bc492 +k = 1999524ce9525d85b562fd13634fd9ac50fb76d83b9d72d6976d6fbc47af7e1f354eee7 +R = 067748d49389c9b87a85b518f84f41b18f52569ba531985b8fe5e1f0cf9cffa958da3f0 +S = 00c44a583c704f69160c6258332f3121b022759b163c74c7c96058fa8e3a9928afee948 + +Msg = c4dbf70b9a2165e7279122460d05ceb8e43e03fbe2ae7c314007fe2b1d8567cac727a10fba5cbead0ddb167d387da8e8f3d6bc0ad851cc32885809d07a776fd4a95a979fe3833610af89df0f454d9edfabe12495a118fe83add5eabb2acf54ba7ba7c4be20fc77478c0a0f0726c4e60317422a612a234a7567648603b63f1c12 +d = 17d6eb1219cab8577168be86b61f372b27ca70fb1f1a767947895c185344e966db17aea +Qx = 65d8e43a290a6957230501509b95a208a6c37ddcacd1e882d97c73c38b2a256caef5e8b +Qy = 02169cefa6ce170ce20a0b5463f5bd146224e0813acff304307da88830b0777b86cd3d2 +k = 1519e37a66b4e665b2e3e59b8e836869a886c879aa1ed47901a6c8a8f365efbc67fb410 +R = 1734a8bc9a13f51d921a297bc6b2d38610c20b32b0adfd5efdd01a4db5084f3b0697904 +S = 0f9f00b25a33b166f09e2a819dfda80d87f6a2419a7b4162e435ee02c0fc10a669df6d4 + +Msg = b1d53b6af1face9b59af11c726b0099111d1adb3666209ba46b1744a528ed0f72be5a1b82423153b896384faebef0362343e2a4599803c08b8513708938aa8a498145fca1c63ba41aff06d1a18aa2a045fce7fcd7e5552a2b98d0df97b6876f06a9cf52a7a40fb737996adda97c3cedf7fe421235ac6951060eba9c0377e72a2 +d = 10ede9be6615b3b2a294d67da78127ffbf3a15bdba6f4fd78be7a60415b5d1a097c0cff +Qx = 6418eac385ce94c1982c216ffeb0b26f9c061ccdfd785ded75efc6a329385898331fda3 +Qy = 7d41f9cf1248a37fb8baea7f3545bbca707a903966019ad56e4dc810b6863e243968b48 +k = 134ac4de6ed71106d11fa736960eef2873223aa87b1c5bf5c823de6c78092cba4726ec8 +R = 12a37587ddf224faaf8dab61210310792d4ccef650c98155a227bf468b7f323575115cd +S = 10982c965331cf8529ef6adfe17dc3fde63dc2a557cab451d7c9408a089229e22b73d43 + +Msg = e78f538b1ac21602b00a09e3db243ef4803b447329c94a1476cd91a88ff790da71421b60092c8a6e55327c7982e7655eb1fd6e40fa9b9fd2f10107dfc585994dfc5bc2143d18794a39f7f69ae679b27dd11ed22040d5e93aa83f71783525a4db0c3fd7b43e57dafd0033d5317680df19c2ecaadcb37ef896c61a758a5e455206 +d = 14f237cface123b64e8578ff33f86bfd2a8181b9c81f36b9ca31e2a446f0d91dbbe2249 +Qx = 7aa347c03d8845f1566bbc3fa1d66ecb41ed1dab0a402405d8300591a1f3078f9fa532c +Qy = 63bd10274437c2690ed6df60ea632f3d4faefcc07a72ae8d85c2f999bafd373053265dd +k = 0570bf3b42aa44c11603d94e14b524b8cb1363306196924082ae71021707c3138503031 +R = 10f7f4af1c1e3f9e8e0c95f991c348bce6725f60aa12ee7b398be64728242088a469a58 +S = 17145a39fa4dd237e31a98daf3974138638b9462a31b87ada3eade6bf7f597195eb28b6 + +Msg = 8a6ca8ec436d2c706fcbec6486b5665b21c174edee7ebe108211c388b1219a8224179f7438e0bb7d6e41ac4a67337b52d4cd9a069fe6c88960ae20be29c8060efd7c62cb7a9a37136a250e68f253e7f27755df53ce7c570135641ad49b43507e5483e17b919cedffdc0d4913b1d5e0ca0629876c0a551841a0fc2090d2857cce +d = 08dbecb26587cb2ed7df2404e680fcfa5bf8cf6a58e87a350a1600211b3c844ca86daa5 +Qx = 66610ce348821a77e8a6eb74a675ad9312b2622ad2e1e6d8dcd0be8b27d8384844a7234 +Qy = 014c15776bbd144c0c24bf419237db9401fb7f97a7c4c0ef50a9afd27c3964088f79643 +k = 0204586a9314bc14bef8ccce8b9ca3874572b375d01c6b4a41c743c16502a27e91a9fb4 +R = 0fabfeb17bb8c1a57af7af81d99cfb7b0ecbf4e5e4a6ed483aee4be8ee4c70c2ef23941 +S = 08071e162dfeb068e3cad256c3603e07ae48b35f1bafdb726cf4ce32844e1a2181f23f9 + +Msg = 95bee02b423d2c6e60252da4632f693a2d8f6597b4f9c6e356f670c3a9e4e80063e92facb6421d0325b99dc150464ed2ec1d0bac72a042b35d56d33d2fda686a75d582d4756522218b4ddd25ed45503d90d3d185cba6cf0ac211b22aa4e1318a8316c369186f7130446dafad64f7966f5414f43af37a87127534060a23c6165f +d = 191badec2d28cbbe62c072c6b57eb5d4644d0c0b3283951bb66096cd15edd43a1bbde53 +Qx = 020224b00428031056ed370147c51e68ffc02e7fe269ca15b22310a2974d383c6c83fcc +Qy = 1686568fc4768158e75b4ef0427d8e262cd0638801ab158311749e0f432d5b69a667f0d +k = 03b1b6ca5e627f00176b599b68fe54e1b5a272c323a06b55e4871875c0e729c4c79326a +R = 1ade251b9360a6ca1b48c2fce0768a01193a415bd23956fee1e5c4c5076b3571abae082 +S = 0adff25020af4e2b4908a33ce1d75c793934921267b6c4a0542924300fce40fc0031021 + +Msg = ccd7f7c0e04d1ef9a3c5617d77480bc624beed6582bc28e9e3a369b12144fcd96b735ee41713f4173b64b28c6102d82dcfc7876e06e76fc497d1d238bf6d85bb5feca630bbd0c0f0fa7c0c72e28e9259087698973ac66244bc6e69c04deb22eaeaee7b20da239ab6333576f01349c76f594498620933b8969450ac2bae66db8b +d = 0ff5e3d66eb57fd35ba4472effd6e7a016ca461e39000a7125e99080f6ab6ef4380dd7a +Qx = 19d8c1d9aca39de0e627981d21e35a628c35fd4096aaa86f61625fcd078f0400f615cd5 +Qy = 52ba2854ccd64407f6779c5e259917b251c9e34ec0d95c05488f30802b82cf4b25b5389 +k = 16c9cabed653c57676ee46c8912cbc507b246078834f1667d0708e4c666346299c1fc03 +R = 12ac0ec9501ac91a2b57220e9c00ec6e815399ede94a658c36f9e89bbf1674316d65dc4 +S = 0c9480160c4e9db4e82b4ad26cb79e083e9e2056e68a2ea554aca45802bbb188389bc4f + +Msg = 65e9124a2606c8784c9489add2999f4cbe6186395df20838d653b263a207ec46995d2685b55d1874e7ef05a6a3bb5b60a7be6751ad568cef1bcea2debfc494d1e2ece0dc8028c88f1b2c6e4ee26b639c5e81f6448bd25b73ec4608a8e8cf4e0155c29b6f0a62781493b03bb7384c9808529d5f87da6564ae196a365bd282f46f +d = 1f3591eec4a8a3fe6ae6debe230d238a6b73cf3791cb735add1abee64239bb100f15166 +Qx = 483e7e2b8f7ff95b86008c3042ab83a4b6a48f15ce1cedbaf3b586b56ab606e6f23a4ef +Qy = 287cbc8c609426f1665976e8120afb8de96b43978762ed44bea5aa1418b9af6922c6066 +k = 08165da5f5427b38c447382c8dd0940c3bddf8f048185e6cad260031f7c0a2ffb83027e +R = 09034633dbd735cec6208bb6f4455b295b7d730c9301bbd1c0e9f101399f2b3425a13fd +S = 0204ec149b416ca3467e92194449cf2ca0f41ca1fde79145f3af856085b298149a3253b + +Msg = e793c60fc725fd537d5fd38e9b4fb52e268722ae6bde5a058de8d20db301f5e8d8e1ad85532198835a04b76f27ca3c972be5617a55677cffa8219eb64fe53ced242efe1b889990979227dbaaa15ed39d3b6be8c5a3237ebe12bd96f333d947f80048463d3859e34f865d83faf03894c2243a06cc96788ed952e606c2d8948271 +d = 05af03cdb45961e7ff35fb0146904ddd6c2bfd3cce814073d3aa56eaa9f13b4f7423926 +Qx = 70bf676b9b0db558eeb8bb94a1248bcb599d1e8975ee13cd37dcb78af19307d1b7e57d5 +Qy = 6ed9bf30c627062b99ff9d05ca03441b6194c34364cbe7b73b46ec9716ad8a9970cbc99 +k = 192c7b1fa8f221edecbeaa51447818474dd9fc89e962e8e87400938ef0dff432a6c4b86 +R = 1df1a4f9578e9cae8102aab5eac70eddbabe4ced99b5bab1b1dee59c41b81e392968c14 +S = 0f2b1319335ee497fe3ebf1891a71cded59704365774e1ed9950f79100e70950783bc7c + +Msg = a57682d21cebb48190199e9f57493696eae3a59acd22f64d5ef4729decf6c2615b326817a6bc118bb7234bebfc7276dd998838c009a7348e46431574638dadc48538d6048d572e50d9c5974d2049ebe1837dd857bcd1447b1514b62808a4e7a88162ae1bb08a0f6d3db6f25874c6cd0cd4ca6333f1bd57bd192ef67e4616d182 +d = 1ec9710ada06e6270720692a06d488ae2ba863b905dd2fc323e7ce68dedacb35fc8c7d8 +Qx = 5cda72b5b068f70b3c431def41b8ca1d4381e8c2fdf0821cfc17eceadf5e3eabf7987b7 +Qy = 79ae508354fe31899cda71e01cbc80e5192d24f1f13c954208d2ab8412802407ae3763f +k = 04f7b9372a8fed536396f0b87d4b20494786bdb8db77200c1aac1896486a05d3c940cb5 +R = 072ecde2a8f506f0fef273c8915a9edc29e440d48fc6cefb50e7117492fb4a13e123bed +S = 0010dbd6229d770c468f5d8bd20edd6928bd8824b7fc2b10dc45fbd3242191e7557b984 + +[K-283,SHA-256] + +Msg = f646e7334e191c2bf0056d3bfd23f03ef7f0777b923f962519a8399d311b8f68414c689ca34b96871fae99eb7ea534fcd83e788e56eeef817cbfe33677283c736b99bf6a626f9515291e842bf99f694e4e8aa7c9911c591a87d5f112b3d96b064594e2b368e6d1bf1a1cd343d54916a66da22c26355266aa2884120fffb8b94d +d = 0668de088c6913640fbefbe6d2c44ab26e481802dbf957044a4957c3c5d0a0fde331501 +Qx = 0d3a50cb9d347cfe45d2a313813fec8b928a9b1defca6ff4b89c4787717f275c6b7337f +Qy = 762e47b0669f625c39c74d50e2b46875ef366b7c3b005c16ede69a2fba161faf6b3d0db +k = 0b24bf54795fa02eb9527f21ead5497a6db2bcc7849a16d206239f830df313dfb7a2716 +R = 0852d8b6fe93b0b36af5d99530eed08669eb9a25972fbea59f32dafe88b722bada98ab5 +S = 0e5b08d410f2252f724dfcecaedb37b92a6c09cde646ff6237007f4199068f945ebebe2 + +Msg = a2d7e69ea381d3edfde4664c56c4cb140d01cc4425df757975cedc995b89640dc016ab419b137ff25a6a6d64a309b23890439d2ba157262393cf93d15ca1b1ffd19373ef12367f8898aaf56d5544c2f019a4854f69b3d8d320e03135bb7b675e588a5c3fe4b703938fa0f964916501297cee2fd04af767155c7739419f9dbb7b +d = 0e6af57cf47de1e6f07041eb5e1a413fb7ddd82f8c7f7ce957eb28a118004930bec4dbd +Qx = 21e31c4e4d412a261e40483b9106bbc1b0d7e7414e53d7b9fd84175229c8cefbbf6defc +Qy = 46ff2dc601dd407883af7dc71a6ef4286cd3b1b6ccee4fd861865bff8fb38ad51b63d49 +k = 08f9e2113d0b223c04e678e8ebdd3aab4816681a9ef08b18a38afecc57d79c971421469 +R = 0d2c9113a18bd51008fd327a55c214c9584b6f1b816cf3b95e7346080da2cb07dcef8aa +S = 19167051872759c36ba9eeb5d620cafd3289e8b7660fc847ff385b5143b3aca38780639 + +Msg = 7088f60e9375ec6a42f705f851fc76cc833c4dcbb3352adcce9f59197c1b7121e7aa661c4f8ad9f4ef280af3a2981e90c01291f7d1cf7d3ae2d96b37fe6975e11b7c6c02b8ef044d1470b1a26b9c72e8c4e7b1dd83c8acc9542e2fc7d211b87841dcceea2ab8128d0ff7bb622b60faa4a89ea7008f7d55f8f9de675bc4596fd8 +d = 19f9b63fde8c6aa6177f2a38981505d04f8ac62bcc21007b05615d028cfe851ab9cbbc6 +Qx = 5a3e567b227869f948180547c2713703c90698dc04864140d22b24bdf81b3996829aca5 +Qy = 5b2ba535040afed0bf6f9d850713e54013729bc6dcbaa336ebbfb9c461f7ac61af48001 +k = 051e20545a0a98dc3fec59e4ebdf101c6aa2768f344c1e19424c1eaae4aaf7ffeb5205f +R = 05fb3329f63587e8febcdec49f92de88366a9f75d0b9a0f374dadc6e7a62b833753e990 +S = 12edfabf1ce434c850b58804f1f31f8afb20fbb36ee69b68668e231e4c04fa75e658478 + +Msg = ffd6044ab991849939e8a29184b4d0ac3e07acb63c7e6b886df9e8254073fa800d5910b9fe34fceb547565a2344eed4de394ce2251ed51ec882ee9207eb7340464c742d9d140fa0964f6bcb1efcc2d13919af4f727953de41b20728ab975c1ae0ce784865f23ed1325c68daa95ed5c932893610179be94f13b9a4149f09833b3 +d = 17704c1f436beb52f7ec97192e23e206ec09f9e8986e06bef71467c192bad6f0066b3c2 +Qx = 329294a36ceae2b2c56bb6e21e52ec32af11aca9ab7785be9c2d79652e7960c0cf7a8ae +Qy = 658a89a48fb95cb7028252fa9792d91b989d7cef3fda8ba9c8e4ffaf19269f2a69f0a24 +k = 0aa8d2e210ae40ba1f9f051ad85d37f7cdea43aad890ef802519cc5773e9a0984fe5d6b +R = 1908e3a2740fa04ec0b23c964c4c3cca51c4603e7553461dd02f8319a7ca2ca09d0aef5 +S = 12d7860d7b438df4653fe40fb9e986cb035b1384464e061bc4ee3bb29aec74d16b0a694 + +Msg = c9f81c9ff7d80011fd41f2de97a6c1e6a22cc2da7b2b9e4c50e1354c3e139b44529ac786ce795fc501dcbf11a935d4728a7bba44b4e86b5e5990fed4d3e24fa5ab6f303e1842918f156e00dccebed6897c852207ae5941c630014a41696882066c2b296d39cd8658cb5830eee78e29a00335a99a0ba90722ceca5a2e9a99a2c6 +d = 0c7d1ac8faa689698f5c6325a3b3f35e7730bdbddabd0693f2bfdc5c838bd62f84508d4 +Qx = 095a930071ce56f28a79a66b751283c756c4f2566ebc2a10770ca60cced6914bc9a0d77 +Qy = 46f70021e7a949c7f55b059d4c8e81ee23b13809a35932d83b8398fc8684c5a90f3ec71 +k = 038ae832c25dcd30c1ee3f5fbe84bd8779c876c0641907695aa598132b0e581ea528332 +R = 0eb27c86d3ca86ef53aef0465d257e6b681f891a6357cfbf51260dc6e35a82799de0e97 +S = 0e8207959e8be94e7407543df80d38d9e662106ed68e1456dd1826602c5b73f27ddc901 + +Msg = a60de761eb32490184dc1d29e21fa33889295ca587b994746874c7289eb9c83e9c7bacbb4066c761a06b65ecd78d701bd41f305cd7eb258c630f3febfbb0a367ad16737b146fd793dab23562e8001cd113135b1c981d1ca23eb3be0fe3e24fe3fe1089caf9fd8f4f0d1f90dcc7dbea4a9e2357793b65daf342b8e6d109c6dd10 +d = 1a173d158866db0ec665ee632b5fc397893f6a44ee17c348e7452800aadd8ce676e7fdc +Qx = 6a9369a93e0b5165ac6e692db035495c5cdd6df243d9756098385ad616374ac1e1efee2 +Qy = 32f72a02c36954cd8221126e4eaec02668f454214e4508cf72b6d945e14d9b7c5d404c8 +k = 0200713a78f58c755db4897f9b7e52057a087816a07fc388d66d34ea9e0bcf2f47e182a +R = 11a26ee24610e705a42329f86aaa80d78934b4bbf19314f06eec46067d85c8377e04d91 +S = 077e35add124574e98e0056bbb106cd28ba8c3bc0c47063ceebbbf2684983a2a0061950 + +Msg = 2cd0320cc73120ef13e83c8144b270c9a1f2049a9250ef7ee83ccc7584025140a51e2227a5ebb824deff55b3affcda63ecb1fd3f337c67c08054dc82fdace0c4bb9cef1bea9dd792635f655363d05903cd6b5ed50ee669bcd8157509366cd85aa40d19593265da26e5641590ccf04672a6df52badd4b99964a8643d9687b499d +d = 05523cfacf4ed3b74ebc30f608292e45173001d80cc801f729c5f71fc213b243f041ad5 +Qx = 410751ae7d8bb2295f584ba3d55eda41a80b8520b02bb4e5ca669a1003d6f2829e0a01e +Qy = 5fe16244f76f0c8b24bd3ca3b53c697097e3ab0e2b44962ea534a655d6c7d80b857c21e +k = 0a634f4cef0ba37c9ab211c57fe6574c67933280c91c8b175fa4164755bcde867fe1772 +R = 0b9f6946a578ee38433e98478a4c31b67e838939cbf128f023090c4848471482fd1dec7 +S = 157159e15a2d16da2e913c5ef00833a8e5513ee4e7d6cdc849fd822c59886d0ca3695ec + +Msg = a743d8337bdefc4753f937e869a36439da1f8c75e1278c3f6a4a969d93787dac93293818b1cbef5b8636e1a6cb3acaac1e15dbe0841c8001512b689292f3f4805997ae26ff52f7fe1842512a020c448ed01af2a061f3638689446ed5f6bed9fc70726ce4104bc11142de63873fa7039830223e8f152996388417c48e0c1fa81b +d = 09f6bd008c04b8823ccc3ee7d5aca535c211f35e9d9e7cfaec518b98647fbe6d28283de +Qx = 70019957dac0e9be0fce6abdfc00ca737096ba2d2bea9ba570acab6d73eae2132d7eb06 +Qy = 559545f82741ddd1cbb9dab0cd06454fda8abbd9d1eca752e57ec05498b14e4189f1b9e +k = 0fe407c226fb15bc63d37cc9840a1a1fb0ac4fc2939fbbcb6e1236831379d367669ffd9 +R = 0e96e301bf1193dfdd2815597e016e0a282d6e8f9d1d67a7f7e7d05288594f1ea92584e +S = 07488687f13c3a2b9ae90536db7868f2bde1529ccdc0c84eb85c53ea979228d1fda7c94 + +Msg = 6a7a3ad614a3a09d2dc5a80204815d0c6471057acc0fa73f3cbbf1801902c3e1cba3c1134a79a8ce61994a94a5afa85ae1a44b2cdcf5153f8625713c872da36aba0afcc5c2f26636dc3f60e04c256a5b023e20e2e7a3f7305bd5b3033fcf05368589f19021f8c9096a88679904b657bbe5b9bee67d6e53d176fce1de9e54c64b +d = 150d2812505c82584201e93f6e0cb875d29dc7bd99d9c0f98e0ed20128886e67e1f1071 +Qx = 12c7750172bea15487a05580891aed51bf81548f4b65c51c6c54b990bae8857a20115b0 +Qy = 3db9e7a17dc8b24ff080d80842f0488f17f7d43a40ce6ffad52c65f5a875b4b33efe3fd +k = 0c5c52dfb50b210ae13c2f664d958b2491bfa91ced638f925941234bcc4d66de1eeeb73 +R = 03887a270eeb515a59a7387d8acbb4e72dcdf13f317a6a93ace5cc98d69a79c64a9e7ea +S = 0e922b2d021cd71e213bdb36ce3ebf56a34617d4dcca30fc05f238a1c097e38d7cbcf91 + +Msg = 65bcd77a3ab345cc99b9c1300755288102a6ccf140bc7d1ad25df246ef01fd57a8614b352033b88cc6ffffe5b38b99ecf03baa365ab5529d6751a3c020d0198561969aade09091434d84ffe13b46df043d0a61e20a08e9c32b646771fea1b29e202d40aae1c7079873c3af494ecf6ef5eda855736c9338b4a5c29a086a8266fa +d = 1b3fb9e1ff70f94bc9d7742ea535ca982215af3df381b5ebdf1db40c7c849a7978ceb98 +Qx = 769a897a443c41ae7a8c1e45290ef39c40887ab8f4aa3f9ee8f3096921222ed7de45739 +Qy = 72621bfa30973da61fb6d363d66db25daf818ce79dd3268ac0520fc99ca7917fa3a2360 +k = 03fa84ee38587f9c848b65b07c47551e27f15e7a87ed0ab705c99c8b7a4ee9e86a8e4ea +R = 11b214ebe67eda2bd6e84c33be05c4373d2536e2cccf152e56b1569cc96d261e50910cd +S = 0e100646cbffa016664bb57c1a67108645238573867c0b595c46e6053f844e5482a993a + +Msg = ed1acc360d02ee6c36bbc223d91bc1d2009a3e8f8dfc4c3796cd8555b0d2b46716f4c8058bf34c2d4954e098274ab9c2cbacff46a0578a14e77fe104196cbc6d2753e3bb5422b8b79fd004ac0aa920eea94925c016ece16ed4dea916fd92563ec65692a61b28ee84bef0007120bb1e31bb75b8ecf68406a71af9a18b4edf5320 +d = 147fa46fccf0805d14c1b84ea59bb8b8283d54ca0ceefb29b5585e7141340c55b7232f7 +Qx = 4ace4c65ce07fe5ec22c560bc553bd791434a691c2d865c52b5e38d541ef191ef419067 +Qy = 76250c829de137b6549d22a12f196629d9d34cdd83758e5daf45fae41872c9b15190ce5 +k = 18c4f89cc022236a0da6105f19c6661a8325d36fa285e3ca71c1a4af3dccb016cac186a +R = 0271b421fd572de8a71d1b18ad2325bc0fb58cabaabacc1f015ee6b14bec49762f1f8ce +S = 12e679010ccb143b7de0c3f6c82cf99a961a4f154be6c87abb111cde2d721d864d7a1bf + +Msg = 2debdb95a21d72b69c545988727366a42b819ca6398a82129c5e3772aea93fac0aae9a27b11969ff0ffb9dc0301132ca2452cd863316cf24ae7696422d4dc68e37316161abc146e86f04b72d9a27a350d8545cca245b2be43c33bb822dd813d13e08a718f784845df8a4ef49b02529871ec76bb3fc1ba31089359f2ede73e767 +d = 0fae097ea56b35a517be5480802f450eb832b244558d0cc922cd4a5b40b84d02ef11216 +Qx = 4f6bda2dcb9560174ffa54f13fa5edf17bebd41399a1dce1fe13e82a2b487eddfe25a19 +Qy = 76dd375f2c5f24c342a8e2491271cebf5b97ac666aacecc8d693a85ebd2a93eaccd4059 +k = 05e3a67091b9e10c7fd20fd70d51162e5d78555059802d0c3b133f49b89f37be6a119ad +R = 0ddf93ef8797571af3cc9a66660c569445a2b5384f95a12d680c570694bce49bf2264cf +S = 02f50d68bda006b88798d87c232f5ed1796c841074f063da03a471e0c00f08b10f410b3 + +Msg = e4e0c6c8fc01244abf81e139c961b6a6e2d95de5dff1083e8a48b40e3e5b9ed909152c92b1cf2263179629cdf76ae553b58bb2e9223ce4f9ffb5f170f5f0c5ec97294c34a7529a897e9397f71198cbcd68bb4055cb8cd6b690290761b3b73303f82788379df145358afe28f2997d191d968929b7a4b9a0f6228797dfaa17c613 +d = 026cd72e6ae19b3f4c53493fba1e8082a8df1fb7da6dc111b47a41f713f49b33f618d0c +Qx = 1c411f5e298c9b61023fb26765cf4132cc78ed77c07c3e815fd43032cdf0ae8b8920f96 +Qy = 35647b4c0807b287014043560d70c9b14651cddff4bdf6d44ead5e87720294ff8954406 +k = 10e9bc449e8480474afffd20b8acd6dd08344981c4a6cc789c5338ad7e486c526d6c4fa +R = 0e81594f1064e018aa3504bac75946d77f9e745673043417a47c0c82488e224cc4104d7 +S = 111bf8635b1bc3f6cb7f9b685077b38d67160d143ede2bd8b6ae93327d7f55c5317f00f + +Msg = 04710947b7c90855ba4e59107b919d4a1df22b503c5c4c33b286b6b08e451e6fbef8ba40852f9f0ee62c9217abe6156bed46ad6f0e25f70f528f3a73d099338c578bebd6879d810e6e173c2b0af1f7caacb3531ff0e6a7856e4c84db355d110febdb21c683223eb5990ef2038d462ddb7962bc0feea5f850954943d53041f66a +d = 198e13c7d95bbbb6e226688719639bda988867764ffa9b029018b5547850daecf58fe1f +Qx = 30b511d719217c485866273ffe2996a19e0a670b7a3fb077944a21f63ca2f22fe5a524a +Qy = 3a4d9a808e8d77c9dfcec6d033139fc33e67d7c8dfd7329c895bfb77f565391c37c8d8f +k = 1721f1ad4adf3c32614feb7f8df3374e24f76a32e27854a57dcafcbaaa3082b13e461ce +R = 14b2622432adcfed7c2ecd2b52e43be7f611680ceb4bedbfa9dd9af54532911a07440de +S = 0ece991128b10399188b18933c0d185e85d111ad401baee5ac376b84c523f130f70fee2 + +Msg = c62d07bb1ef756b6b2fad355c66b5be086b6dc387b37cbc4a63c841dba3fce65b09d3de8f239e3649382d172f065b78f8a53e0283cf345de06b4ee0b4b7d8611bfce92a7d993b1938419afe817611bc6df3ef74191e7e39ca2339fcb5b5cfee3166d09cd52a1a7d3779722aec328d326a11bbafb6aa417920225ac453146b9b7 +d = 19098a39956747de24ded56435fa1e6c30cc2b8088fe9a75f5d07b2f5939c7a60db64ad +Qx = 68cf5a2023753717d89d12d6861c8411e6081c3158339573dc5598b1700148d00b39dc5 +Qy = 76a22dcd4ff4f062eeff83a58d2ce6a1808af8733ae254f5157efa8ea35a85cc744692b +k = 142e4907ce239cdaba562d1fa7305bacff05a75e2927800c7b7ea322b47c9ea47846e12 +R = 104620d752b73379e1e5d35e5b24a793d7a309685c00f8bdb97bba9876999ed9c763d0b +S = 059cab3abb0738d8af4ea6dcbfca6d0ef11b6e591ca109b040347d7d4736724953cd9fa + +[K-283,SHA-384] + +Msg = e4d8d49c9bc566261d9134d5e237d9cbd6b67d2619a9bd06b7c9c139e091aa10682cbede114e1d4777d9cd67a16b7d64278e99eed62bbf25ec5a5a8fabcb0a3468b0e73fd02ac6533e04b1110d29da3e34f33eaa228b78341b357a5d892a61beb2168c3bd5e66bffe3f2080a1e246f55a41ebf9d579e188d16991aa060460d6a +d = 1636bd2be121e07ee83ac5e880cfdfca6a56f2b9d0badff003e872348368c7c2cd96b6c +Qx = 007acf46ab68744a9baaa33ebf6be20c1c093242b0056bb9885d93a4a9bb4640f17b2ef +Qy = 15415c1b671e98f00c1fa364bd69cf998c0ae140485159b0a341994a4e27000e108f4fb +k = 0d0d4886c3500bff68455c41f5840d0313f33ac0155a693d27c66fbdb12791c2b5f8552 +R = 0256b8ff7d37fff7dcc8cc4461984a9bd9661643fd3a68d07fd30d426d10b8c7f4dfa34 +S = 1f516f8ed4372780380a798d2da04d691aec379483bc0d10560ca79edaab453d3e77585 + +Msg = 2d1358fdffc14630fbc421b443d3c22ba10ef34f15c6c5bb3c73a9b8714e4c411de69b9cd6628fe2eba5efc4862af66ff916505023e0514f564164b389ea422d0f1beb92adcd65baf43556614eba25e43852ba65af78f62d64b36696519ef8284ef7316ea52c365b99f63a39e6701f81ad520d7445cfc0113c38ecdad4bf5b7a +d = 15e5f555119c19b055b15b0c0d2813068bfc184f864e250b202384f5728bbbda1cb0f5a +Qx = 13cae2f0c3ba04d039c42cae27de4cf5842a3e24be35d7a3cc7f05083f02951cbeaa63b +Qy = 5d69ad5b7d64d6b19772a1794562b1fa5c2fea03909bc509e7d47b0e8144acb3c26fddd +k = 1b881d95b7de9aed9fb5ff0085ca4da2fbd413b9b947066c98aa0257142c9000bbb30e2 +R = 176f9e3c9e9f98b2f5f352ca74310badf9f598f4d42cd2b26e5ea0999ae31e3c678fad2 +S = 1f2dba4e17470cdf7e1815d30771f352807b38080d44465f86044f5969b017c9059daf3 + +Msg = d6336faa5c3e838f4fa58626eb353d4cff9ba8f0aa0e6c3d0d850e8b22f5b0f047afc97767f1afe2040b85d4e401ba688a4da7a0caca7fac450899092c4fea789231ba9b07782010720f45d16d353798867dd7fef4a324520014ad5cb32684ec50cab742b750e05db040ff51140e8d740f6774a059feeb493b10d8ac722f23fa +d = 190c8f17bdd38669e345440d2c7631d67cee9c6548c4e7b9452377adb9303430efeda0e +Qx = 3235a8b7981b3ff376b6b0959a42cb56631fbb9f82f1694b9e273e6b7131e758fa0d370 +Qy = 444e5747420d7f5ffd6119ef43b998d4ea4a58da13ff6fe7f241ccdfd4b6fd33aa93e3d +k = 0b2a690793107257d7bdc37c492eca48c4c9650ba0d657e6eb62042b16169fbe27f8984 +R = 168a83fcc67e0c155f1fa2329363729872e254f2e0c3ef85f3b3c84fa3406de4191b6e8 +S = 18c0f8e6b486e6d7d16b4103506d74bb2021232c0b1638858295a63ca35e0d6d26a6266 + +Msg = 07384a3f650bd270b14ca388a441af201b7767a2d47e9033f50cefd3af8257ecb38f5267e141cbbb2ab7327d8fc78cf27198ca3543d39553e178390bf1b921618432ad895e4f8153783a7ac22f4ca3cad4560e64f1ee4a7bcad05df98ea49a3847dc2143b27c243e48be59c869a547988e2205358e8db98b635ca21b745df4d2 +d = 0dbbc2a0409ca58a9e39e33b95fdd15080443c1dbdb5874bee991bd1b127047f08ec9f3 +Qx = 5a687605e54e49e3c40fc5ee8fc014a62d72e8595280a66ce7d367aac2df4d16b98deb3 +Qy = 30abd03dfc224f459dccd1606287cc30016be317c6207532a0725c957ca5fde692a9c43 +k = 16bc5aa29cea64ce3297172f36fe4ce820c943908c21c9967697db0cd93bb8a12e42348 +R = 1b1fdf26a6eb2d736b8c1ab165af2ac31a4c206c5410f61ac7805a68992dbd62b457708 +S = 14e9a22ce703d942a4fe2e84a4c1c1b44538a33fbfe904bfbb17af6490d372acae4668e + +Msg = 824f26dcb4ce0ca020982814d5c727e629cbeeaa818c49668f8f6d743f0d0ad362b24cbac48027898f386889ca5411d7d1f9afc69493b1d9ae4d7b695c9fa0a30bb59e6be2cbff79231767e96cd8bba349fa2f97955d56f05430ab4ebd007064e3d5add94dfe255b6deff19650883ce9966e1a2affaf84d9540f65c87ab1f936 +d = 05495e6c59ca1873f36b756579632fd47f9fb95b64f52589d70f2739aa6a3bf8cf8c198 +Qx = 6df40d8259be64c8ac64a28359290bd52e843f330a68c2b605ba4f777d7bd7a798e9344 +Qy = 458667cd7021b291c3415d64f9b054db71d3fe20f232f2a2286aede89ddaf1ee8c68aa0 +k = 138f05303ea63bad47c4c9a9d43c52c264725a668db5b631d9892daa1b71f62656cbf73 +R = 05e35c1f3b30b43cc9d60bf8779f3b31e053de0a390da50ea676dc9722a17ef00d68aec +S = 1691ecfb826fef1ea0895242129cc3e9a14e1f84fac49d62ffc0a3455ad9c97becd5980 + +Msg = 07de1e4bb9be15a710a74806d4447b093bc08ed04392d1bd5abb414f5f4b4d9d43520d0e46fc81c2a97e71086b28e53242449ed37fd7ed1c5772dbabc430fcf82ad20437b38eac15820421e51912325c872894452c3f8a10ddb040b35308e583c155c3707b52df467c4945f4e1071126ed46611a3253c297f5cbca9e27f58448 +d = 1724987c9b698519b6c225cf1261b77d0300045e5fd774dcbf13f285e6bd74512cb7edf +Qx = 46adc9bd5f0cc0d8bc64f4ba491eae3b7f6fb4229bf94b804807c6137787adc0fed4b2f +Qy = 41375e2c89da41af84529811ce7aef26b983ea8add6e37c32f2b00bd47f23f25e5fe194 +k = 02ea4ed0e87687a50dc3acc7f4c089040ddd367d1a3f470a711501ccaad63c201b87ea6 +R = 1be198a1b6e91453018513902f0a8a085c76a2798a2a0538ede30dab65afb6b9b0496d7 +S = 16342f87a813780aec006ee218a615c4e1c78c0c759d48d4094639b5b4c32a9658c4d9a + +Msg = 1edbbbe71057bf7d0bfda922be21a3a4dff57b017ebf6fa99651246cd173bdc9b11eefd048ea599c1f98e907932aa04f64ed0a007831f30daf186c88807400970904d6090b2cf181e0f65f03b4234aceeb420867812562e47f452152bb1ddaaa48487170d06e47c5e9a7c0faa4fe494663d2fec22f7665ceffffc214b21c6b8f +d = 1a5489091cfd51a0970508ee3e8449081ed175928ff8386592c83043a7911bbc2f8778b +Qx = 0aa1562c94bd16a3f8a1d6c465908ce3b83ba6711e7d8b0b9353d3c55d13dee213aba70 +Qy = 103a789854f63a139e31348f1b2608f1e71c88b5d42809f2460642ff46a470ad8573543 +k = 18435a6d3bc02b3019e1b156ddd6f3e1bb9c5af70d1a2cd2089e677cbacc21624ec8947 +R = 031f561b668aeeb4df43a3a34716c4e67232f56959104b7237b26e3c95dd40e15eb076b +S = 0f2ddb6e6d18a7393425c16b3e5a5aa232cc48198d63e46a601cd3ed221a8427178a0bb + +Msg = db5cf1de38a5187af11c1f0f19a36db52f8417de997229e83072fb51a3b7152a3b383e9919c1b8427582e53d4e7e25433d46cdf01492021c237ea0a87d38c71634743115a6b2aba66d3faa8003158340a5078171e0bd55a6e5d8c7fb2631a31c1204e1479bbfe79ac70d5e5823af502922a900576f0088a33e42ec3e26c0089e +d = 1a45ecda0788fbd7cb7a716dcf4c6e83d4148bf63ed58078690ebd238c00329c462590a +Qx = 7a1e2fb4e8e79e3946086fa65042362418db0dce51541121c73972a435aecb99f634023 +Qy = 06bb02df9899ac3f207732fa7cdbc36a60c17592af7ce06b8df4255110e26a02b231800 +k = 1c986f88ba3d5109c0afa2c213dda8df462282f024cc8efc758a5342a0de91c40452443 +R = 1efbd9e0d912e170c9c55bfbdfa6106fea4a4e013e7dc26628a1aea4f6b806a51866003 +S = 0b1347f4f85adef612f5c3a436cfa59eaced5c7cfdbb69444936d71812a2ab2461bbb5b + +Msg = 4adaa850eec8272d25d76600aacf2cf66e754f6c5efa65c55a2a31b7bc69437d9a7e47c6f51c5da93895a45221f5f92c2e20ee6a95eed3cc7249688261a35d82872284900eb54dd1df6024ec48963ce43e8ed8b8cca8ed22beee8f0aadeae53726cca05443316537840ab824cd1b595f36064e9a19333748d4f4972178e7f5ae +d = 11461776c33f20b176dc8f2b0cb2446a9b69e55b6c7bc7457a7fb4639116b452b79661a +Qx = 043ba7157559659954ac58b44f19262bef9e3a00829c70af66d07cef08ad899d7f8ec23 +Qy = 1e8dd9c947b5a6decd1a26fc5d0eecc9605d22abda747fca038571bb37036d9034e8061 +k = 18b231de7fc499b461afed9b80f4405bc005011865cdfeb25570b7c0ff79b6ae94b6ce9 +R = 0fb203f47a4e2e9365ce070ee7fd4540f3f7e9ecf69b4400eeded0f5a7bf6e5a5c6d004 +S = 0e635dc65233f27b8350db22b90a3b8611e6fd1b3e0f515e42fe8788b1376079816308e + +Msg = 11d212a99c39fb5e4ca0096bbe6c81ae1490e1b8e07374b4e773bee4fdd24a3c13d653919db663d2c32aa4db140c4ae2d472d4f878946e527ad33b3dc93012d97458f96cb622ddb56f1ce7c2474ad0d5291dc35545de47b7053d137a8e79dabe06757ab53e26eaf751111bd27690e57ffdab5337eb6f81889e9d1b1ac729012f +d = 025a65f627db2b4d6cf83c5b0c00265b9b63f7656c5e3382139e4992bcdf3cab502844a +Qx = 5a35e7e0b914a3e01ce3a885192d2ecd27418e09898631de122db0c48e8b58658720fcc +Qy = 009eab47197d5f56927848855b6ff96db7c36f810ee7c89b305ef780ba8c993d65537ab +k = 18516ceafb61cf2c7e7c511a8918bfe394c7fb2fbc40fb3052e156cd4020fc674684f84 +R = 1892ac13b86ad00e38ce2427c8c78c93b08605a75ca22b3658132dcf9d9df7c4b5540a0 +S = 0437b33615c16a85ccb8c4769ee7c5f94122d31e2b5fe66291b401fd90257ebefe33818 + +Msg = 9e4ec74c09528fdf3153a0f6955f20c70915ff524b2e19c991ec4c5b41ea9185e3e876a02ed6f27c9b3479dba951bee8680c4c99be1a626808114408856994be7444ccbd5ef9859fa479b1050bb836034e20c531b4d618f5843fe1d4b613a731895b489a2363f3f5397d5ff964cf037e9b11e3ff5e1c3d403e5a46b8387c1241 +d = 173b28fc29f10245221a907778708b3ee62e0480aa9051d4c3eb4e8d552e6aad5509943 +Qx = 24bb9bdef975af892ddc1bbd31314926a9c81f8f1864829edafdfe2744e793c100c0483 +Qy = 28ddde61b4361ced9c391c86c28ece9b902c48d14c61684962007dfd69d0468dfd65e7f +k = 199af64f79ebbc5b789d4676a07c224e4f6fd33285e5a555ac90cf65d0b669bc58ced4f +R = 137d746d515b90890a413685bd9b26a1c05efee4c11a4b40bb621c9fa2580c46c20a687 +S = 1647f70ab7c68a0f522420893a466940ccf79067b323d940369f8b8694ccc3fc0daccad + +Msg = 5fe8253d2134c434cb0866796013722e82184638b024a5a30938039929ccd8415c71f71f239c5c5a81f7a9cb493dde209f189bcf766c17c6d9589cd0c7de7f07ff9f24d2320669b589d084f8a8ea71127b9760b7355b162616afb34bcdcd416f1a062035102e29b70069b2b4dbf70179b8d60bc2ee5a455efd40194533bf560a +d = 0624616adcd45e1fdc6cfeab2b17230d73d91fe0b39f4664f3c6891554f9b8e238257f7 +Qx = 10917ef84bd5c0b36c97cb5586d3057a34f2827f239cab2af2e6081c5bdffd48dccb0b2 +Qy = 78ab47fe1bd3e28055c688c78e617ddcf6c5060123e9d65c562df2e94cac973ab3b1807 +k = 0795e229185bc1b3d6d69b08189fdd7a822cd18ac55971e4b35e51838bf12eacbc50e2e +R = 185483378a162b8edd6a12f44e3aa4ff829630fe3a1c9ccc66e34775f69bb6a94282489 +S = 01662cde6cd497be7966a0a77b0626ba3c4b82e20bb3f2e839178a31aaf440aa0e059cd + +Msg = db49891838fe23f0530abd4a4fbba5ea970afa5747f6a0a10d2cf4d841581ea2178705c1203f00cafec91d0a72d25448072c9cf7d7ca5580b39f8589ec63128faa95cb0689574a6bebd515049a1eb9699922cde0366b5cd58aa8f3d3e847706896f7e1cac667fbfe94b2eca9e7be79a810806ca4bf53f219bb30532ca2254c11 +d = 199757ffaa2c59e198d66824eaad37cc42d49b2e241b6a60382d05e425e800eaaf32470 +Qx = 6ad18bdb3e51cc053f56b9f9c35e2d6eaecbc9749f41a9ffbf54634838d7745ca064890 +Qy = 5dd77c42b31aebbbb46277176df08d81919ee0d9ddf14c3e4c0cccb207bf649c48fc8b9 +k = 109d6332ceec5ea211f642a746a6ce055986b4a2feeed7e847904f7f411bf8361318d92 +R = 1a49fe690a34151056d290790a6bfa7b70958e69e9baeb30c55efc61dc5dc4934f2fc95 +S = 1710a4ba5b404d65f66a8fca2751a920224db0cc0266f7b0bc054069ea4cc51b1f017bb + +Msg = 29d385d09c1142a7c181fe4b6e6132e414c15aa8605b44208c0399464613b966edcc2d46cf203a3f85d943d8eae658695dac74366224a0d0348083bec0106f5eb8809ae8d07f792fdd7c48fb1a25d5ef3bb9acd40b20c61c821024a9acb2ede321bd2d0dda849c22d76f421cbd8d51565d3c4266f666455ca1c0c3777aa44107 +d = 06e51381dcf21050aef2e9b97e35303cf3bd91956854ecf9b6b9827871d2efbe8201c5e +Qx = 52fee805d7938b8b97459b9fcb4b80cbe29f20a9aaebc07ac019539a4a966c5ee41751d +Qy = 78aaae02974de6530f285b4bbe87fd5d0c9a2ecfde5fdc9a3303e4b988f673c778004bc +k = 0b426ebda6628125d73efd84e6bbab6c4c8fcf7fa29ffb3c8d6b0a861dbf81cd18d088f +R = 1270045e963b59e4a4f1237c2240a5b26a7ba8e28ea01326fbec00e5d95d40e859d88b3 +S = 1d721477ee1df1388e1b7f92c048e5759c060ce1291098a2fa647974a62a258a189b4cd + +Msg = 774c1cb8fb4f69ecfb5c7857d46415568d88f1f9f05a4bf64a1e1ff6d64aec16e1d09292010d1f067c68dddbcde06ea49be2ad3838053f0b9c0c2383edc451ef0188565118e7b3c66a4fa372b96633dc8a753106283b02d0322df273d58cc9bd061ec219f1e1a9c8ca1400e5e39c1b2c254273377dc98a1a2c44e5c2a5b89167 +d = 018adcc22cb9a2db64bad3d60f1608c353e091637b948914115ebd43679904f955c8732 +Qx = 0630bdd8937e961d5396f9ea5310123a340ba316fbb7d79bf8573f27a0065c6fd6f8890 +Qy = 737a0ac1116e0e2979f973cd705588a71cec5e2a9f22e7e81fc61a4375624f55a6182bc +k = 10a0c04762d02f9d3014bbff287864743426cee14daa43b22149ce73d1ba609c0ba6be6 +R = 0ac29b041a6b95f9ab685470f50445d416df5f7ee06313185794f2b542fcc00606bed69 +S = 00a4241b97b6ccf0dcd533a15867f5889349ec353395d47e31c9eb6b8785736b3e285cf + +[K-283,SHA-512] + +Msg = c406aa4295f85c854b4db2de5a7a2defae53a319866921a3673af5b48c85ef22f6eb4cef892c790d8e64530fc20c729b2821b5f5e515560b1ac764106560c3a6a05657e34cd6deadfe2884bd288cef4ca92e1f25adde7d68a30fb0a1b3678156ced62e466718e68e9d67099ad82613b8d06bdda1a7b867c2455422818ae9eeac +d = 1898276f159c10d92d8d4b6ae214d68c72792a4b5f1f79936ca3c063dc8d9a88be439e2 +Qx = 394cf9bb273923c88be7a1c49412ab8599e0cc5509926102c122326bc0b34243f7d1cf3 +Qy = 72330906f47e8fe95f63d0f0aca1115e77fc702a923c32a16505bcd9021da05fd9cf63b +k = 058772fbb30227a136de616ace4a0334be0996d60e9772ae9bf672b7c38fe3ee1b24f98 +R = 10e0cd3fccd1728e99e2294efd6dd4797b6492ad95a789aab7fbd177475a047f1e5d38f +S = 0c5e0b2d1991718355be14bc57e2d6ff9fa63e0812b9adae69f64da610cc6cbe36fe4c5 + +Msg = cb2809152f8258660933472c06ddcdb65f6d5221fa29d5b0efec9c2a7914dbbf9ce0a468ce146fb333d26f510a87a6bb01bf8816756a1b5df81c5f65360957cae84ba038e37e88777580e91c34e2f5aef4fb55af7b81ad28aeba05e0b1c64a15381a6719fd2c16e38a441516e1b394952d984baf9e051b1dc1bda2e12f8ba5b8 +d = 12ff37c808c3cc029a9cfbb67a5ed21f3bf362b49270d4ed0f1e38fad25ebd79f112a50 +Qx = 0cc00fb36bf62e777a9f6048761e53633b92866158200c43900db95aa1342b576029090 +Qy = 55d7e57221ad939f5639282cbfc203114ee69baab4fdf194f4d2a937d8a57b70b54a907 +k = 163d8eec726d01a1bbb19995777919f68689f7c2920f3549fef966593c4fb012a5c3a1e +R = 0cbf5c3bf1ee58869e1d3c15a05c23217f1c252da97f79334bc79efe3f5c62164669ac9 +S = 1fd51644f471ea497b0560b65fdfa2fd0a6cef469021303f97753d22ce1993d1ae5b96f + +Msg = e060af96d4a7fe512bbf26be9a27bb6a8ff37547d4a7bbbfa710db24cffcfc760dac120f89f642880db2df6307f9ea5441d5932d49762d182b29d8e7fb067a61ab0df622f75cecc917e27d0326085d34581e052c85f50a37713e27518aed7c4434f86970e00a0a4b8503989e72614131b7164c1bdc82d2b6aeac0787f9838476 +d = 02b8c1fef9c6def32b5f4127273ce384b6add4aecec957c1662f52334f5ee97f49852d4 +Qx = 36a4fe1d77bc431012d25ff49fb5468f975353be70e7507d71966a0ef433df51dc32324 +Qy = 58d705cc883a690641f0ab85af4959ef4258a7ba9cde36dab77c125a1de1d395366584b +k = 0865f59502382b324e1dbd75db150f342336fb19145fb43a733971da555ac5828a3457f +R = 1ccb2e56c02cbe8038bf78dea256704ee6e51054668ba8c2ba11aef4ac6f9320d46ee8d +S = 030e662c0e7d47cb3b835c63599d0c9c2e77ca47dbecd7ac834c2babeb039eb630cd0ef + +Msg = d235c31f0a82957a087c7597673970aa39321d4c2640685a03df8388b5eae4825d1fee29926f416d5e62a2e9ca1ea7cefffd31607e750fa9675983608e0f8dc895371b190574d065c5c0c23ffdaf49e65362914363a3fffbc2c1bb487cbd4f69ec22dda5c7dc3bbab805c81faa85787cc176bc0e5703924f395d8c9e7e7701e2 +d = 0afb1c45e9a9f02942b8e04da4b815498454dde6643de186625a98b3c1c6993abc8bba4 +Qx = 02fed49c59e9d5c09202a5dc29d8dd527a870a180feded66ea6fc94ee094122ae97656b +Qy = 3620820bdd5910037f5877649be38db3571a9c6ac632602d2013d0d5abe1f00133f6cde +k = 1fe749d9916f11100af525ee343b3b74a493f92339e432a482dc8e86ffb5affc4630037 +R = 120f6f13331cd4d1a5b9707483c74dc0722452062cd4534e94cf40840d22ae263244a51 +S = 0bc2e37a481478f879de612cf4a833f7e12b8df33f5b0d6ac5f5aa431678ff053e2bc1a + +Msg = 1a2559777a5fd8f269048feda82c4d9fceca95803f84a813789d6ed070422240e443789c5231d63d5268ddebc060dfb99c4eff2ff115d2984d8bbc5c05314562ea6864fd543e7e0a3b8572c017d8ae3563027d79bbe164d40a5bab354720e45094b9b26391ceb55339592fc2f10b97dc9c2649f7227648f5cd2fc46d78d31c0e +d = 0ff537d73a4da0ae3a4894016b71dccef3bc886f3d24a5abb7dd96cf8fdcbdf0fdc5e51 +Qx = 01bd0537dfb29f727f91fb469c31164e1bb0ee192a5b89b880f3fa40e3e5437f0d2f9e1 +Qy = 6df9bab2f9198494094a63f2ea091f60108449f0741806400694a93702f61fb0351a81e +k = 0bbc511c6e1772ca6cd1cd308126c18c5db498055a4b3f1cb0dba3285f6d38b083e647f +R = 1ba756f3c89b732398b90bfa2f92b2a77159c530a8020b75cdb9697c6d75c18d36040b4 +S = 18207cf326bfe97d657ac4197ee5c20c75431ee552681a92a5815db0d984fe597700bbf + +Msg = 658c0d3f764bbc952fa55a258bac16a5bb5184bfa76cee06baf9ee6b9ac3f116e08bb2406b1dd4be487b057f3b29c2043ebc33019b2017c4deccb86f50ff15fc9248ea5fb64261120b1960525aec3cc18827c23291722c5add8a3761ff8516c61956c62b8cbb13f3d92bf3eb45a70704c01bb3625d21c38ffa83a6db086ee968 +d = 16000d2e879906d1040b32eb6ba3caff700e5565871ac75f10c5c15b509964bbe5e14c7 +Qx = 2ba89255d1c89e42518662611e2efe3b5e3b8043926ae9c43974ee2986185269246a433 +Qy = 2b87762b9ada81bde958d1f9b81246f49098695391ba3b4b3b9ac5727f19fe42fd07946 +k = 14e837476e628007b2df21b5035a39c24cd4869bb52dbbe13c9666ddd8a7e3eeae29f65 +R = 1b5091fc755c0f908ee13ef9bee40dd16a5710befd1e265a312e595842d52cc135fd722 +S = 0fa25f43c3c074d702e45d216e3704d942e9d67b3c0728645ac6c53b9be7300061e5fe5 + +Msg = 4f10001e3517c2c1f973b555f4827681e096d860c4db08f1f4aef8000c9c24bebe59f8bf3d7d3cac959a1a5477bb0ea43f2e746b5d14ed48a58ef35484b0ac786d2fec669f945e846ad73e6b77a9e47012a951b398941566330d89125eb3c1fbb2f06adb951ff5f047d102fdf28b5cadb4a3e1a10412eb3474d2ed5c3fce78f5 +d = 019528d505bf0584628d0214bc857150a929d3f59619bf8f3acab545fff0977c9bcdc97 +Qx = 0cc8863e1443e61fedc61abaff87d80450345489728d78c333b36fa28d8754a29cf3ba1 +Qy = 0205ae70c35396c07f9f96aa7c59cf8a28aa2a365b4a1b68e7414d8c4ae5220c8bae9ae +k = 13d555426101fa3c239b7830fe0b6cf08a1c01f9a991f806c84baae20daddf5dec8f868 +R = 0af8bd9856dfd783217cf81b09b464614aa824b0298f35308e6427c679607853eb66c7d +S = 0e6c1933d6ce25d0a00effbaf1db2cb2542cbe7521330c34286cf3bdffc20c001cd7722 + +Msg = c43ec3c3232cae59bdea7cfaf18a4672035dbd2b8b6b1b44ede376b36cc2d8baeb921e416aa177f5977da8bf1d713509e5251278b6622790056271715cd5feac58bee5baf50b216e8eb886279c5a384cdb696470275b7487fe9ac4c506706f6b0f9809d1ccb102546a4297d2017c2a8df9f02f30d3d1bd9aebf6a92a02e0d202 +d = 067795ce117bc0a389397fc22a01cfd9422cfbfb5aa44131938a8c45e48e1d5a718539c +Qx = 07924de08acfae6260009cc2f02daa2fc2a809e6ab4cd8858a9e9c2c15b17e29f1bc5ee +Qy = 04f36cc2d36df63474a579b96f6e59b890782ad8fa865efd80abd798ca2938bacbf8212 +k = 1bf3242e75f8331fe70113ec8e14ad0814850bb8cb262c7d0a44ca69de52d32dfcabd0c +R = 145148d59c5be2b6d39dfa33e904c161456822ec0ad64b9dc52befbd6496c9303fc062f +S = 0b75c3c404d694e086c0f5aafd534e7d8596601f675b2fac9384fca6084711e35149f9c + +Msg = 9b7d675a3d2cdeb280ea28289b5fc2a3ef6b535ebee8ad242fb031e2e1f364e8ee806568b2f8627c5a5b4f51f4f65c71acdc1152c08b9211b81907b551e0ff47f5a6aca45dcfa06f09bf195d19d7b165b52111b601fbd97b192f62465f8ba20773b1599c8041e91448eac7a5763ca0628f40768324c5304e1119ca6a1fdb0778 +d = 19269dbfe4184249952a651a507584746c5b62c64cb3b17e0158aaf4d086a4afb0330c1 +Qx = 6c60a475f2a3635fa523e1b138edc36f51e94a34e75989c2cacdf8949115d96f11ae752 +Qy = 494d5e23ba9071b3e52c58b1d0740cf90cee7b084b9ef7a4a7be8aa47ce7b3d97c8c51d +k = 111f4dc771b6ce5cc2f42172d3d70fe77c73683bdd2ea331ff711b7e9d8c3e4f2d7d6cb +R = 027f224c01847c52ebc180ae81009923ae3453be1e0d94b5c2934603577f36653ecfccb +S = 1e7b771631e5e72b7ddfb9c73f684b93270269ba4216cf3926e43b2ceb49756e7e7e0e6 + +Msg = f4a08daf8f66ce57a986f14b918099bcadcc4308bcde7c169ce8536a40d94a928cfc0968180a2c2a242c59df73ff79a03687998c421cf9a0e661630378779a4744ae2a6cd24ff61d7fcd6c11a4c8bcaf358075e96f864df0998ee98ee393b37bb38747b70bb7a208740959b45174a60153ee566e0f62528e9a5e4466186fa650 +d = 03835814de0d6441cd80a44e40350cc8bd62ffcc81e939a4410bb9c9259e30463c453b5 +Qx = 5ce9f6c979bc1d6bc41f41095b7677cc184da8918265a7f0e5b9dbece2ca9e0667cfbad +Qy = 39a395aeaa04f5168de809164285974d306e474a610d89fd401c375c9b73f0d23dbbcf0 +k = 0b714d734d063aa81a389be69c56dcc23bcced3517e330572f79c769645e7dd2fd55c20 +R = 0e4d4494f91e79f2b1d1c0e22ebf744ef448f57c951f1b5f4da3592fe60008ab00f5f7e +S = 02edaa4d8731b598c24b993dc5bb4888ea3c2dfe2807daf88170982667e69b76a8ecfe0 + +Msg = 864647405c70939fdb4c026bcad53218ba1d438d82c9138f0f0ecac815dbfb242307cca52c84826cf6556c51082a23f14252dfaea43ba229f7493db2bf8ae9cdb0228dab9e25cf385b504b92cca94f813acceaa1f18de851b8936c4dfe9e4e17002f02dded6b4c231ea5e614ab46fcdd637b8c6193e8d0c2df1b3d883b97e1e8 +d = 0aee83dbed3b703cb6e60d51e373eb20e298ac005fa6a572d02fa1e6da0345558ad2a46 +Qx = 0dc25760af992a8ecc108373281bd0d246f95933ec943f6346c1b2b941a03b33951f622 +Qy = 6e35f02d225ba11d2ed7ea392898f78ca0deb2a47871eba6cd2be7440a410d910097de2 +k = 1df142187f8b27f4888075a3784aebe0fb7d80b0b6d3497a7adbb88cb6bd26cb82109c4 +R = 05a530bf1135ea6d599928cb0383f5d391d19be333b1577ee4eb6f2a78b54e4aac0e09b +S = 06f3033cf392f698d1a1141cabf138c411f4e20687920f2915e17e805e8657a887c7953 + +Msg = c87c8f3ad5c28a027b28ae5021dbe8d425f74181d519451f1fead7a1f9dd102fa6785b147b610610cb59bfa91fa363bb79ea602a7d7e1439f874c5dce748e5c320560c2d9676f3a948754c72b6db249478b7e19c9829ab4de2e344535d3e0b7c20c272f82556a280ef491524b255c4fafb9c8ecb87b0149ddd9d7bf6159e3337 +d = 17b65c66514019ff935e9d571a4e68e9ee4463b7b9a754b93f4f7741693f4399879fa8a +Qx = 5bfb704629596ed05096783e49864a11874f319b4020917f1ba700ddb0606e6e72c1793 +Qy = 69194592be64c33c2f63771af0e4100d060e9750031048002680541815b311ba8f7ffa9 +k = 171b5c698175300b95dfd5ed8d3fd7cf4e19105ed7193b6013103555808743501ee8c46 +R = 13f001f287dd5c7ad9af8d0105b47caed66ede41dc1e121a602610ce20e41af91cbe586 +S = 1433d5263d5233c40c0ca526b3657fcce8cb88ee65105b5f5ec82b26e12bfff11c8812a + +Msg = ac7da7611e2ade20aad64b418a16e02e79ab4894d758550210eb10013a9b5533132be701f8843c840807c4167c38d21dff168d3baa65d5bcf285b73dcbb75819f8d7a20a849de335e19bae2aab2ca560b93d340731f291599a5b28afd7737460d291105cbba6d0290e836f6f6c1113d1b2faf90ac5de7c64e25206d79380a4ed +d = 17d2071f39ba35515a8ec977ddd36ca15983e15bcda626f15af61d87d58114f4c80a8be +Qx = 6f09c255fdaf78d7d341fde4586526fcdec34a28448c7fe65685a67b6c33564ce9249a3 +Qy = 24ae4483fcbe3f823a7ce53db96ef2f6c68670e107e68cee4f358dfa844112d6b2144e1 +k = 1403078da10f55724fe7b56dfc55990507307386ba82ca8f6340d33769ab1f6ca894bdd +R = 0a54a35767a1cc77b2332b04694404fe5a31ed8851ccc2abfa5542b0f5acd9be9b1f02e +S = 0577e0a1937172a6d45177c2b328d72f75a08a8a774a31151b89fd451d531348695d870 + +Msg = 5757c472fa2f81430dd920f39b61066a28c870b80e6c96f822f8f19b398c3574d159cc22120454dcd7e97be8211916e4bc8db365b2dbb99a6e597d06e6645046a0abdccbd06741e9c0eedf33cb78d78a540c2a390719acc498331e694e6b0118cf4f787b51c7b7237458a6149d6dbd0a08bae8097e919f970fde920485e9a0ac +d = 11504659e12235855fe55220287a101e511d39a627f8a0d414446385d4a88f31507fe74 +Qx = 192fb9bcd157c7ef385d48470c3173ccf1ef9650da7d680d8473d45ab2064a073232ac3 +Qy = 14ddf872b711157d121b0a61b88a7eeb7cd260f1f82ec5f62fa2681e28c7f2640e305e7 +k = 17e10962721f041946bb5ffcce724c9f284b1c8970f974a069c36dd4391adb8cecb8bde +R = 1546450d25e2536aa14b8751e3b3e7eeec8a6c1cd967ba0f03e6bfe64c0a59072280636 +S = 0159c8d6499fcfe8ac7b2e84990a714d7888d883c16c016c4b165f36d62c3493afa67f1 + +Msg = e350383d04af0f4081bf09b95d1d53040e7acc64e56b13b653df31dd119617b800e0cdfeb935dfa5d94f1d7814688d8ce41021810958759cec76560e1e5c0581456acd1a020165849b2203f1c11d318d816697f36a86b59f160faeac7dba71682d3c031d0d547725ef69cbaa28345512e38b75ab011911d8924b2d17a857a96b +d = 16e4cbabb03215767249ba2a608708b78d7387be9e77f5efd2462467fa05e8dcde2c036 +Qx = 112b7ea5d21df8ce52772a1b76a52ef6f0da62cb7718a467a034618b7ce701a05cd2467 +Qy = 649e0ad181437b4eeec87e202d8fab1c240f9dd9b31311284c24d89160b1895be541319 +k = 120e4bce412311d3e7adb36dc11d4cc1da8a4b9d6cd5219e772b3dc2b2b8ce08833748f +R = 1ff2d53a8e6c1c23807eee681156a146e8f2cc1a8c262850dc69dece31860bf094e7f73 +S = 1e8906c0bf2a5f922ca271def90d704a1425e5cacc64bc5761b000c7df0f8f9fab51f2c + + +[K-409,SHA-224] + +Msg = f153cc61981a46d8a47d17d29ec157fa93fcf644beb84558db7c99c57fb131dcbc5b65581ced5ff0b29bfdc66ff703ecdd4290f7c353c02a3e6d6867f33f3dccd1a0b6752b8a35fa143f8921a5078af9c85b212564c5b795da9858c7955095938fcd10c21e35e1abe905e84c8b4bc05f2a06091ce876d9519b96951d08c7ac9e +d = 011c6528939672bed3e8c905b7ba594c3ce95f37fb28044f210cccd01dfdb42c10e8e1a0b5d6fc757834ca7f08e98cbc52b0edd +Qx = 00b570ec1fd09d7b4d102f83cf37129d94c9cf2f982b702c5d1172bae2df558008518493c08dac6f76a6646156f123c4f33e798 +Qy = 0e3cfe1aafbf25a5a4536d6c0cfe13a540b4a3c97d4e7bc6c0346addb4b0c32dce089a7a5385e8a3e67606b45e2062c642bbbad +k = 027cecbe83853037cf46aa98e1e1e552a96af0bb24e57756d8239fea5d769b51b83f195b7801b562259ee644ab4047764d130a0 +R = 06a1601e07dfdff9d3b4ffdbff124b717403490853099fb4a00ea98f84ddd64e908f99b40a2ba6ab88b2491a8d948fcc2f207db +S = 0741d27c0dddca3641b56ba1e9bacb0da1fcee46b9e33ecc6990b98cf0db74668ef1009a50e5d55f80e6642ea48689a529c8a08 + +Msg = 258c91524423b5c876432b1930c7b07b56eb5e3945f1e2296a4e5bfb9b9123f800ad195d6104641b1f1970bca553c2032f83d17252e52403a9381c1fc18eaffdf026f7537aa27d84c5e3d6e39e651a92a41139cec5181fe794457f556b390943093be719acd23fa1ddf7ff0aaf0479484a381a309b4f681af74bf97caef08c22 +d = 07e3b714496dd118d8f3f597961eec5c43d0265bf85723b0b9b0616977e0acc2cf686cb6afa6cdc19114e27ab000e762dfe467b +Qx = 07dea0ceb73b9bfaff7147a36436cfa7955eab02ce7fe9b60dcff3e088c5c9281be5907de3e06ebb2e21dce8bf3ff85feeed500 +Qy = 1cfa9b30af20612666e5df798f91eb4647d8f5e1747c1b18adc6b73a848d987434c56d13ad78b775c4096e9f20d4878bbd9572c +k = 028a8353c05129dcaa7caf0343130bf2e2186b9cb5ed0a27a565e1c24eb882617cc299d486be76fe0f8f3c52678b6992288d7c8 +R = 034299ca2aaaad51f12c90e8205da305523713516ba6e7d245eed8ef94a1b2409b98ae93476aed6c9b9aef50406860b4e490db6 +S = 01a1adc76c65d77ea686d769dcd007c0101b4cdd0934402fa47dac22f8ecac28fc05c2f6763a6781655ed5e7d84c41157255a4c + +Msg = a16a0d6fd57240fe88c7c36b9f7f9040cfcaa9afc4beeb8300818c5f90cce73b819a12c31d42af33146399cdfa4ed4954d068dbb0f1f342269dd29f1fe357e7224304b67b0f924b794780fe7e6aa9dfa3380252fe7177b43e7b1789718949b9ec1b943c83ed4399491482f0f59d2cb8050ab6f8b5854d76c50651428cd29c40a +d = 0182d1e937b037bf7f84144f7d4c94c935269c9aae7d500aa459a7a0ec113b232dcf282908eee4c84b8106cd38cdc41db3f89e1 +Qx = 0bd4f1ee6a967123d70d488dbf0fb43aa5e93dee5794b4492277fe559776f740754850477e275cee9f1c375403a4933dc986920 +Qy = 191a544b98ba954cc6e060ba26a52fecbd1f0dc7c15381004cccb799a9f7960a3cedd02d36fcaeb0ceb844bb4683998d776dc5b +k = 07904af733742716366f8ba07086f924697ac8a01bb4895bdb5715081ee89eaeafbff4cec44eb0ce14e774dba71bb9b091d2594 +R = 0723b2068957c4f2ac1df69378fc013797a3b071de30b514c3e610002dc8bfced32bd2f9e8f692b653e736696cf818b0ecc1e10 +S = 058455b8f9abd5fcc28a4ef839ac0245c3feda1fdcbc3c171b6928c6abc931e8b0ec34382d63e414657e9319d2965fdc9eb74cc + +Msg = d02ff569828fd1add21f6bd1c50cbdcd09222e458ee79fd5dfdba3cbb84e9d926fcf196cccedece77d5aa17f8c8cbf3a9facf0f02c71d5c1c8aeda9d75f6fd7b6f2c5c70dff992ef6e02c438fb3c66da5a503b3c39acbe2a069da457595b542190d818015d462670b0807c401e36b1bfe05baff3a8ccf8d1f5f8de7840e87993 +d = 07ed09428f460724c8a5225a31151e031d9949493fff5703369c401762345d002c4ce424294baab22d9e71edc4f854510cf0e6a +Qx = 07fcd003a8cde5503f5582a42738738ac7efc6cdb3813a00c072fc114006be9881c0a881ca35988dcfb8088f3d07a03943cf230 +Qy = 0e7041e666c1bed3b80a691ecff60ad4afe3a544ce58030bbbcc130045e2c611d65f322ec78aff6757cb5df8ad54ee8a09616ea +k = 02828c8c4bb1722b0f03262de32ca8a605c4046badb20d8eb9f19aecc5c69f199aa48d09b61f285254425cb4bb5e0763dd471bb +R = 06c99d796c5d4fa21c5cb7cee0b7570edc9d7e9d7c3604f5ca3766b17e44bc71d8a74ac268b8713cc2ea0adc3dc1971c062b4a1 +S = 075962e0ccbda2280e502559f48c8d37704964f67f8cd3b443b89be740976f1bd929c175560fc8cfb282661c0fa792a5b200401 + +Msg = 57befce973b225cfce7f996fa5a1a43acd160681b88a87b7de04544eb7b6a719718f1ca7f559b6531bfc18fca3836d2be7f7a6e48387b7579a6845796d30e46f0dda9d82680f8c96c5f0989741adef9762c3db763cae2699cb6c112543635e20ed5cfb4b55ca2ccb32d2d13936085a8ff95ed658a54be73f80c912ccfe5f0ca0 +d = 0390f05b9619c27b800e99aeaf61ef7f6249367d5cfaeae3c7b523a8b29153eb8a77132f6c4412545a842d6deb7b7aea7e2bda5 +Qx = 1cbcfc492a2a6bb8a7341df67ef2bcdcd706afabad5e7ed1d63387ad9b0dbc47ed17b82de6de936752632e43c393a93fc5cec0e +Qy = 111768994b2dfe9677d9dbc45d4b55fbbafdaaa2b2638ba1605c35301fa557d628a87d0a7febcad9f8eb4b51fc9c807652579f6 +k = 00b8d236a9f8edba7b5207b4c7848807b933b214fa25cfc5a0e73f750d30051264bb9f6702837b0f65a451d4ef24f047ec4e9dd +R = 076bd4755427fda22a0f177624477c59de12a12621aac274b980b5e1ce5dc700591eec13dc5bb48c5c8643de287a07a48a6a7fd +S = 065a5b0a00548bcd7f59518f122d79c7552ca6097f3867604b462201add5f326807f0e8779f2177f277e5ed25253885ca81220b + +Msg = 4277ba40cb462860ca722cb4ee71c61836d2ceba18bc91f3fad7dea478972c6da0ebc02815eaaada1d1a5e93d7ab353855ccfdfc94a5742fe18daee2328871e06c1ab0a9a989d1239df2d2d27f96c415e7ef9a941f06c6790675361173cc229aac7045f49eaca207f59c497619ba32e932b5c1c6576812ee5b146e2cc7de5e62 +d = 007d18652732596add3db31f7a0ce6020d03f3df58131b0c7c633faf619b8210cd309d6c0c4083aef1a1b6d2a756adad0bfe344 +Qx = 15ad0682962b4dfc8901a0dc77d548ed616286733cd9b3ede937cdf4401ab8b3e3516d466ba43b6ab5356c4e72845767d55d27c +Qy = 17e4de3288ed44b48e7c47b16e2afb513c9763d5bf4cbf9a357c128c94a758e3ff946957df461531def2b8d8411b81f45f0c2dd +k = 01a896c30fcfdbe583d6b0119f467f47758ee01d4d601eb698f444ed0f76515c2b8053b11ae7abd0eef7aa61145a53d12d560d7 +R = 053b1cd57dfdd8d1802f3e295e450a155c366bdc2bd222d18a4d08369c25e53f1f633958b22d80755ecaf8362d548b28dff1ba8 +S = 069339fc6058762a99576a96e76f75275f848102bcbc281e59fda26c98fc48a3f1061755e80740a233e03287f510f4549bb1874 + +Msg = 57ff6792ed4b12220d179bc0ea57ff217f322c85bd3676a681d32d7e4a3e0c8e891fd267df17caba5992f68c35ff670b60b4bbdfff82404f6ed996c30539bc395120f97d4d7a652eaee82bd8f9360bf8bb73748b8bbda9f9480eb54f7eaf2609d4259329e8a5ea020521e7dbd3ec56f23c849932cbdf2875f5d5c774a9d6b0c9 +d = 02a91244ea4623b63403dba807d60b914ca3b901a2523244c322f2f11251446d3f15e869d086ebecfa1a39ce304e8b5c8de23e2 +Qx = 0b7ad8f0a52ec21e54e28ef603d76652dbfecc7dd2427cfaaff3d280f0d1f62187d77effcb433b5bd44c3d0c0d26c38d3f5930e +Qy = 080641bb0163130be4444f79c500ceb8d6a9b2cac42d21d31b2fb29da075bd41c6613f278944adfe92d3c99d494be9d4714e9b6 +k = 070125c89a1262a88f22e874c55ed149de6d961d6abaab2d13db9174e3cecb8f497529957058a0afe5361ddf9d3a5a3b923c7ef +R = 01a28cfad13969c6449e5a0f879e01ef7dc1cdcd0bc77d20f3989c588a9cad12a4b52743c12f4f6e2154ad963bf234ec96263f5 +S = 066d7f0b364a640c6c620e3d030448d155cffc9ffd46a6adfa1c13e1b01892463a4724465aba3eb07009fa604f3af18109cb72b + +Msg = f85113eda64478f460b60f8084220134933de049200a5f37884da7901471542e26690a5fabc3cbf9e679ade71b6e54d869bc136c3d34cc4a9efcafb777abf046b5ae5429136112a9a36a475121eb1f33f1f43481286fc1ada98a41064a1fa38c89e99a93065bb2a119348a9e452497fd5a0d2b83a66b09da9f47a0583732adf4 +d = 0068c56c6b5d50d1d4e13d3837d8c5e8ba2f825e121b63e97603fdfe78bb6899600ff0dc87b6b3b6868ad0d2f62b7b7a31603ff +Qx = 0d9a4f5992308013573f97864c23b98d276975d80cd6455e9f0d8a62d6674f3aee3d27dec15903da4e9d5908cebeb765ee02c80 +Qy = 01f61189caacb05dfb982bcccd603a769d0e1be8f9223288b5426e7f88854356fe825f11a88918085692f33b0f4c61ab09a861f +k = 02ea7f0d81fbe3d4c865ff5315d1cc38f9e9a8653fc91dbdf445b62fe09b30ccddf508783ad87c8a48a6ccd5c9e817fe2977f90 +R = 02d7847479c16c4cba834ce5962724f185be06cc04a9a8d710cc72e6063a7b64fbf2694f5b62de65d3d347d34c0dbfd5a4d93b7 +S = 069e32bb19d20e873d0e62b306db4d5663576e4b2fe75e8ec79b7a63f38c8f1007a817ce30612e8578d48c63b04b1d34904010f + +Msg = 42811e9ee6dc509572e1cddbe5baf00afeb0c5c13e3755b922eee9e210001676082bc9edc3d78db2b5bebea7a2c0cd2b369226c2b8f83b28f33fb513407ab9d287d14b112d6c3be2493805ace5cf6fd366d03cfb28f4ce3f0f060880db64d6962e997463ba7c05b6fcd1e66babe4b94afc5c2d38c7050c69571d27b66ef0090b +d = 03c88084f8b78446db431bd6e240a0c050813d2a763675b0ea869cbe183df697146cf29c03479af3d34587a95cd257027fbeed8 +Qx = 15a09436de00d8d129e297ea60e04b704c0a8183d64a77d1c527189e25e21d6bb62be8ef5eb2dbd833e5f9c7d5c3e69c9c01882 +Qy = 001c32ba376d2e9de28fca644b0d567ce1f4ef0aaddb2adec6213d03bc8cc99f9140005bed3cb6c3c0f5533275734aaec47404c +k = 0132f4763959863a32919eb591799ffb8613797bd0b617c73654ec9eb32e2fb86631b66e28e1b4cc4aeba65ba8c75aa1cfacd73 +R = 05fe0ccbd430d9459e0093cfe2c1d1d3edff8c1ae7111299d2e04f414c46ed2cc88ce9cc9e23e187e87ef551de993f52214d609 +S = 0557acfe6347baafe031dc16032c45559693e2793d9b6d372670b09757c6f4a3e5ae5e55264137d1859c8d9f8f03c25de409bf9 + +Msg = b38f76ede7441ae0887e689d556f43155b38dab7cde487ce9ef9a46f2957c830d4d28006873fe2368197a6931f6fcaad755102686a457a7edccc8d344e2d2a9162e3d71d41c09a022539ae6d404955a6ad748231aee1f974d4f159940532fb3b1fa0254bfc5805d2fc68696856fadea386c542d3cefd1be3af04ca595e54be25 +d = 051af7b63bf3297ae20517faaa1552f4fde65819dbbff6a52721611e5b7dc1242ed6e69768cdc37ea8cdfd1a5971f06b84b5803 +Qx = 09cd1280a2a79b182ddbd1712dbfd12cee3345a89636d7673a5fc3e1e51400603176e27d538e90005625aacf5cadcc8a8c25532 +Qy = 08b5aabedce498476b4c65ab3cdc81f819c2db670a7236c0357a86f9087b83e7568cc6e5139fb92f81975756d7dc4f48be87df2 +k = 00bba308a3eee9e3ab6d2482bb728bf44cde9eedde15af7300c57c2c1e6fed2ee4e404aeee3923e7871a2ff4ba6df64f9d01a87 +R = 07a9e69664b7b81edc5d47c014696d194b2ca4705b2e79af692b285ec476169d041dd9eef20f7d496fc49b8597574d2602757ca +S = 01521d7cf6aeaf1c8dd54a7776cfac02967983083770346d9768a2629d606be90d58ea82377413a0fcc3e4e66f05a0d05d933ef + +Msg = 356dc86cef7979148e995fc5abe2b14a7d5e4e42c9b3509b4363bb80c581a66f4e7e4aa53a4bfd37f9a7eccf75fdd726f348f6a3f779e6599f61bd1d668517f40453b39bcf35db0852a6a6218198f52b7ceda2ec55fca5abe8e5d93af9a42b9ae4de9530c5870211bacc27c39aa094013db703de2fd3121f08d7e97dbd4e8946 +d = 03d65bdec48972d03811b78150a06956eb22d337dbec5416bbd8185a6322cd8c0ff8000210dbd1326422289071cab65175f5d10 +Qx = 00c9c1bb0a80c4b4863d78003e21ee60fc553ff72968c165f6eb6940250a6cb7d545c6aed3760e42370df79b0d37c2d1433c486 +Qy = 01a9d994828ac09a86c18b9758b3f6b91a5775931a7a6e4d8b052204c972b993a3b420eb8ff7e91df77253a9f5847c5968b5636 +k = 0156d12708324cd30037753c78225d183723d3f15930f23bae854f121094bfffb5d7dece1fca93bbe7457a2237760aef3db8e3f +R = 071466e80e2a7cd8e6cb6dfde259a08619f880a71899c58bd4cd33c29f7b321d269533720101f2ef70f5b8e8f05c9cbe1ebc303 +S = 077330e08712ad709f855d92355cfb7d565efd806c6a853712916f7c943bfc79e496366deba79ef7491abad23086db341f339e5 + +Msg = 06fd39a50bf25e89f1071ff81fec5d1e35b6dd68990414ee403dfdebb792627b6a4ae3d2236c159e4441ff90b61ec87b1592c538515f0486b19e58583394a05e6411e69b4285d6d6589982ac0eeb2c912c4948789cad741183663fc070943389d4e9a1150b8f6088fc50605915e9e24b2d98a1f539024770e4820e14ae42ea8e +d = 01f1a8b5f35dbbf82c102df550c72216a243f986f0325920f6186a16d1da74228cc02be6024c7411160c183c923c743354f9438 +Qx = 157ae8d90fe2416f70a7ce0669acdc0b5064ba650cb5416e59e6672e45b591774ebb2f793c3a58e953da1ac08272d0b949e7b50 +Qy = 06d49b9784f8423812967b857e25dc3af1312a6ff29579f6acb6e155b6848ffac6fbce51bd2d41a22ef955f690e2487a4bbff00 +k = 04cc45e00847818397c6abb3d176cb8bd77814abfc253e3b0d799dff2c3e09a5195ed5e6232873f2783c8e670b52a839e06bc30 +R = 067b418a5395216b83ab00d5568eeb62ae0693af2b0e4d052c6feb70562dcc06ef852002687099dda114477871b924775e8460a +S = 061d1e4d713689b2036272ad41571759b52a78e0f8a84d1f3a277aaa33ad558f0b71f3c5a99d403e49df1afab66059db20f9f32 + +Msg = 6daaa41150ea252a3e966a338377307d909b95080e006f13027f2be5059d9208930c5a329994c0b794ef50eb059bc6c215f68cf42260bd410f9bd86d2ad5ab7179c7c92de4a93a5f6aa17de5aefea815e7c0b78a8cc53c21dc4dee037b29c9df4e12343109283ffd5d8a3b81fba1b5e95506c7e01ac056c86dd0ee23bc21af0a +d = 031dc621200cd174193d95e9092ffb86189c52cdbb9ed937593f2cde7c4a0264b9100e1b8407336c8dfb5520d28a18dc4e39a89 +Qx = 0904bb904d50bff09bae5dd21f425c808b41001ac917b022f7e1cda6e46504781a69baab4a6f0f100c4fff9ced26f871159cd30 +Qy = 15cc300b0efbac707635c72bf855de4290f1b8b70c16f9bd0cb771ed5c760ada04d0ff648f118d64e0aff6a6de16def15cf7437 +k = 07e32b1fc1cebeec3d84f56a67c8ea2b78723e7010a725ca4745e849e573e8e4a4ce11d1af4ee508b80fb5336de3cb53161bf44 +R = 071cd81dfbacbb67be5903cbcbe402c0420adfa9d14148bea600b178fd06278572d34eb46d857085a2a4f48cd4ee9109d607dae +S = 0347b1029e67a6ea2a45af1f7410dc951db813eabfd3c7f3e2c294b81e1c54fa8c98569efc580b68007bfa316424ac6eb353ac2 + +Msg = 6378dd1c12c5197b57d47dc46a67949bdd1e0809004e94d49b0234126a08ad5bf8723ebfd132145813136d8b7dd096f56c34248f09a65c34f60c2f80f9a51b3795f3d2518b11aaeaf6dd45a323794080b78f85d629e5fa719b6ab0b14c78cd908befeaef0dbfaa08cec9318bbcb376d48b11b68735c9554a45293db5e9239ae1 +d = 016e6750245a88340b0f0665b890459f8038e9b1366f2fc1326245a88d4c523ec94429f21869ce3dbf75126e58f77241c99efaa +Qx = 10184fd47e8e1e4d534ca1cf67f15bc8a80921b07e251c22eb88f25395e08d7a9283774aed204fb5c14aa13c63a94ee691b4ff4 +Qy = 1252ad972bb8c0b286c222f42f7d42ca6561bac5e517921bda53e51043f13e711da8a813bb6880678e4d6a16820bab819d62e59 +k = 07f18539d00152f5b9a75d4f114812b87024e8a8f9c9a8d12139d0a74d87986f4305bde60375918ff2dfdb88b6deda640e17364 +R = 0735a15e7bd1f69f4e90739d42ae239a8e9238ad28b63ce291b57cb5b99922fbd5dbb7f74fcc23117243efbd036eded6ee0f28b +S = 07bb3dc77cdd4138a02e2d5fd4f6ff8516b4c95b8255c629132ea8705c399fc60f8fb660ed3aae52db283aabc3626a5559dfe85 + +Msg = b898d0f9bd80e083fa541f457d14d853bba55b120424a95e1d9511c8833f48444329e0349d68204c4b4581ef1c4dee23ed0a4445727a72e1e6cde422f7c10ae132a3fe681f9d741fda263e73f7cdf10759467c9d76164086abf6780ad474772771eee22d195339bb8f6235e0d992bbe282b13ce4fe01417f507a2c4fa155e108 +d = 0788fabdafeebb72f6385301e30024b56639e629a400f9c50d402cfc9b5817844f06a451fbda29c7ece41dc9ffcfc625fe0ff0a +Qx = 09b2c36d221d18189e1617cb2f2ddcd64cdf8a42ba6acc55f04e9722b11588f7fa861a3940820d9dabbab631d7fd4106c60f37e +Qy = 0da099cdb10dfe2d7c0a16ed332b459e7be31f44b0b2d595dc948f0b073ac4e439f24f215fba5ed50aef3702731d6561eee1986 +k = 00581369aca680beb705f52b6bef075de83ad29034c3d6b2949b551a0bbd100897a079b49d41d5030e1a6950fdb14d70dbbdb41 +R = 04f62415c99c8e6750f9c41c31cf050eb58f61f62eb0b0023d61dfc30e7879d4f5a87e88faf55522631a29fb69d16e15c354323 +S = 06df238f34b5ae664860b43ea11defe3120591cfa371367096006c03e83d372bfb70da6f789665136b7dd1c59894a2fc5038c4b + +[K-409,SHA-256] + +Msg = dbe04561ea8579672a2b3afa94426a3cbc274b55263989d41a778bcb082da797d84d930ca847a481789524940701cd5f1d11b460bdac0bffb0b3a3abe1ab689c519700de85a0a571494ba0cfc3c865450eba7a9e916b7fa9df55e8a1c246c992e6a0b44b78274e008472bed8d8411633e6520e1a906c5d0c8aafd572fe6f1f64 +d = 01b8dfd64563dc219d6eeb53f2e3ad1d771140d0960b211dc1f757af5e297dc7548d6133ddb574711d466688f80dbd65a7bbcdc +Qx = 1ec530638ea0663cd3a9b237dd66402adf50d3094391f2343d7d6c52c1d14145c245464a3b771e4b1894462fbfaf440e53eef7e +Qy = 18349e244b24c8353811c29a60d8e02caf195a424aeafdfd0361846d5ce5eb83da1901700f00fcb85a0c2543b49a8a3ccbac157 +k = 026a26cd09c9329cd45ceb4c798846dd81af67759794f5cadab84de19a835f8a0ae49b12853b1e92822477a73891f85acce4216 +R = 04d83a5f9dad246717135bec6e386ec6b73be9ea6d1a17334ea2003a723d510914167d136254d6cb64b16ef7eec5044b8f2ba28 +S = 03e81601d0c66b507a491c530075edc5b09d770633a4c2355b3b1c7df9b200ebc7dcb706be1696aab70d4c6e1c4a7e532284670 + +Msg = 48a8300820fea2ad83c83f7d6b24192715329c3f159d56644e11ed25efcbd3d31600a813b909812987b97d1087e74a63b4494cc031c63492b6615e9d6e5b36f62cb2ef88b9f736595800de465789f43811165a5fc093ee6d776008739de8de2a84e878748641be8bd52e5b891c4145f52bbd46644852a43108e93d86352b2a3c +d = 0422131829608ff730c24ddf7e8b4a2600eaa9681eaf45432daa7d41fe2fb488fd0199d431a1ed823801ce21f4f01a4dd4248ca +Qx = 06ff24eb0ab812303bdc9a23719caa789eb75775e686b9511bf6e07d60447d1601a48ae7f3041cef5aaf3ed2adb6feb422fbc54 +Qy = 09a351fdc9422a81ebef5407d0d74b52a348caf3cf6e1c6c2af722c408941de154619a1d54bc23a9dfc0c4964f3936d62daa6a4 +k = 0313ec63c34ed325d770664aed3bfd1a16eb636516eb686e806b0acf6f0d117998b30fd52068a36f03d0db3ec13e6989c6f196a +R = 0088167f96d807bdd61e65fadaf0c56b623db42b831909d12641e4d00e7bca6077b36cfa759fcbbf087c31f294f20a09e0bdc96 +S = 01cbd06232b4c73cdd13208dd254ebf9351745ee6196e3a94b9213e931f141e4cc71f3d318a67e7b8060e11e88783fca0be41cb + +Msg = 276e3a986ce33256014aaa3e55cc1f4c75fe831746b342eadb017676b0cba7c353b3a2b554522c12e6aeaf1364cd2eb765a404b3d0aa61258194a30219d76d2bfa98ad20e7e91756cf65e50d7914157f283f2ba3930c0ad3a97532cc747b1cb9c806fff497f0322025a3d02ff407fc7b5808585b91d95523c9d5864efdf7d983 +d = 0095ae8e4c7e55eb5da01acc05ecfe72a4dcd8ec152f1c8dc165014f70eb4e4a7861aeb2b96c418b2d4db58659e76184e013a49 +Qx = 0a3987d7262dc30e8ec11458ff7091ca993bc61f142ee535d544a2c88a47f9601107619617a5e65cdd6d5e1a034aaa223044342 +Qy = 1fc8af29d5134ca9baf92041b6d6aefabccaca4013c55c1581ac05db6141290235ea09650a289907785d282cef1b9efb381ae66 +k = 066015a77c99015ed6983bb379772bd90e03b9c010e695853ebf8e461a20fc12b20bdda47eef856f162dfbd9fd4fc1ec49105d3 +R = 067c49b96e5bfb6a6d625346c3ecff13b8c8b7e59c764b73b256ac970aa4056460000e599a8195f2d235a75cee8e5634acfa7ed +S = 03ce25ef1af0784645f0579da381542f5b8aef377e5b79193314f84853e2a07a4f1aaa4d8210f3a3c249a879cfa3ea8af43a929 + +Msg = 6a4fc1827c3a7256faa8ec6a0f3d23559d6949f8cc20e7f76111dc4ebd59213951cbf0eadacaeb8862d6baa0cb298645e4314b1c303bd0d5e9893304d4b7fbd36ab05fb6a5edc3fef763e3a4124d61539eb616b359c5cb55b5e2bec50c91dd95fc39ddf521aa854216eb5a707819fa6f067b316a17a3b146e7cc2dd517f7d63f +d = 006f2075bd730f34df111ebda919167b1d3358ada32cd6747cb3353bcfb814a77ac70cd51b31a0e538539453bf9eaf9d8b384c9 +Qx = 0bbc153deaec0bcc36c03d24afd20dacd9e78d104d94c279278d04b597ccccae43cd3e64c9e1e58fb5408f376dd7827ede9dc3a +Qy = 15ae0d803acf12d9d3fd41f74357b1c93cec0480f2e586d0e18f15e569d27d3d106e192ee0c1c570351eff1f463dc07d3bea933 +k = 0314330098250e38145d11a48f5043190c6b44f8572ae57cf83b1f3c4c03ce38b90ed5e157464c2613c82943d78c938fcde89d7 +R = 0160b20c370ef4b9cca3f7dd3c23f70efe6bd80751ca021731bdfb0f45ae07e5f2144c77795aafdb0c3a92ebbef75fb2d334dee +S = 045188dd2402ad36ae4278a9910648ed5e71d64737651c133aa89850e3bef2207d58ba4169e471a4737962f5fafd50a37a28e1b + +Msg = 4b088199bd8c94775d8ee508377d672dbf50f6d2c7370e99821ec8f9387492fb2eebdbea473ea18465565f79e2af418555f10c4a527e05a9e20c9c00b807dc8b350cd4ccc2d87e91f66addf02ce4f43597aa258ac6fbe9365cc2c8e8bbe5c884abc929710e8423cd6722a8f473bb55804159a92a3d8b6661a536b4fb9293bb0a +d = 03887d284e9ad17d38bc6da9d83c192a434c509340a7f233cebb032b09ab7c4c6e8730b4a80844898616c9abcd16b753c6bb4c5 +Qx = 12a6d5c5690ebf14ecfa54ac97b73e88e16e757c34c6bbfdc9a3a119f298860d330af295756dec41eedeadc5257b202451faa06 +Qy = 19f40ff28bb72af659d5319286fe21f01819952d471ce2433ade745042a47c2dae798199c364ceb99029c2dd5cf57ef5daa2b00 +k = 035945b45221300f83c5fafbaf0645a7386e209d025b3e1dc367819728f630663fb732b251a019e08dde0f64dd3f60a10065c50 +R = 00c323c86e8cc548123d1337936d4be948bd4bce4631a2194c2bf04e1fd714df2c90e3681e41a21d58d9567a5df9fc478dca8e8 +S = 0493d3f4d22cf8517c301f15bde52cef17c05fed2482f3ef15cdbe32c5f0975e054d45b13faf906896201942f29e5693bfbb229 + +Msg = 848a13465ddcfb2dc14f7bc0db0756832c22dde1e31e4d8b3ae0dd1aafbdf15e954889e95d3bdfd6e5ebb6171fad62592c23277a89e8ba53978c9b1afedfef7e1c3f6d9f31077530460b47834b30bbd84a4da601be988738aa815d3d7e72043243a5288751ee08b4815a017fb5d9bd55833698a0d526b1ed79da35ef0fac93da +d = 02ea5430610864257c9dc393c3addcd0d8d5bc8aab1067643b08857210464428aa85cf1ae6c743fd2682255d4c8eaa46ca21e73 +Qx = 1e502d3f47823ac7207861855fe6f6aad1fa4f2149bff2643b079da23fb270599f744669b3c8ceb4cb0989aabd43d26d93c8146 +Qy = 0cdcfc138451bb59f34dc82b8128088b5ae0cb8a77dce1895d5ffdfc8b4be24a206b9856954508b82b80d0163b276683489074a +k = 0426b90275d720d19c6ef5c8c74c568a636257740530e3ad10de0d518c4eaad8bc58cf4506cf5cdf7f2b03edd1caadb28fa3787 +R = 0123ad87c094c4ccfe4346dadad54a6b1ee1bffaa1b7b9094fe2e6ae785a2b77ce3f5e568e43e8b7fa997206262645f56078657 +S = 00d56cd5cc64736ff7ea0d9840916b1e1c94e11611f93b1b11c2ee98c79d92a8af1a560c9938dc4bdd0b84252e259ae5669d1c3 + +Msg = d1850545c04ea65528849973c220205c35eae98826d169348970d1420b4d872ce233af1daa9e62f6a562544ae3a0633a954a493e9766dd5d87e47486559fdf86229a7c9e1726de21895abdcf2422d438f4ad98d88b45c56742694ad5e11894253270997c049f0f419842482f21c792fbe5613e2defecd485585f1835b6f4c578 +d = 062c757c92eaef41f5d81169ec4968145b5aa2bc1d2a3a5fd000634777748ecb93677b3da12e3be33272a8f0a52300f4a5a37c4 +Qx = 139660fb8bbba59e8f4e95e5ee5b97227220f0e1b293901fedcc6dab86e7c5a9d20c1a097ee2e926a934cce679fb8dcd8d2ed6c +Qy = 08ac510ddf735184e8fa9693da264194fb78da5d1cdc0bf5faadb33950ca191fe233eb8dac8adcbfe15b4f7c09d5ddeef6bcd1a +k = 026868bf1764993d650aaebf117521cd146ea20067cc14a5843f726a3d68e41c3fba82a83d406b2275b3459748b3bd1a8d32f1a +R = 05b17d13ae4d9535d062a2653bae4d15b9b859a87c33e175adc3ef04781bced888f3e93e9804b2251a40b9344c0f8c6bd5be0ba +S = 01ec3322c5beba4423b13a0528c71739a6b39f7b0e0e58a8274a8386167cadef51e5560a3e9d97447e3d3c06288459fe6569345 + +Msg = 421c9784d6fd507c82904e1054edf9bdd1efb58a0b211340086069ad38b7b0dd15c2345fa8767ef71254ed1bd5c35f742b1d3f4765ff9007a5477ba9e5d3d5a5cb5fab4efc1cad73701d4776c6c4343f42b5d94a9eb78ae428dfe5fbdd8e6ece09d5b75cf4346cf27db856352225ab04e6ea56661554fbc39916accebecb3935 +d = 048a313c0c11489939fc0cffc6ccb9f179093c4e13141b92dbbaac441b7ae878c9d412066e95615174a24692555cbbe904a14cf +Qx = 0677c2d364fa86b8b0c79af754e675ea3e806d5583e62087e01590b824d2730e31326591167f02bdd29f8178787c4e1ba9d2496 +Qy = 0e7f78c423baeebf6defe9feb8ada8874cecab083ca2e71d9d8a3fbe846eda69262a1f5b4a3baccaaa4f2cc87220edb1fa6b6bf +k = 012b8df87dd935775b80c62ed6c76974fa5772939a9e7372cb74e033fbae4f78d75b8bfbb82240cf91009b5bef4d63ded04cbc9 +R = 000590a9e8de60b5cb181a1c11c2f6115c66b05e71e0c558ae203ee18e54de68016f4c7ed2f01cb0cbaf1bdc45218c0fe2b1552 +S = 0521844eee9168a501e235de5fd19c84f052445fb0e68bba687ace45d8630070ddd3b73034d1d65788a51acf91273fd187a24ed + +Msg = 7910bab15b6429947655e33a67f41b76f1d7b71534f8904d6a0472c2faded038565272d0b5f51aa915e0d624e9ff48d50ebfa2f09324864f26c29ab73eb39b436c5c459c7cff4d2b62992e3489cb4ddfc05d7366b161a463aa1b782641d93507de43c8cd0a0a0a9d1c644f4554e3edaf7fd794248110ca9387e73ae5d00d299e +d = 046e2adfe5d3549e1e6fa1fe69a7cbb4ac9b111c8903d544268f8318b0b47d4b78fe3e56eb5e639ad5382e7cd5bd4b2c3e70ef6 +Qx = 12902439be50c97aae7b40328984934d6c843415f76f3821c8e8323aba96ee41359e2ce5ad3179063ea5e2c7deeda4d728d5852 +Qy = 1eb59fe96b269cc973b1fe1f3720aa9aa6ec4cf303c5cccbaaebe6ef7c9f5356ec5e76b26b09479d9831d9f5aa41ae1d61f4c47 +k = 031893aef1baee0e21b50cff7002435b058d73dc4d8301ffdcf1e0c315d18c2b16f282e5b294dc88369b25e2a1a19abffb578ab +R = 039281ef10b9a2664b755a2db67b3c410276a424edf7681a5c97244eaac5826368a8095f1b9b76f8e490e2783694d5bcf3565ea +S = 039edd50721dd35d1704167e8cb609f309b9ed73d3c1eece181f9582aabc647c5ec8bd258e5802fb0647372e4c3929cf59ae2d5 + +Msg = e6fc96e060b956c25d50ad25443f3c30a12d199a47451a49ce88307201dfb15ed816982e8888a28daa92eaf3c5584ca6ab2ca9e14577f84396de2e0ac214b24a2279f5e7b344fb7387e9afc8f0a2b77a4d024a20ce6183499b17096947444bbb753d9b39e5c694239d28f9c454bb05468d17ab564ee6cea3741747ccb7f108af +d = 0480103fd6180a431c837643566706e2b9597de0a1346a224d176a5b2c54aa4d064418ed654a5d39f4773fb509f86473ebb373f +Qx = 1d39e2772ff3d26c5936ab347bd5a2940ece42b1964f030c59ab453acd7f44716ba9d88f0828de1a4e730ab27fe1859915818c6 +Qy = 140b1b66b0a87de29ba2cfa799d944b3b898fe7ac43de68b01fb41464506e2f014e0d11bbc0c24996428c93bc1a5ecee5956bb2 +k = 06e9bd0290548d35168f7db7fc292bc161a7710b78ac49ec6a42c9423afea1310597e5978b22b4dfa192489323b2317e4714d37 +R = 055dbf88b6221dff098345226d59d396b6773611ca6e747d26d5d758760d830693df0f5c602859f9caffd0dc3790dfa08c527c2 +S = 03e679447b622c4b06871f2337f5a24150e76efcef9698c6fd463867508e9d7b803667c32989a881c98a90998944c070aa58b17 + +Msg = c8a8a0d41f35537e6fd523ee099eb45e1ad6ab54bed4d3e315e20227db03292e39dc1a91bab439c0d20e36e7fea6ef08983f390a6b5551ac3b4f1895220b2867fab95552cef9bd8702962839bd9b2c72772640e7d3be3c5889d226acbefdcb448432bc503e5a5fe7ae9ae7696c720a799f9882c64ae0385f656074dd8a6821f5 +d = 013c489e8311c6bef02c8f58903b2ba2a98a27cb935d75a30d320af9a14fa3cbc6adcce09235a9eaf333dd05f4b2f1694985dc4 +Qx = 046a1c0e7753cb499d19b2805df770ba54f1c6e03611c302c73c72902867c51c1cf9ed154b8f30f72002421029de7ba2d8fad22 +Qy = 02aef9c34c7c8216a805a58dd88185f40493086213cb4c85e4d226bb5e892aa37be353d9123e9900f8b0790a43d55a19d78c48a +k = 0491dcc881731112ad5e9e1df459c27381a7bf8270f97743466e178bf5ca903971b362b73fdbef8a75d4292e63e225396c7b32f +R = 048425b76147427b8b1969bba3809dd70f0fda24cfb0e92509a7824f027b61cd38441a691efe213f3c331da8c82f94bbde511d9 +S = 00df36683f22e9e86c88097d75409ea297d391550440e4327f67b7af1b09141a0e7a1db40c4b0bf4d60376a6636dbeeff0b6b91 + +Msg = 3407cd6d2845197cd7414a30fc3df7184da204222ffd65c4d16a12cadabf603de8043ea14f5e6ddcc22d3572dc06dec1a23cd924e1847ae285ecf01754e2d1247876431eb98e897e47412a2330bb32990f9714122109e94b38f82cfdbbf2eeb4c6f88f5dbf9f0ccb47939df8be321dcd9bfd9bb99cac9f94885fee7d443fbd87 +d = 02419bd2200f8e1d87db848b0379741685e680d9affe693eed49d82931030b6cb05d21a4965f4e1df2045c8513a8f574ca9f2e7 +Qx = 0641a6ac72455ceb142e00d6854acc5f8b86db7bb239a5054c1ed48dffb6d050458ffea8adb68613ad3cf5977ea7330268abaa2 +Qy = 1a954ab7d62796e5aed370285d3bf91ddd34eff3b995d04967db41c2171cb2157d85032c998795ed476c891702d63ff0108f45a +k = 02e9928f427a86c4491a47b31454ea7d497435af81c07bc96fa61f4507494fbe4ffc1fffa8faadc2a44c7e69c4f976661750f8b +R = 01e8ff4cb8c58fa48aaf61488cc4118df90e8c06cbd88234cc920e5795597ffdc0ab967fa7461082a49de56f02f84cd9d564316 +S = 06e77ac43fc7af3c126f997fe15011fa87a27479fbd5af48e28ccc2c1bedb6c0695291dd67beeec3f17cbfecefbea46b6325fdd + +Msg = ad43f8440071285d01fd79244907803601aff4bc5d14c77483a87cd742144d41c68269d76c9a83c09d2178bbcbdf99f927b378497ffdc907a75a3b0ad019e69758dfffa480871eb6e1e17c8539373de611a557fad120d0bd147f8debe5f09a02e56fb607e9c1253ed592071f042e42fee39775b407225a2b86a950d81bb7d7ef +d = 0722951879a65bfcb414e11712ee9431eeb32319e0ff28601112f89276ffc2b96eb65c7fd77d023f09914a53e2aae2c84652bad +Qx = 0a0304caec1b68b34c822a2a031145677fe515dda977f6932ea2a3291c6bb4fe8f297b7d3c632f9b3806a8cd26e32403c27fc7a +Qy = 0012d4c3231898a4202f3f251802c690353ae9cc28ae5089e259149bce444d31a38927dcb42ed613d4818e235884749057ebd02 +k = 0331611e81d3e6e3a24cc829c1cb9087a8c6f64c286e5f1acfb1ba764eea5ca55be544d3cb95fb98407fb6c8f9eb1b3f7ae7386 +R = 056901f11ec69f91b31f7f41f7856752568b7d34ff3af1a2259fe15ae0b01391eeaffb629976525fce5d182663b7b23a8001bb3 +S = 04e89c3155afda2e64c749536392554cc299b70020362e6701e3a649f0a63ae5a5da4efed5c73b5e8098c0cf47d6f4c45c6fab9 + +Msg = d61a3765229dcd0b4fa6c57280f851ec2bd54d3ee2436935cd6d94e0120d0844adda163995fbc4cd9d7275da859ad8ebf30af9efbdcfc31c7c9ef42bce9011d37cf9d15fb018e117bbc102f7d05750e5072f73d02c2f45509a55627a78cbd9082cbf36807759d1fe2ecbb92ab30cf28434941712d38bdd100955d611987b5968 +d = 03f5b5a772d24bd5454bf26759dbd433fcc7bae4f5c593664c4d75da0cdf9430d7d9162bce3d7f6e13a344259da5a7d6a1635bb +Qx = 1ca1441b1f6e13138880196e69743206ce09c439a507a11c0fed069d4ed23676b27a3a337c976c276809ae725229c9001708742 +Qy = 13c47b14e3069af070869c12f0f39e35a6f334d98210d33c9da01ac80057911f5a392fb5c8cafeea01c1953e97d47e744160243 +k = 01484461d02c0337e8113e51aa7d46330f57d423b79b580a544d372524a853db9dac0c0d16f733b273bf888271135a5162e70f2 +R = 0256d7ab133904a792987f8cea69e8e3cc674cd3c577f40ef6f12b31f52ac6366a2a3ea2b2272c7bab8be00ca0d17989b6801a5 +S = 020d82cb9b3b1f25d993fc18b7303db4cfab91c03a97b249176f9bb2aa5ae7f589c74060d25058c7acb6de1e888ff44481185b1 + +Msg = 1f3c23636414ced48fab6763eed5b22537968e6bf08c178b3d31fb1f6ea773c6979759701d94bc1bee7c354272811edec58eff50c93331b22723d460e56dbee90466b894354777b23b13a37d15a84c762caca70c01518bf34d0c2f072145d274b3b6c932b48bd815fe81161d8507ffbc2f783bd212c29b2887af6d2ffa9d2b4d +d = 046bb4a141c9099d531dd23ac440eff1f5b10f7cf34920b6b702311d490d25344c665ed5211d401def24986c8094165d10f8934 +Qx = 13db47ac0e33af0cc7d74f6ce647fd80cdc1849b15c349bf501c95893be5a440f85b9b029713339fb888d7a93632ea4e0bd8136 +Qy = 1f26f7009cede02e054d6499c9280794184e212e3e1091032fe0e3c189de26d04aa8a5909569017cf06ac2a20acf579ca81f3fd +k = 046e55a908f13441bab63e5327ac346781399d5a9035a72aa21df708b814b67e420b455e1410014cb53e6ab00f526ceb396bcf6 +R = 06db7a7b03d6a85069a943fcc332cb8c54ac978810374b12eaed4a5fa5342c8eabaec238bfc6107fd03d75dc2c6d258c218a186 +S = 010a4115161765dd0c22a0915a0d8cc01905de91d3f08c6d2d85a6a92e1dc00904f3be67fef000ce19f57157deb9afba7582b59 + +[K-409,SHA-384] + +Msg = ec69f2937ec793aaa3486d59d0c960ee50f640a9ce98a3becffc12d6a6c1c6c2f255d37d29f9b4d068373a96beadac98fd5203a9f229bfc70bcd449640165ae5128e3f8d057769e28356e73e35d8e9af7876f608390090892c67391ddfcc1c332aa61efbf72d54bc615998b3be8ab0a9d372784bea48c9fab244482c75cb2de3 +d = 06f2c6e9ea8109223d9a349fce14927618fc4fa95e05ecf9aba1546619eaeaca7b5815cc07e97ae8cd1e9973ac603f84d838393 +Qx = 1f5a9824584cbb0d5ed57f677caf62df77933ce19495d2df86855fb16456a50f157d18f35ff79b8a841a44ee821b36ea93b4f40 +Qy = 1a88299000c07a9ad0e57c22fa8f15218cd90ea1de5b8c56d69506ad0fd12b513ffbd224cb6ad590b79c7677a8eda47a8bdc484 +k = 042325aded3f71fc3ff0c84106f80a10af08d76d5e710a35d462e880e015a36d063599573ce2044537b9f62b51ed4fd2ed8b860 +R = 0667c74ee2d632aed13cad47e0b46a5176940652d7da613e4965876e7e22d89994bdeadd6b5d9361c516fd51a4fb6b60b537e9c +S = 026a01220a1166a4d0172428753e98caf0aaac5b0a09c5a3f11b2645d243991d141f59d6cc502ac44b70e7c48d6b0d7b6ec4869 + +Msg = 70e11efc78d7f079ae41ac3c31c96d3220f4abfe23814a2a4a78d9b1a25e838c3408bd416062e4b0a5cdadf0c6e16a11e00f59711b417751f5e4b43ecad99efbdb2a81c91a034e89edc94eb552c3eba62808563cdf64453a1db07daff8742aea4a9fa738e1322da316b26dbca2954b2bc0de6da7518d28e6677dec6ba8af4285 +d = 004212b7fd913d794fc6bb33e0276e349c052c969ecbf6afc89b28f75a599a9242acf74dec9f374361ba296ba42a38407f9b7d6 +Qx = 19220ebacedc60762877881262c0c3dc0c8a709fe2ea16cdaad3b680d7cc8aae8617f0acc9b5c9861ede651481f39927a24ecb2 +Qy = 18afd77bc7fe54266275fcadc0fe8d4c0dba7a1264c79bc31479f4bcd02245cde991791a7b7e65fbfa907457fb6d450c0985ae4 +k = 04c01ff477786304b24cb9c95ed70ba376ed6e4f6b3ab2f99ac575c92d3801e7f43bab072268705d61d3e2fd881f754b9c84235 +R = 00987cf8ef2b382fb25a6a542e688aa96c098f5d16be0c7d46e961b4a4152c372cc0683993843bf5a04f81e6068843582fca48c +S = 036fba32f80cd2e66bf31baf87616027c5b107f72f11fc766b42e2774e29e10e860577c0d3a27a3b49754e6a189680b7a638408 + +Msg = d922fa515e3bed60b517a2d37cafe4c041e5ab4b5c8d8d4011bf9fc4013dd8abf7add71fcfde5e71d6abe76bd0f749e960cbed55711c87b5629a2c39cff48ed7d0feaf5cc4765e576a4959521f9a45fcba0dc65ae618826447e02ce6e1cab5ce8d6c96c3211adbb0660de7df7453f3aa726016941d00d8ee536cc106a603d126 +d = 06baeebb5ffc89c94c3e8b37b9b0904e7c4b251d204894655bf3b1235710215c29820b9d401c9ca7df1404d2d62d708aafe208a +Qx = 0a0b2a185ad7ddcaa0d8d21b643a14948d3552e25875506d64e236a90d274ad1ca678e628acc208bfe6b56c02df9f5a36aa94ec +Qy = 0fef210c7137237da8ecfc2f069cb9390c132d1c6ce961f2bb3ca925ee727c967f8a46727c8811c94ef66f20836c661a5cd1c59 +k = 02185be104ad16abfe4fb83de5db067d37ca58510b786b109514debef56cceb4dd6ebe53b25127b85faf9c28b56d6586c26d60e +R = 0404831192b4bd453c0a7e850815ac3fad88c7a2da27d29e83ca6f22213635a366018ac0038b1fb1e4c512cac15b614fb69b3e2 +S = 06f677c361547c91428d0e200dd00777262a138afcd828238d132c56b2c232e2b446cc693fdc4013f05ce7021aea5b5b2f1b34f + +Msg = 4f64d0f6bfc542a0d4347576935bd68ca88524ead03b8d2c494061d0658e6c3e14576b5bcea5f2f992f54cfb52b5c7cf1dfc517205e0454510eef1b7054a8cd06ab53ed2468193f98ff0dd62faf076549ab2a270f259276d5729996c120792c6f466a74ab65035bf38ff2c055b43e2a8b8e2449a2375ddbfc18242157bd905f8 +d = 008e5f66ba53e7caad1feda122a80c32c82d2c32a7237b8ee8ead44ea8f2f01d77c7056b9dd60b92d051f060da8532c1fd0e8f4 +Qx = 1a3d020a0c7e3f3fe5b3d9fa6b6148cd0c481b4f9e14dc85aeffff35e62545654fc313f930ca2e33dced28ec28d0fce6ceaeaa2 +Qy = 13c1ac166c3c088e8a4a9d44556e3344e52e8741ed1a8b526a45268086e2fe54c24d398553d509439ad4957454eb68af594e683 +k = 0095caaf063abba5073aa7123b2c0e1666d29bfdfdfb0c484e18931d756ed0845ea15dee1e9abcbbe4576113a8806aab9476b16 +R = 04d6e33001933221e9eaa78da5874f639749c7396dae90f2da4ccfca15b50ee9e50521cd84d78a098e0c383fab0186b3dfe1b3e +S = 001e17cc7baa3e9ff4d882da970caf7d55b4e0fb7f0cdaaaa8290fe2fc9cc31d51b34b5dcc825bf6799ce22fc95382d46f3f98c + +Msg = 7047d478ec5282d55db8c19c97af10951982d908c759ff590f27d57e2664f08d526cbb2bfde39bdbb1aa3dca5a8d3feb50b868be6651f197abccc9d8040b623de367e2ea1d20ecd302afb9e273f4be9f3f64f2c2eb3f92d5e0e375db6549da2a589f0604bc7146562ccefd15995a7c4208f640e7a17afbca69cda4e173380523 +d = 04ecb22b44e809f89b16abb10be062c89b41ee34e110403e42a20ce59a99afdc22f6f6dda56e1d9d1b8ce1d057f390db111def3 +Qx = 0dbb4a6ed11f36eb78417269c1b1e9725eba1666591afaffb5582c8b4d5bee1d73922b0164a05bf21a12052171abbdd31305552 +Qy = 1eb385afe8588ceaac9f39a5cb4455e02bca48f3d2242730e0f9e06ff1db24344379f96356531676cd5af234a120f4b61f7e041 +k = 01cc97a718ebeffed4ca7a9a4389d6b0fafb73ab000463b68b5580267aec203b6231cfb5afbf7ad8192f0947c7f40d9e060ab32 +R = 021a29f56c31227daf0dc5dc919434978943b80f4b18748bb5f7d6702153b966a0a4af6f209ecfa3aae0e4f32a1b7c6ae58a55f +S = 06921b2e2ab81517a0785c4ac3be3d7d4b4c917d7a1e4313b123ae96056a2a4a66d9e00819d8c1cca5bc0d75e4e05477c1fcbff + +Msg = 1a8384b4771a410663e56eb36c5d9ede8d161a8fb0e31d3f74bcb017b9e31232bb2e2f4c65a2d85bcd1cedd93ef08d4bb4af0095731574ab3f2762788a1ba3bf0ee46684da8d9dd384432fee99ed3c69213d790a5d81b351063eaf2bda71ca4868ac36be1b571024a8bf09039b347fa996d5d161078314e24b7d073e05cb3d48 +d = 051f9500c15ae73d6d479b9f3d2caccc2039d8d03820befc2aae3bbaf65d59bd9cb3c4e3aa8bed5b3acb70a5566047ffad80729 +Qx = 0ee8ca7f55225760c515bae053ebbf4ab23567f95c7091fee2acfff079eda297ec6a7e9d526e12e5976431f9d7e52a2318ddcd8 +Qy = 185e2c17705a2555fbb8afbe8e41ced8ace95c83e198be3c7dcdeac8c2c5bdd988800f1194e553bd0348ebe6c29c16f35d50895 +k = 073f96451cab2d3ca9810e265b3461e0fbe7f32fd6702f06891b97969b133eafd68e53b526b5e32b0d06ab61ecd75e1bbb21b7c +R = 067d55e709f6966cb2082d8021a313850c53305a3bcc926b6f9a122181665328fdc8e05a88de812357be85d22c61c919876fec3 +S = 063d5ee4a63b1fae39f266a9f826754f5bca4d7bd414dedd16858b5c6ac2d4162e28ab57215c6713320d3d6960f6b55e3f1897b + +Msg = 43513d6dd8bb0af7a6f5a2b35f99957d335a48d54f2c4019ce9518b35441d4935518976ab1df37110b5b53532cd9e2c66d9f87ae7f683d7efdbe1775a6c15eecee84c6f879999d0706f6779dc158c111fe8d7201983883bc8334f51dec60004eb1087347bfdab20f8f2f260556681e05fdbb8a6139857fd3bb2df5bc1f2dc143 +d = 00cf01dc4462cca764f4f8cbef48c51980737b9b98d1384b8de9f4c733829db7718a9b5eaa46a8475c2144fe4454cb8eeb0a443 +Qx = 0806457fbb7fc577497c937600c5a9c4df2c20cf7dad4510e5ad617fb2849bfe6956c3efeab6b805cb7b63bf5d1c94e5ddb456e +Qy = 0915071cee2094efdcc155f893da8d83d9a5c234d0f04f738b7af5b8fddaf1d3aa152fc11894a13caee0009bc106a64323e9dda +k = 024968902b50febf13be11821d0d316f2daaa07737af45ce2e855aea6ed58f226d2279ebe4295c5d7674104bff75b899609561a +R = 0549f18f1d654f26ca134df4707694e5d9b3693bb34ab5123ce4d9e4c2b2d9756ddad957a4169fc9bcea29944903080f6f5d01b +S = 021887355c6360bc4ee59f1badb5325763e9428e60b31a7abed06ef03bff0b1265662d604dd2e0140c355c70fce1b56ab143201 + +Msg = 752300bc5066d0efaf807183a41725e349907b7339d77c79921ead3c685b616b0eb97e708f3880fce0136c510c8cb53b22cb424af6f1c34633600939a0647c02d8f9601f9416f1d24a51657241fb559c25dfba91402cea43bca1a13718b3945b048725f3df560e6717cfc6ebd894e29bff1e0c7763f15b8ea93e67385f059598 +d = 063a9a565497974c6dd459bea0d1196d74f263f333c31b7e8591499960e1cd79e2ef4cc8709f6d54713f873b16e7b0be42f71c8 +Qx = 18872e9d9410dbde671fc050ab88101f01d146a72d62b630b29790b20fc02cb62cd0ebb5b453a46c60ec2d2c66de8715c320578 +Qy = 1b6af51db1c42b743b89be0900d23f7da80b15f2e7a2a965c7bc13800bf58589560af4697f873b6155194badf5a19a653e63da3 +k = 01d3278e6e78386146fc15006258d7a62a1345db3c2e44fb8d3bf8101727bef254a9fbff157072326a85b5ef4e17c5b0212bedd +R = 07bd5b54d9c6d6f9c87f4a66472be2c4bb7f521ae56c1dd71781d95440b0a151d206ddf627e5ed3f9c7df2fc914a78454e97616 +S = 075e39ff66ab0e0d1b46f9679b95d10b692874d45fd6898c569aac28a53569646bb29f8556e529ef83a15c574ad5e1c82878154 + +Msg = f620603489944769c02e2f902c2299dd5f32b5fb463c841b7e1fc0249a85d2c31684bd3daacd97de8291c5d39e84d6e59d3dde1b30c181bfe8d31b8d8e080bd191690a67fa00024ac8c1b10981b40d4f88789ecc58fc69b15417fff34834e23453bb9933a43d08afab74d056f366b40ad167b51ee5f008db151a12b467d3eaa2 +d = 041074dc186193d30aac7cc6d269b938ab40b257d095e54ba79967a377a91b8f73671470cd07f0a3d1db7cf0a31ba9070625e43 +Qx = 18fe9848dc599a759d90530480a6f11d052d2ce21a7275769ba02a61658c3b69ecc546aa6599e6699353ee1d65ce533c69fb218 +Qy = 192b9c41bfeb2af4f29dcd1c43d3fe72a070b5d085d070acdb8c02f0dba00c9471df1dcca1006709676bc08b8ddad97310e25bc +k = 036447681292dc781f7f4ed60126945354ad1df5987266038c5049d698b2ae12965b6fc58f3e944c4751406087859973d8afcd2 +R = 0541c22a6cb984cafddb3269ba3ee56af64cb36d03b7cd1693b112a7df20f0422219f85c6820130ad53ef69fb66f3326bb863a9 +S = 00fa66b163ec3582760b048ba9a0fba9443d7e908b67d749d732ac9b6e89c1fcbc6d3ff4e02a43ee41414b15ead0cb83749e0a9 + +Msg = 5575f610762b42ce4e98d7bcf45a7a6a0d66ec7f27d6b8b17f1961249d905bc7e58e2ce0806d467f106b16285dce4544c72666d08b5e2276cd0c4e13187cbda8aecf57b1855afedf8fad39ee4fe009f204e60bdbec79b123456ec2d85631d382b8a2f2c7634af3992e4707f7b4215e2c9d3b0aa8fb08267953883a4213669d33 +d = 010820db54ccf0226161aeaee79cfd2797f87702b4ee91adf8543b3c9e79579d0df8a889e366ec1e0718e039b87a37c24d620e9 +Qx = 02eb4e313f158ba7497130e2d64804ac45a7db207c55d41f39979e0303dd2641c81050fb7f24f2fd2485b90f60985cbb15d56be +Qy = 0a190fb6c81c104164578da6bd4f2b193cd11935e1f87f14e824c2bf8c82c39f0be1a6de3dfc6dd68af8cb14f6a78f38773a7ca +k = 0118e911f676f004fe581d1855e5795e5f4ddb33fb8d409d557aeea87895b7c23a513ca0010f98b3a63f2c65da5e3b6c37cf5f0 +R = 060c7f7c47c16b294867cee3e65eac8fc828229a5d3adf8e68e14dee620e9d4e7b78c8b902b5042b5f19c94e621c52836c95ba8 +S = 008d036087b23319553faf835b793c73204cdbe2c1c2463e74de8f404e66ff15ce9384d26149e7300ed1a109afd1f915edef912 + +Msg = 81cf067411dde2d0ab04fe5fa1e28e6975cdcc571588de60a35bd956a535fbbda4affd0803d244f3f7e6902a2c9a7ef2488691b6bef7f8ffb33be09ccae4c5285265e4957f7928ea5cbabd6823297f59a7cfc9939a49f26bde74c4c69e2d38c1efbacbcfdef011213843158072be84ed3c1781f67a0e2d4e9ba76a585c17fc0a +d = 059d2a06e8bfd5e14a9bc8777958b85be5e97af892d2cdeb0ecbd2d5017952b5042349db5fedba2e26e7b85bbb31ad313d99434 +Qx = 0af276952a1216ac88ca7a194f5b27b7c98c78c42f852dfc1a2cd4c1a477ed16eebfdc90f613b6e264576a35c45f49aef8a564c +Qy = 0639625074b69346dc6c617d624d63ce415a36154a817f4e18c59a3b09e01589407077b19bbbdd57b04ef8fc2cc23c673d52910 +k = 002728f7e9b4772ab790af0be9ed5b3eab697c4710249169d2a5782ab3797b8fa21bf8c1de659e3060af5a286353402ab982320 +R = 02a7027c6f94cc236dc8cbae35f9c38102a663b84f66143e2fbf9a152b1a6478bd803bf3171f933f63509d539a54dd348002ef5 +S = 0549ecf85ca1bae6d9f0038dcef90c93121a654552780f5583a7d44a73a9360c6799e76a632bc8907ce4626c0439f1518e3a250 + +Msg = 8ea18387940035cff2f37278d321b344231075db43c7fa7fee9bd3fdefe5e8f03e7af9deafa1022eb108e19ec11fae34536a4fbac2e8c8139a081a997c080cbe8f3e2d2a72ff26edcc5338b21372fa1498e439e4d9bb12d51cc539f859047957b1b1f1fc30b90231eb06b365a4d404a1fd5a0e5cef171fc95b04d0b557d78ebf +d = 0405590893cbbe18f4ad99df28b5f9d17f8f1882269aff0b7eee9392859d68927a99c942a3075269ddec6d69c0df2d76ab9d801 +Qx = 06ce67ace45a9cfa0cb45e8e1d0eeb44e94bd7527fed6b563f1069140a3f36e010f85e1ae5ef14d626c78465cae43230090baa6 +Qy = 1a66a58d87621b63ca662130ea342db029acc2d99bf76cf6ec4e53ba71bde4b00e508d332081055a65fc6f44a96f4e947d729dd +k = 0035f09e0c15b41c958596ad3f5c4bd4a3685ac94f19fb97503fb5fa29115cb18fdff4bd104535847ff36650b7461550dacf2a3 +R = 051775fe1503ce80b3d581ea3e5ba761665568ce0eb7d6a7163d8d025d76002ca7bcf6d688b6477ae85d09c0d4017aba5ea8019 +S = 035cbe69edfb6fb99c9e45240b7a587c3805ab2ed6b0399c7dd8dd76187363b2ba1def66b2c3dae4bc2e40d164bf0f4837798d8 + +Msg = 6a253c1aa17b2b1e6624afc8e7456d366ef5b1bd78e740538260f395481148a64da0b6a58cd53d7e06c691beae1a616547cd95c4d259a371e51c2c0e334c8a5311ae31e4c7af325686ff9f7a36f731010ee1a9b8a29169ceac36a060dd23611dc9713c615424888bb574ad5f5755d7311bd169336ae986c977a394bf16487c4e +d = 062bbb4f565aa0f23b88ab9029d33b995729d10fcfc33ba7c4051e2fbc72f15636a834e3ebfe604b927cdfc89f53c57f36890db +Qx = 125242acf14c7e08e9f2f0194f734841758b1eea1e37ba80b9855a14100a5f0b57bc52a0200cb640121d96769e9cabc45362f56 +Qy = 0dcf52cb899470943a37d260aa85fe83c3869c862001021660ad09b4d73f7739ad331b3566bffad590534207c6db9acf98399b5 +k = 06095b4ed8d51e37f6c723648af4cd4585d9d250d7519139f58a93c75f197c4bbd1142da59769a5fe178415c677caed1c3da667 +R = 041b212a54d4396ddea2898dadc363ac3ec5385c9b3b8ef1ea17c3d2f751d4f79137238548ad759b5e1700d7d78072df3bf84e3 +S = 0149242afc524b0c3583037da153f539aad85aa0c19c6c70852e3c3923df8c3abd0189a2abba872932eee2e6f45e02f98e810bf + +Msg = 0f91d0f0139faf3b90a3d4bebd7e96ff6bb6f90f6c68321fb392637d8ab2a60d649a7b7364ee6e4e274e1a8d342caee36cc11c56c54247fb0a8e8ef81ac4322b454dc9a195dc54567bf47ec8d4fa4cd32e76d78ea2d08bcbce3edbb68fd8597e56d5a9f2df4e47b2701046df89615961db601bd8204584a6a6cfbb627e2a1190 +d = 03fad7031cf8810544a3e4bd1382c0a2e22c5a9fe4804ce67b27591fc516ee81dbac841d399327168aa6abd79e2b5ef85df1528 +Qx = 1ef0f918c683be57eeab95d5d1850bd492ace7f4b37785863647774a028e963ee2c0eea801838aa8217fad75c5780f1c36e8d4c +Qy = 1d5dfc69bcad46bde5539c58ebc89e1db2a3f65069ed963280cc2cf228b2568bd53c6e0e164d6b63a5d3c2b8e3be9d5139a62ef +k = 00eb16d784e2aed724cf1e4b72fe76b00dc80948c07f9c7524eb0e83bc59c12a8ed16fa7ff21dffb8bbaa82925848a19c93884b +R = 04a07e79b4f771363ad4c46cde0aadf3df4a233740a89168c97b54559029c51dc2c79b7cc94a0e4e3d2f94e376fe47993da28bb +S = 0360f559d37a777119b2aeebf00cc17e2edf04a2cbdf74366f5d34368d2eb2c92958e4dc2b7453d5a509407a4d4643cc0235f57 + +Msg = 50c17c1fe4dc84648e5c3c3ab8f7c971d4c58d8d56d2b5ddd92e35e6792111ed8dac7644ac8a07ca8bb4e38e071aa47b22ffe495e9083f9bf781ac1b5fba571862c909c7aaa7b8d05ddfb7ef61c99700de734d5658f44ae9fc908c85a2dac8e7f854d6d24be805fcd7f873a91252985c5c73129c60177ba8fd99daa87b25a073 +d = 03db41b4f637fe7977c90e4f1a21799baaddd1826c667102414877138436cfae1b9959842b8097b5276f15f2b982ee59df263c8 +Qx = 18eb25bbdeb41c5d14edc675fcac8a523acbfadd6456632bd593ab5f694a7734b163aceb6e6b3d8ed83fa1cf7b5adb9871a6626 +Qy = 14975abca1cb769a243936e65123167e535279197a37d8c92c7b138f31cad4e95c5f62b06f438f94c1a61634b34be7b96f09fbb +k = 055fce73c9c385f007256253281c6b9d0930d127939026495d0a30f25f77fdb6b334043c39fad4223852f7101fce72746ea205c +R = 01d7c26e0236afeac032fc5f3dbffc8c03b04417b514adc26d6a4f697b4e87a008d5ae97544a274c25ff66b98111d7c651c9381 +S = 07954191fad321e7f2de95a87d5a9c4527e658ef85faa6622d5f34f8bc2b84c881ededbe0281456e9b70eaf7a207e253d216533 + +[K-409,SHA-512] + +Msg = 3583a3226e2dc463a462fefa97024e6e969c1b13bdc1d228e2d7823d9f7c09012390c2535baf086588000e908309090daac6e6d2b06d2ede6fae838ed47f30b5b481185f607a3586f6dea47c8f84e9d3b96d5b0ebae2462fde1e49d84d36658e87dccf5e30c0937feefd8862dcdb1a1ca373f6ae41641502ac54df6633a8cec1 +d = 065b76c6093d9c49591293471286df1a4444e60d9d06cfa114e175afb5f119d2abeb273b0596019a0ec5db5b5869f2cc827b364 +Qx = 0266321fd15bf6b1af862496f467069819e3860f74a07825e68f3d023985bfbb838a49b6a41b6515cacf404ebf12ce0bd3d6d70 +Qy = 01593c7a8e629599e63d3282cbea78023518277e6731fe8d88cbe525ded554b51a7f8803ab9e330f210619dd07df8f67e1066a4 +k = 035682af873829e16b72bb86f3ee99b5d9f052e4a631b07f87d3b361c8d8260a877231dbcb3f4d461b4a1d4467824a26a5a6414 +R = 00a483dc2dc6408c256fdf63b04d71d3c58a08db7167da217f466cbbfb2d68444c10e87a9a1bb04efd71135c00226e58414d407 +S = 078acfad2f2492f74b0281d53e4224c7544588ca9ceaeb16bf759b20c2f3d3ed69c64615c247213d51800569dc8b00078de68ef + +Msg = 60ca58462d53d074b370127132f4e59f5eb8d15594dc721a94286afd082a8934e52462c9c1c3910f8b50d7aa3671dafa5972958d876d7992467b2fee3795a6f9d8a7bd3003a8582ea8c003aa1e02c08ab6804d85bcfa13a815d75c938671f0af0706c68bc70a6155708ca755cac2fbb68b2952208d63e0e2e3d816f04c61bc03 +d = 07e9993f3fc1fdc4c376ef77ecded96006ac1159740bd1b2dc6ae3d97e15a67383f1fc931e460b9af3fe14a54e47919667ed06c +Qx = 189b82003b546f94c066963239c7a590e064b88bb4548678853545920e413f2be32125e40efb82d2c9582d2d8269c1d408a7ff0 +Qy = 11583b267727ba6c1e17a244ba7acdcd836986089860ee312b6dc2d88a984b1fa232eb0419730db8fb94a5e077009c1d55979bf +k = 07574dbe04e1ac2bb34e40f32d6f6db364a95cc5770b79888d72b74bd4dbce9fd91136e9e1152424d76688dc995bbf2bea34175 +R = 009e42a63b41877e200829356a2191fbb6f2a9a234be58c76b0852e4f348ca61e7492f90a37feb8b95a6dd6df9d1a2e61c63b4b +S = 01499fdcc804fee8193de080b085b7513eb8022503de5f64dc12c04c0ba24af30e30f63f0e3eac2c82eb20c6672336f8732ec5a + +Msg = c749f9bb92ca9957ca6d0124206ebf65e860ff38a225e241950bf4526cef3f4fa9184ec83f71f813fe852dc08eca6b45b14fc7f2c6a19296529bfda007efe9d0d26492de2a902b45ed39603e22f0a763dfa5deadd97ef6feb859d860baa2cfd1d066c0be0f9f4e0e2fafa69cc51b12e814ad2e33b0acc0bcbe1df8cf018dcd4f +d = 00c11e2979498695c660a2bdfd105b115bc4ff8664ea15cfb40c725406c6fc9a13027bd1d72ffff6258f29e4e19b845243444a7 +Qx = 0904a9bfebc23607c7c89b7aa89315343852cb894f54fe42ba4225285e58c6bc318b55691aa6a6ef22eb11f44cbda89f157d7a8 +Qy = 19cc1826280e54832b455f0ce0cf89bdb62e973a8e819fb776b1a202b4f207b8baf9072929c9e3f6a8ff996d6d529de899b024e +k = 070fe023c9341df9348f08882bef47bd8dd7f13db7215d1cd52cdbe7919031a62455ca969a8cc6db0a05a0b4befb47c142c4f34 +R = 035e7130d59d92ff8c4f264fb2c346e052bc305c7f57549a0fe43cc7cdac6aadf2ce1939222decef4e1f900e3c2fb2c52bf53f5 +S = 0008d5ec1ed2091309ac11eb88157ba5122bb9b5c858a46769a130f7a941818445664ac78325e0b6d2a11bc89d08fe0e87a5bcf + +Msg = 4de8414780ea20f7943b1f1adae5e3962d96e828fee43bdbf2831bd71bd25df2976a3be37a7a667c7fbe1200de578920090d131a750c9bc09bd95b261234ea8cc25423c4ddfff5656d6b32da6e2f6f530e6673a8660aeca31273bb9a3a21bbd7031a2fa71ba37c004d3d1c64b2c0798783e47b2efe1a208959ac16e35d444245 +d = 068dfc23c6635bd1fa1076dcbd456ad6e8df7ce7c1370fe275803befc4ffad007fd062a61cf1d50b93aeb9afe1aab47a65af82a +Qx = 05591f8cb59ccea17bfbcb74e69f05218d16175f0547ab95f507ef8d7426c077b52b82dcd06baf6eae7a66bc72422236e589e42 +Qy = 126a01d5c2331a2d00949e07ea9242ebb50d830b0aaa74bce841d4e43bbaa9e9aaa01ba25db7a8a2f4d72977c0f016f625cdebb +k = 070682c9659089a703dd9fcdf2f3fa0c1d1ef5fae3f8f1b3dda55d9b611770244f8926898c904f6952c1847d287bca21db4dd59 +R = 02734111e3b736ae795929f835701bf290dd50c0fd625738ab2769242c1403197a3f4dc29ca618c2e292c6bec6dccff71adb698 +S = 0755292cc5363fa74e0193a806879d3a275b4beebc97250fb230efbb8364b2a30098c0488bcc6e20449622d6a5fd2ae24d7abe0 + +Msg = a081d54232f84bb19dbd52ec3812748e2e6486f6cf1b177b27929504ca878036547eb43531bb5b3edc81bfe105370427e92831d2239cca0106d031d9fa8da9cf89c6fb6401377d5936b6329ccad854e5567181b8f16a37c35f333eaa0ffe91d727d183fbab935fdac2d5670dafb3fba59e4fa2df1746c58dd8360fa08af7f4e6 +d = 040807fb888e1d9fd33604546656a493629d94d4a0a9de2608962225ed158167f9e2438abe2d12a11e2adb6c2b66ed78215b0b1 +Qx = 1787c0e6c55acd69bde9b0a84d6022796d5b5c60fe5357bc0fa4386c16f61b38bfeadb6cfebee7e7701bde24418b8b5642afefa +Qy = 0d9579d271ba3d5e2327eb863cfdca397070055b97714e385ffc2fc23528f696dac1a4d0e535641f6c876f1819f2672a8c31cdb +k = 010b8f5356d8a029659492c444876f1d274b82681d4f600cdb5fb2afde13598ddb71676d9ed86e83351c70678886e8237a865d1 +R = 0304f43f9705d189f47ee09a079494030b0756993a93e4c6ee6b5e664f63431f99e505747c24377e5930f13492483e6cd06ebdc +S = 0580d4707c97f0330f908042a6cb2a2b313f07bab34774ee03bbee63a4ff881b68def47cd300fb49deb49829bf486d1efad39b8 + +Msg = ea60266f1538565b3ff42fa4bbfe319be070329059c52c8bc04a7da2824f209c1145a05e551ea59ded8ca8439c328f6907da4e81d658937df614be98c7b8648818ea80ef40e49aaa4431f4a211d62acf2611f5d60c446b2b25745078c643859be1b12b3141a09ab765dd63ea1f2a2df015eca0840087a5db378c4c4cce76cba7 +d = 033bda0a02badae08fe40c239b9d59e5bfe1c4d4b9b7a5acda6790bfd77ad08dde5e93a2da80ec54a7f88146d72218bbb88aa10 +Qx = 02dec536832c8acf007daa66a47e4eeecfb6991a359f8c412299ef56c6ca2faaf18c4db708493e84786a7837ab74c5fe0644cee +Qy = 0906c8f603b579cc2384e0803d31d577f7c91c55406db3b2db91bbca323fdf3cb6d010617ad1aae7bf414c4d974f22e6f05af53 +k = 051e8d027e62db2397e4a807d98a24455a76eff6dc259ada89e794dec1484b44724894eeba842f60b73287642570460896dbe77 +R = 031769e6777444095d934d05dcdf82405c43ae91ad5fa9201568ae2aba25712717f1af2b8f49f6eef373237bd70c34889d0d271 +S = 0023498aa50ee095f33a4081bfd70a9484089c85fc7a4569f560ed67243745c823cc0217d29e2938f06ba9c8790650d10fa5b1e + +Msg = 82f38c9405ef0d26bcdd5b3fce4fb0060c3095f61403418e17c337933f0563c03691fabd32ab5e896c593439e7492a9970ae325c67196d9e83fe0f9780409a930326f7e6efae035ef8c321cb9ad12461edd5cde66c04739fe079db65406b3c2d22f2d04b1a4335285513d4ceb901d2ca2ad10c508302266c2cd6079ff14eff4b +d = 04ff431769d26b8837d3e1295f5464fe82be29edefba76323e92078a6483ea0daa96221549102509a1bdcfd46a5a2e5de10c39f +Qx = 1beb74d427d849705cf26e26312446f27a7c5ff26ea9dc1aadca763254fe53a622de29cba4fa81ee2f9e0319e752f72be46cc7e +Qy = 08dfcda35a00ab77c3c47dbc05b0678cf561f575369507097833e86e523dec879e0ae9583b4261f7a73c9dbd417accd4ae6688f +k = 005aff3ad332af23e0dc38c16853252825076d602ed4c6d947be751af5dff3f59611e6166c31740b5e5a167260adf2a5466289f +R = 035c4e8e1858b9694cfef3e864ed959638ba309ba2066a28fb9d0e02a66cd4c187dc6fd8ca5fabe68acbc2074168157b685aa6c +S = 04ec2db89645018f9845b7ae31b8418a767e3570d401f41db18e424fe861bf09114d78606a056617613447d125a283be5bdb6ae + +Msg = d8506fab4f681ba4ae86066aed447571eba4fe04e6585fe3be6af2ab1000a3da68c5b0c711a85ddf3a40cb7c8944eef81f2094650459e14f5b848e6add7e580b0198070f873eb3ed5d0728eabd92bc1398764b94cbb4cdd7cc2027b9762dd10782658cd9e8a5022ac062fec535d892198c8a387b3d2b6f7c92b1af6ab7dd9e4a +d = 03f85ca1169ca7e9df44cbc6bc7d2868c9d94e8f8b699a42ca492dca0914eb5789a9032218dcef7f95f959c9554a1cd83360439 +Qx = 0aa3c77dd4324258bebe7da5338c772d3496e3fd0e57f455459542f1a1c5b47692f51c3815c9549d0c23fdc1ff610fff6847ea8 +Qy = 05e626d6aeb86dc51f3b359b10862cd33ac9927e38127f7f17426f2369d62132a2a62fb6b8354c5ca0b3e5c7c87117b4f777a0e +k = 0495099cc73c9930333ae3f9d0b7057d7c70e2bc7c805c0c6a44404739b3fb68f9fafa53033b54b7ad7bfaf4bbf7baba0dd5a0f +R = 005612fe87c6a3a164d269da902aa43c5a4e0333770ea6334f05750be3f31ee758d169291e15b1540d40b60d1bda279599f254e +S = 011a633bbc058550a597585bbc9f33099eb517795600b019255f649493d4a6dd533be8b0965d9f9d9698677491bf929198ff34a + +Msg = b3f30d34f252a4c26f396079e773142bf61c0981d912333ade3de4e27cbc72cd8a16b31807f0c46116f87accb854487d83ec8c6a61565e6fca145eab70048245db08616779d7047db63aabd90dd15acbb05eaa510072c151c0518f1b34582b95f43ec7b9484b2993c176de79e84566764467f72392ef31619426d159c91816d4 +d = 03a97deb36d68f81f50c8829d412ee5de7f9d775633cb69c09dac558182039e275fc258240517a7c4aa592e364765321f27cb12 +Qx = 13f0f4c16a47ec3a46e7a088c1b6a63ef61eaea46aa9b2c532d8df84dbf64991bdc2c81ced3635e562d1403dbcf6aab2f8aa9da +Qy = 03aaded3b99a454b820fed989dbf6430ddcda67db58e356397d06aa137fbdb365ec43994abd9c0a9fadd2887da9539bb4ab3c44 +k = 06620ad14a5835b9e9e104607c317cc599416683a60ed8865acf78ae1e861246567cf9d91f759c2d4c82cec835a4784d3c231f4 +R = 068faabcb7c716fd73f129ebc6625f5b4660a88e47dc7dbcebab321051a61e46b74409e2b0af420e1671ef4efe04973c43471ff +S = 06851e5da033da0f28a89dbbdabe93ef11331c55cc03d5b096c0522370be681241fbe71d1349f219ce57761c85fbe208ac36a36 + +Msg = 0fb13b7c09467ad203852738eda5ddd25b17d330e82c279630b0e1f0c86681f67f6e537fb00da9419114973c8559306de58b0387d86e52d821d982a60769d2f15fd5ac2ee6dc55d8ac04ee247282cb2866b8cb8b4d7b4b6cfb33bfefdff09a73d727193e5fb939ff66ac5fcb644a44f9083a790888cc538c5eb435243c6a34a8 +d = 03b1da0ffed24e1a3b5ba22bd684337f6b08053591620541bdad50c761d66201a2cf21a4cc636426456525b598e96baf97d9851 +Qx = 0116a1790e621272b56cb4579ffe6ab629a2d077b779b73e039d74f58c476283c110bb18b9c9ed63de7288dd678064de68b7df6 +Qy = 122b43afccb88982f2e07ff35468178572bd72b644322d9e1ee68f78880169a83a5bb88c6c994762a7e8d80e09333487ac30fa4 +k = 06d7a24f0fcad549e9c36dbc70ce264a75eb37b74db98b1f6a824ad1e5635be9818f45c7544927807dc0fb3bb5fd38556e8656e +R = 0232339b50bdb772d15f2cb8973f6dd9397af45cebb69adfc089bb802e9c4029dfb2078a8a26d7197de10638ce512e5904ccc5d +S = 056add03244174966d53105c570e8fa660ae8c5d53316a24cd26f24e29e4b7459f4c9daef07442247b63665f97a3c07d91a8706 + +Msg = f9b8124281628cf4e1da0cb4f021c8d19d815644cd80c7c8de4cc62722904ec4cddd26cc4891f30b15098a25ba6923c6abf4774deb6e1883fbb409862f94467e75a725e7154be860fd58347577c83adbf18535c54b102220197afa062cc1c84f6094490ce488af4a08d2c5b808a2572e18a59de96c87162f88413795351cedc1 +d = 040bac7e0d3b54c7753c79d43469e310d876015d948fac4e3a9765444754476af72330e88d79ee6119697aafac8435ab5690754 +Qx = 0bd4fe8daffe47bfdfc43deca20b15da7c999084bee8983c62e3dd33740143c38d8f432cbacea51e6f53994265b2d8f4c393f6e +Qy = 06d88c33c31f4e143b13bedd5738bc1191fe6815a099fb7b44617fdeb08daa0cb74edab7f9a8c67ac1e9c0f0fb21a9f02ef4b6b +k = 020f2f6fcb3e471d47f21fb15301784f7cf3632dad3627a9ebfce587c0097871eca580bda051b100f991aa6de5edd3a7684e839 +R = 014f8884b5107e9ee5cf6f5d137ec9d59a85a6fa0431053d58a1400fbf0d518e8910179da1160de2c6cc8ea8ba8f3af8e0e1f6a +S = 019aa8d55c8d876989f9b9559db0576f91c4610dc9187c74aae2d4f212cd94d90dd81ee4483d88d866aec1ed469c5e3eed7d90c + +Msg = 4e3cd6100520db050af0daa69fe3cfe6603a223d4f2a6318fc5836db8640d4c7fb80bb781302036d2d6fb8e552b4eaef3133b98ba2d36b9ef0b86243b0391413c73d48ecbf1d19170f1b3b781b35ffd316afb1d55d1dda8e91eed5553780cb2714a93e7ece698b832e853e2589c5ba2b8a997bbbbf625071ded66762af8cad42 +d = 025b7eb3bdefba3c5134438caf968f615b315204f348006f82e8d61057a8a8a853230cf0500f9d0b8c1551a59b9184862dd2ed9 +Qx = 17d2029cb711e52df416c54b63a95a66602a1d15c3761d91071964e0128c91ea766b3d409f72d9fbb5161a459c3fd7990f87d88 +Qy = 1e71a9c66a4d4dcf199aa329e44b99f80640fc760fa7326f29c273aa13b153df5277feb3c049e407630173fdc9f735d7aee4e10 +k = 0575aade2692534b5a1a17d36c36973d24dc501c75c3b0b497a3d2fec80c67be7107988e47199d4863044fe9176762497b5aff3 +R = 024c6004fa92cad446b8339917f517f04d22db47b3f9bdb83d863dadb5431866ce21b13e780495bd66152ab33eeff8830cf8538 +S = 034aa568aca7be851d276d2235e42b6624df1cce2b97f6413dd3fc506f0f18483f95f911feb0eb220415ac593f2c93dca0808fb + +Msg = 5411708381a65bef4381c9e13a04cdd5ba0c15829f7f25ccadf695f635384d8e4704cb562741747831b33852567f42fedbd190d2980f1bc921ce01c17d659d4bdd7eb787b3927fcee659dd3b65132496c687f2249272a473d46326e66b3cb78dafbb522390162c168f73bdec88adb145e6afecd561979846ea4c8cee38dc1686 +d = 0673b3a2985c95904732632e5d988d8d437a60db13215bb6aa880b348f011c609a1e860461427a8cf0d622abc47f910f5c97ffa +Qx = 0c4f1c0cdc44d867ed38d093eb967bfe285df897868c83ffcc0c53463e3852a1b2039506d9508bf01d0d79ae537e42fa2070a5e +Qy = 0c2bd9343041c2c4100c5d795ef355c796a6ea7954cd729e11063b14a27fc2c3a9ffdb3647613b44238eee17d9cc49e8c5dfbe0 +k = 019a9509f5f6d947532638a3c80782b556c553edaee9ade91e457f7b5d2c9055572fb116f52cf4d3a2a0eca72fcb32b2f58e952 +R = 02def440e968d17d9904c5640619af2f447f74b7c067537db4a15be87df4fe68f44897047fa8af146462ceed4beae36d54e1aaa +S = 013d5b00fef639c556d66420090c2cab1edc57b7257dc35addd62a5337300e94ea7ee116e06b744da1b575d90da81e8ae2cd424 + +Msg = 23757fa60fcabf543e603d8b31ef0cc99b3ed16b4816a84e01dbfc858872fcb79fd03d2f8a1d4f28c25dc42a39e20c34f81ebccda1682ee9bd22fe323e7f8ea90cf4a2a6ebb634cd1153cdc35f7306f28a2efd822bf23131baa1543d0ed5ab4c8168d3199983fbee117085f90550ec3ffa2b06070d3add1d707fc2593285ff58 +d = 00db7dcac414010b816236cad584dabeaec1da76c97182d1b62f87bb7fe2946a64d10430571b2b29ccf2ef72c969a9f045f1f3b +Qx = 1f2a6cbb9c1fabc8db2848c74d918312267888d822b7dfd1634a543dcca4be7c997239f6281d1d8b5da9adc694706b7b19cfb0c +Qy = 1bde57a2ac15f4e6b26a373a624588a3379c8eec758f3c68695e2eb1856075d90085f43283d982526c5e57913cca5e2b4169f8f +k = 05a3d856ad1d6164993cc59e70f8551e2408da92c7e6cd52df51b37dc22e9ebc42fbe6b83c332eedffd4086a382056175ad7009 +R = 0489b0344ae4278a0376dcc64ef9ba8595bc2fd62ad22d42fb431d2863d8ca353cd9e59de4ac10108fc247d6ee9ef643f6bdb3f +S = 06aa27335e15dc910515385764387798cd4a9b4cd6d99d7c42e07fc04e2bfedf8dfaa7bda396f88253357d3e2545e895d9aa3b8 + +Msg = b976314d2f066f8893307a726f450dcf2cf865c170e90e6908ce9787eec48e1e2119a731b2bec3c12fd4e6282a393774251bcaef91af6ce57c63a8b45bedd72ab862cd169b7c84b8f6a72084ff823a96f2f8eff3483a7ebfabdabf0998377c5a6836d88135cf61c65a0ca7ca57727da68047dc635c17ad13731035fe9a6402af +d = 04717efef16e1ae267e155aa1daabafc68515aa391dfeb73c13d01f3132bd22c984228dddc4dff4c39979e7585acd3f730cfcfa +Qx = 1526c58a3de46c95cb0527869f7d637f9441cb5504e6a01f339907c6df3d079361a41571cf0a0f11996028a41682dab5decf786 +Qy = 1581903be8a19bf8bde1d89bee0d436f061ca1a3ddded4b7793fbc32ff852671103f34e16d469eacdbfa457643d1b18dd1c4107 +k = 05c846bf61c068b421efc472469ab1ff8d9f34847ae0065ba6f4a000be53727b3fcf97a780362566e13ebab84b9ed5f0cbbc225 +R = 00aa138e742ae81eafa820632f31e87bdcfce6b909d85805e46d87d1cdb8b968907470c7ef5806accbf6245628c70d264fdd95d +S = 04df507115384327f7b8311dfd1227c19a6124cb9bb5901bed45d8d5ca45db0903f53e7bbf136350e66bf2b4f3d978f8bc546a5 + + +[K-571,SHA-224] + +Msg = 964ad0b5acc1c4db6674e86035139f179a9d5ec711b5bae57d2988456bb136d3aade7ac9ef10813e651ae4b9602308b071d75a934a6c012eb90c5eb9b2947b50fc97b1d36c5bf9eb13a7b06c94212c3dcdab402a563262298defff62b836ead1f78f9d20713710fb48115cc5045ba15140fbb4bdf516e4150d830d02cf30963d +d = 19cf4f4d06825499949f9e0b442586fe1bfe3459813a2b92cd8de0f775a4735e02655702ead8e60824180761808d9e816d60bdb0238e1e8039ca7bb63c92e1cf8433ef447e64ead +Qx = 07b9cb1728cba80367b62872a986e4fc7f90f269453634d9946f79b1fedf42ca67af93e97ee0601bb3166e85357e8b044e39dcc19e608eaaa8a0066ffc48aa480c0e1e8d5569cbf +Qy = 580858ab9223c2b2ea58df506d703d64b387a78ef43846894e7a2e47c02252bd2c1e3d21ada7c21d50a08cef0f9a189c4e850c058cc57c37918251b5aaaff2321d7355b6b555644 +k = 0726d5e317f888dddc94c73acb14b320ff509908052868f8c6b14e531ca467c1f7c8287476674efd0d636ca94c24a69d15210bb43a368a11d3453d69ca80430cbfb8b6e45d8f21a +R = 04ec6205bdd8f7eab414110ed620dd3fbbda4cb3ad9e5559a114ca9344782847621961a3577cbbe43d94eff6ffc8dd7dd09c049239f026a928301ffcddcc910bf196853edc86d31 +S = 16535b1af98a75b9bc0f122ca3ce23a01800fa33b43584a94fd8a8d6f40077eb739f07c9f0e179a157a28023735fc8da2e2ebbee5f7308925900e657fae7c3b321f14fc45346f89 + +Msg = baddec4794effa668cde267016dda67bc70b847919a9aa595f93ba9dc27354399ef7a607fbead31e57a8ce698beabb10f313d393980425e67cf95be45d512f00e950c0c5409573ddc3d556f23daf056259ee8914e860562a674311452fed780b3e0317a7fe93baa81fb98df3ae4328b28ad0ac8f8ea33efe24faee658ad026f6 +d = 098521a732e72ed945a549afc92318fef7156ed1d1ed9bab93b581478cb2339eb32bcef705c9bf61cf2873ddbadff8ff3806740a2e30ce67d1807a8179dfd5d952e6f8a583baf81 +Qx = 1e09410bf4f84d53a2abf8d106fc64e643edefaea263dc98c308aea16ec75f083b3e6b442ab261226c59ca5fa622db68f5cb5f2d1d465b01d0048554b0ccbf67c0aaf934d2365f6 +Qy = 361e5b43d313a62c7b3897c7db8a42116127138a1009f0bf9892981fb4fd6ae231b8940e7509f96e2a49285143010dfb4516ff810a91a4d9d2974c522ff343e93e8aad00aaa78b9 +k = 128056de96666acd09b93c5db7ba1b8fabf57251ec480d42b702940b5847d2a59b04eb5101bb3990c3ae2a41181f19a2afcf08424f8b922a95df6b292b1856dc4a9dbb1c717ba5d +R = 163483a7e0d1012695ce0c113ec8fae3694bccd40fc038d4038f81bd39e71c969cc7f0af8313a9fdd3d028ab24a43279569dcba73fd78ad74897964ae715928b1cf7fcb779b12af +S = 10aac6929432a6bc7e12ffa86e4d2421e0535fc44a1160fcfbee477c29a987e783a7f753eb2278ce08954c7e90284d2ce7c42de103a9c59d8e4c459b457688ad515cf156cfc56f8 + +Msg = 7ef7138fc657492d229054f8a50dcafcfcd1dc06f1c16640af3f658907e2969248b54416066eb119adbfa23b8dc578aef18bba79610b9cc109394b900a25e55a779230bb858b2ddd9499a7775d392328db9177aa9571c2f61dd52010b48502154e914a0c55a54edcc04a6713cf7bda8744a893926118b09df877d1a4f3d95e8c +d = 0336fb21549e397a190beac38a1ee10f0551952da15f71e11dfda415e5ee08da2356f114d450c661f52b2b32cfc7b9be61732672691a079f0927989b7e9f4efe6095a242155b641 +Qx = 316800fa2d8f8f3f9aa87ffb628dd7b2f63d4d8389ee86ed41bd4c3eecd3f3836ba92e2ff7ee5626213f9ddb41b43561c5dc0bcc3df0a872e4b8026c09c7b52b89b4975a43f60b0 +Qy = 207f956df58f75286232967dc1d3e6507634f45c0014c48b42868fecce5b9434463abfcd2b3722a7f5ed25607270148466f6ffad6a8c86e538640ece80e84f7368d33c68807fed6 +k = 1517b3524b6d43dcf3964f7c35c89bf14dd1542c37606452e2035ff0bd0cd1edd6d7b801ecb1f573e957131c0b3f30d5006f6e4748a11b9db10fad41961f4ae53e848c6dc6e1a52 +R = 1ffd4865dae7387ed797c5ffe58a929cffeab521e48284bd7d4427d5856e9d2582b91363f1d353a0ab1aabfc132a778a516d4033c64cbc991d724115d72ff8e94ab4f95a9514843 +S = 10f010aaf1bb714042fb8cf06a9501dfd1ffa598d6b3e68e7addefe00e18f3a5db8414d625e374d9ae70bea43b57c6be4a590c28e50a548cdb2e30dd9d6e3ed1d9cdada9f8b0049 + +Msg = d58e1ff1d49a471d0567ecf8f29173dab5fe5f6184ab4cdd095c231fa7b82551f99a482994a46c3d8ebc07297fc9e952a5dee7d5f199b119f6f8b250f8fba45701ac252db725e75c4da27ad77d59a4eac448e54a277986740dfee6596811e59afc9755e53d24b826c09e497e29e69a22bbc85be11763064e9ecad7ae66458ca0 +d = 0e287ebfd9ba294128cbd484fc5121d271cd33e685bb1804f09b40aaacf64b5a9f2cde9b30a4a02d3a9bda97d92f46bb8787b3c61f280b1e1a0680f1f0679d3bb34d53725d62e52 +Qx = 52903a7afc17cce078b4b658766a67f2f75ac04e296757fd762fc05d6a7b4e4151598a872eb4618efcd06c43cdc3e54f437c0ef1b091ab5e4927d3ab4227fb24d4413e0327abb84 +Qy = 385e808bee8dad1a1b84d644aa29fec324dac2242709421479fa7a712d18b54db59778724ccaf4e51a27da090c6dd0b7967024db0a8684944b77295c9624ce3aba24ff48c86ac85 +k = 15e8cb22e371965801d99407d96200015ba58fd7eaea52c03269d8a374fc7aef17fbfd4480d29b781292e179936a68ed175802f34043018ed1d6b5a4df667d859cd2ae53ed3cfcf +R = 0d3a57af73b7504ef18c03ed2c52aefe1d1a3f0e27f78c11d45e9825647d5ff6e97af51a5e366e52e01e5e832e4264a1d5b6967cd9debda59c955568e4c8bf804d843a49a0c5401 +S = 064fd7ecf4470f07b4df3b3046041e49f310a463210571606f00a1915c5220a27bb7a28cd0bcdbe374651aac06d4d9e017e31879b7819301eabfe3a7afe4b53f75ccc465815b4cb + +Msg = 4949ba765c14c31f68ee0ca26bb42ba2edee63537de4a6f5c42bbd862c21288d6ff48145260365193c6fd2b56dfb014da26b8a483776b717c6874f627c9a622154b824565b23e178240f53ee9748c45759ba5c035b584df0f09504e95eb9bce0301653aadb860bb25e6ea6b9606e0ec3bdb8089e6aa0d5763d331757490715f9 +d = 149de496fa8f88b2741864d0c35b3df666b87179b7bd06cd426a45f13bc87ea9f50dea85e1fd02a532630e0e3a231cc3e7fbb7c7ba85b40cff1124e72c677c6a3ea6aa40ffc64b7 +Qx = 0bb610e4308e229e4b4ddddff5c4633ef2ab40bf74514433bd068c7d59a6260ac79366dcdc039d5585e660a4cbee990a2cb55a99ea3d26dd9df856b0f3ee5b968bcc349240a9a2d +Qy = 3e3ef4be63fde6ca09f12f8220e1d9b5016f267ca5aa09a2dca8a0e0feda9647fe0e1f7ecae7147a10ff893f69a4f74172c6e9a62f0c5bd96d49b47379c9c84f5ef8e59dea104bb +k = 1cffdb963c2c8b8609809e998075299776b44d2808df509773f310124b5f318d7431f1ef8b38fac5cd5580348abc41e6e6396767f4780656361dc9a71dcc8e7c9239d6eec5cdb94 +R = 0982b9989c92e1a5d25dce832bd8a3f602f0eaea69abcfda285cb3841fe3f019503e6faf8a693712380a48a6af8844b6bd718f0edf3b57662a4fe82ee28d036ecc4cfc7310871c0 +S = 1678bec58d69def3fe35a64810b27fd06bc29d165593990f6f42c4c7676fd5d4a965fc92cf20ab8616c7ac7b4b308ce6290c5e8b4edf6859fd6f6f01878f2601e22acaeb5ce1f36 + +Msg = 5bc63e5c50b1650f0ed4a599960f1e4e11f6c151b2123fd71d9e3c44662312a74b6854290628e20b30eaba81555acb2fb49b640bdab2528619c7fcad0f2a2880c7ea232d427d7c935fba2313370fda8863a7e7e203d63ea15d0cfa083e716ce6068c63fa616ddc225c9e413e694cdf6b355cb1293af5d6cdea51168f5634e878 +d = 17605d7c5873d870462375d741b4bc6375f3d47f7f5e9d998917adf2137a81e63b66917b3dda8968930c4b850f2270eb3187fc756e2beeaa67fe0d73053e6cc0ff0004a21250551 +Qx = 0d8ac3e76c25cdf4902426569763f4ae0638ebb1fbcee6e12a4e0b89d6d451cf420d10441a0a9984710dcac13bfd7ba70370afdfb58e2d982ac367e178f6834b4cd2d232e7f246e +Qy = 12b5fd5b686e58df08b695fc333937eafad6006be5a7bfb1426206102a79bc32fd9ef46e19869448fed0e917fe059b76c8b5a9c403c3921ad07e6c19ca7bbfeff5491b22f8bb961 +k = 09179b3ea906137dcdbb97b27f3690bbe3bc4f1f57c46ed60b8503cae97602717a0724e055a5c52199ae3f08f1586b87fbbe514667d2eef2fe44092f3c916976c7b71eed67e8fb5 +R = 05b28342703c83ec2df898458fea6f71030e4e9c567d140ab09cc95df29ccfe199837cd58ed00d07241988bf3c863504d065ebbeb8ed11cdcb02da0a945ff38ca58d629f76832f1 +S = 01442a5606791569749b5a9f20ba8eaaedd1a2ceaab2ef55d5d41271ba23f6a5b6a33c76763fc99b291b07283122596a3331fcc9ac038447f3e0cb54872c140300fea65d7809191 + +Msg = 610f6633718e49d232b3798654095e2efa0de11f41258b27aa01956480c870d901efa77e109d5f95f1f5101d3c90fc51312d9b3019d2e42e0067eed7b457dc7fbe5466923b62c83d7347e4dada571b57813bb9c21d5e308519b8eedb7a7706508ad04aa69698e03636eb30fd9fb363ef3a185756494ee01175b16847f5b68076 +d = 09214dc2da0967912c31995cb8f5bcf4bfa832c5a2d3610f3a9857e5eee7c77100d599d9ed003b4106013155dffd6c48859b846e45e0ddbc5fe24f4891c9b2df51407e9cddbd974 +Qx = 64376a92c1227c1c479260c7497147760c103bfa5be95ca1593f29a851daf2e5c3a5c73c1fe3e6e2506fcea710254ab5eb2daf8aaefc19cbce7b1c4afbaa2fcda1ef85750fc0a3e +Qy = 70638482e5c7c17a82980b863cde11294c0df717bfa4b9f884cbbbbf80a64dd2cc7c7d89ed21e10561260d372da2fb726de71863f0f60e8ad0fa5e74fb5d29bae0cbe8ad6b32f6b +k = 0621176102c6ebc2c810eabab9f60feb71083c07751c66f719370713ec2de9ee3957bba8d768b076885db1f226a9d37588abf1b141d81b70f0af711c52edd30e92e34a1d3ed214f +R = 1a21d460ae85d0703b4b10a2f77547e45135048ffea590ce86e0a1c049f8a4aa7b395f723b7480cc84e33f4772df8f181f3919f3c0b0b4f276b0f855174103a2f7bd757584425cf +S = 0b56bbdf6e2be1b9e754f9b48b3ba9a13403c17c5cfcc4910112704aceea9a34209df406ee40e0a10cbc26d03839f95e775e80ec5e29b156fa277a5ac68abd99c7005ea6ba2695b + +Msg = c548f0546cee0c0400401cd540a0aa9377f27ac64492e6baaf38e794db4df83e64ca3d83b67bbb46a6c269c04c2725287cce0dee984a0d468c9ce495a7e554a6835d72c7493bfe88dbd5a044a148c89001b8087fb03e57c2b7212d0b175d616333a9affd8a1802dd49ba9be3ab6c6d9f99a5578d26cc4707a5860c6c804d69ce +d = 042f2682e9ac8b76f3c0880e12c292524601dce9ea6982dcf68bfdb0d3fbfb50dc9229e54149ef09b95bbf624eb04ce1427077f30d8536be9f69970ddb449ca22ab8368d2689ed4 +Qx = 116135b273ef876453b9c4c39e4be5a815874857f4a72602f0d03b4ecd9a4ad73b90600c71111e317df0782fc92e6ce2b194c204340bc11e68cc22ced38e99f90dbaf0f917e970d +Qy = 36dfa65a6e9d0ba521ade7daa2f6b01e1d14fbe7b5abd29ae71c4eff66c390914bf46f09f4ab8a06dc0fad6fa257a85f993d6829b5e0add5086b8fe2ecb8027d08eec1bea981cc4 +k = 0bf116711b31ca347d41a6cee5aa13a74e042ffbf79d2ae9448598e6950d721b3773ae6f25d7b49ca9dbcd62feb011d5d556bb9f8a55a7acc9a3a166a4169351bc31a293db68eed +R = 11dcb7f4103e814439df22764f776a74aa86ce9717585712b224803f0ff193d5f541d94142812c726b75e8c2c37f2a4c33db6af118af73d3ec4fda49cfc911fef1eda9a470ff200 +S = 15fa4ada3a6e95164aa8972f14ab7572a3b898feb6cde160b8f25094f67343d35e6efdfab18793f77e09e5a42f56bae747b2b66fa9fe1e4a97e5e05ca743c058b1024cc848393b8 + +Msg = 9431c6c5237f6b4b35682a0c32f68752035c8b295a1763c5dbdfd73466cea64a00ecc11356d02d2a9211dc54548f5db1651e4471898402c887fbf45005a3bda271df0158c98319d4d6751b8ca6b07100182957d5fe0d97c4e2294406f83e9afcae4850bb089f2252490417b5afd8f07f4c795fa84c9c7cdcce26bd97273c0072 +d = 17ed9a9c75cf66528428e85b0f019e3488af8b893b12023ff1b4ca9c3691b74e594539afa0f4d7c3863d15399b862f15e27bb077392d6bbd546ddfd46728c75177338466eb2f4ff +Qx = 760779389124c702686d8d7c25dccfa74fb333317bdb414965d2c271ca5e687c4cca57e6f6149e1714551761abd4d651e7b04451d8be8e58c0c9e361fe0c6771e3d547d6ac3e8cd +Qy = 52d5725d14b9aef93b83d638377f5a19e3cd6e3584121fdfc2c3ba1a588491d7e9892be081c9e7585a15b37a9cd4c204054dadf06a9f4ebe98f95f6554941982faf109c2af98c65 +k = 104ba3049a642d9b49c4302e9173a9efaf215b67e060c5e9673521641c9c2a5b14bad25a448e46faf73810979a3a50104ec8c5230a909ae588213161fbc10381d7c75b35c84046e +R = 1bf3e89fb0beb1ab854a5513278dbd8b9c6b05c94ab67145ceb1ffcd93d1a2aa374db46ef327043518a7f272b957dbbf9d6cbd6708f4c89f05865932b7e816b12a59647d972f6e5 +S = 13a8c121c9c170b244ae3a55aa2d53f4ae5af91b1f72c066207e3f52e44723bd4ae419d24821b83648cd64fa70536605912a5a9319dc446a6b2b639cb99ed2485271acafc2bc988 + +Msg = 417cd5f60416f17081d2c70e9a510114e08be83573bf9deae75fbc3095dffc8a7f7325f61f9d6565381710eda871388cb17619e4448836076338ee309a2bba5f737319002e259b4a875cce1bb97996101c9a7abe0278dcac203a712f0809eb3c4b85a9c380550ab0bbc5067a8edfa78abf03c09b5c08f21714e1022ebfcada4a +d = 1bcc09b3f2f1d26ab9955bff7e8c0f85c8a61293511a196b53d7963f4a4503849c96fb4daa68c9852ad9185e01a35f0bf298e34a09ec352cb6da34f89a1f23e8ea27712a8f43aa7 +Qx = 1326341764a4aea222e7413a4a6f7bdc0c35ba246e3c68728ce06bdb19f2e1b9102add88a8511130ff48c0cbe4012ab52de93329670a319f6b1e7e7dbf177667d4a98d3891ec147 +Qy = 7a4aaa73713bf8fb3907d49e5653cf82a9587518c2f8269cd1e556a3be3589dad4c238e4c80681e141be93c318f0efddee3e378cd46512d778b9033dc8706bb843a3c3546e76e4a +k = 13412a98a2c14a9672ecd42db9c079a689b147ad91869c3d45a7046aa9dfd3f31edb43ce6b84e9edcd7e3ac6b96d89f13878cf5befb052a6f8a4e5577bdf916adb10d908d5e99b0 +R = 11c8a92044a30be397007a71d9af3e4222556a10f3a07a1521c1bcef73b4ddb94fefdebba5944d5bd91313560718a8f520bb5cd5666539756a5e9b66a1b2d18fde5ae72e61d584c +S = 1ea510e23ccc7596db529dfbea78c99fc78ae53da32ad7c7bdb1df01039310988ea601828fdfc59a0cd237110cfee9de8711c073be44dd4d04bca4b1cbec278b1a9ef175d93f70e + +Msg = eced8c412a153a643ccd69596389f83b6a36880286f8aeede503452bef8305942d95734fb5733f37ffeceb1c2dae7b1396c3323de11089082745c28a1756f784423fa7ad68bbfbf0d93ff8b7ad62220500df6d6895788402c1f5c69c06dd9ef55e2401cf297184e411be87c1bba657f847208c0e750f94a3df92f253b377b4da +d = 0ec52fc3d9c272ca80623e06b15c35f349b13548ef7ee400bbfa04196850b3b8cc7b239238c827f9b0a3160cd97969ce21d66752791f5896e0385b0527d4d77e4b9fc70f04d73b2 +Qx = 5cd2e63dcd48fc793c18776d030398dfe3f8b6978eec6d23f49240581fe1e141f667498421f4c40a9430587fa282441a78bb641894cb79d929c299f1aede218a0078c247f740252 +Qy = 0cd2843ca87d98f6336c0adb97bbb9c5293a03e5b86d5534e2849ebbd73dff837ffa488fad7d134908234d0d7fdac8c7fafb4729ecf0516c42995fc9337f60db2f36eeac69a4e42 +k = 1c40a15fca0c959852afcb4ca6cbcc99fb680950c64ba18ae5388bf783052b6ef3730b1fb1487189ad983b6a68bcfbb707466092da52ea8893d8bc4898eb133fd771e78379b9c13 +R = 14485cb1caf1527350587d6695ee3df2b21c13084df0c093ca5109d7c192e7e5df2232ede11dbe5ff2f46b13dc2dedb709a0fc1641c1f32857040147599d8f179fea6b2f2417646 +S = 1a16ebf12c11d2d0a64b7ea124623ffdfe2650fc9603ded571e76dbd7e3b27cd32fcb709e2ba04aee0e8e1b942a4e829cd0c9683aee67eec27d4244a2cefc36f84f7de209e22a62 + +Msg = 30e83ea39a92036e22b7bed7639eab5e5be1d00c20b4a9b9afa9a0d1653369cbef363c119cc6f921c8f84663949c8b8dc9b743ac2b1861a480476e9b64c8f333f34b6fa0e1ddf09d49618ee4f3c1f46751b5595f0aea413d4ca46f3c26b974b112cbe99c813a96a4423764c069454946f213c5f066ec38108f947abeeeb02fb8 +d = 06403de7627de22d1dcf6b8da5af62f9ec59ec065cc1ca1311bb98aa439a6d5985619b17c17a70f59e17cf180ea6828ef57f5f1f8ef05680a9fc12ab7faad5af61e4e11fb45d341 +Qx = 5575c329d73f261ab6897153d7261f87e9730eb5dad49c05d782cb02e483fac4a9ddff31d2fb695a62cdc44edef6398be8f4f84aea1d63d0b3a771fe91889dfac4780063d258325 +Qy = 183e63ee783abbd00547567bb99e9b578ad8ce63d229db41c6877534487568c423d4c389154af9627708d8d8f863597bc668e88f9412b21a6696d07bba06fe7aef93b26950c69ed +k = 0e751a4918643ba3e68bd9406a4386e876d0d66342aefb4ef75bc4dcb8cb2e2d9f8378bd02c388c776535ba85d24b206f5bef4b2f23a1c99fe2f2e8ea201009ca468e5b2e21dcda +R = 0ad6792fdff4c621219549834cf03808645171d944088f5a6d3cf1bd826b5588544a32f231e8428a03ec02d6c1c1243fb6b79b1cc6d732be5be8f2cedf03c1e5588822eec559b7c +S = 178b64bc5f9fcedab17822e831fa52d49ed10afef1c5912893df4bd8dc960b474ed25883ddc343341b696fdebd06e177f234ea45553cc83920a8c799ada2deccf1ddf1dd9aed863 + +Msg = 3ed244dc16a5cb292db4b1433b0ca3226913f07377faa20c6c1402cb4d026de808ca74a6d4ecdd7c4e662105bff6edb9fae0117c50aa053aef677c0750c7a446edbb879110030758912e8fa666489d702d8fceb719963b24a256429bbcc869a1f4ab9de9db89263e3684d4daa1df2ed94bb59dde2abba63793e5f82aa2e4db83 +d = 01fb980aef64254aeb9bb613ff2fc6967503db4bc1f337882f1566cbeb57489cf32e34f310549f41cba1b951f487453c29753a184e33330e90d4b973d2e406c99a239a5c3f96233 +Qx = 36ea761ccc71ba55aeab229aaf874a7c2d1ec15d821401e2988dccf02798c4e7bea80d9fb8d30be213fc80475a17f45d60c53249b66858d29c73e73117162934dd71096d746742e +Qy = 49bc28f4d45d29c3560915698d03271028f56c29f0ead0608cb72dd0b62490f95bbd67145a6c0adff0d6ef396b4deea6a5e2a33f242bf17e907b136c039c127d6012c88b76aab3d +k = 0ed404ee6b59ffc445b16f11b9b1471249443f8a7309ad8a662b7cb44c94866828c906fd64784c699cd29d3d972e5db3d42157452630f14536eca23cbbdd1d37e199e5a586fc352 +R = 1056938496df511d745f2cb88acad279ec2d58bb36498fcd8139d426d596de6d145b765a5b3e8366845fceae91d14075356a32515134e577937ce2af7e732b4e89a9164d083adaa +S = 0d5156c776f2184babd69c1f200b8bd94289d45a2f8b7cd8e8afb1455e8901d8c3ed14b7a23b0976b85a22b86f3ccff4ae91e286f696f39646188b675895684f33f0368098fa7ca + +Msg = 40343935d9423ad30f3fb1832bb08a5d20ddb3a55b59057cd275320db4a5835471c96cfb7d67f41ef860cf5879897b8dcf307bd1a52a6226847b768ea38ff1858f59e64cd635b51e6863773cc6c64b363ec47ca39266422406264668415c189e2f92447ac4c63ee5d74e95d1e6af05016917ad237f482ea0b02aecadd370a8bb +d = 1d96dc09dfaf602789c1dffa5c9ba130832badcf180429660daadf4cf1be5cca92fe9713173861670eebfe3a0ba25bcc76aecac60a756f07b69687e05c7e25984a39556469f62b4 +Qx = 452b1cd70e3c88bec1fd0e4b8f8e9bd5f844ffc12f3d6769eeb1c9ea90e599619908682eb5e43b1d6eea63ba9353fb64b59d6549d19cd95f2f54156c81fba53aa0dc91244e7ab8b +Qy = 20926ca366dc657d133f0ff9149738738ce68f3cc2f61dad590e2502e8fea714b89543f43d97b46b7075c58375efa379cde208ce769a16be9a377a111a8ac51459840a223f34695 +k = 1dfd064dbe64c25a832faea1819cd836d22583fc40b2ecbc19b1f5173c25f33ca8cb7f30bcd619ef73a4c14c46e610c8996059612728f508bf7db7ab3191ad61955e8b1ba409692 +R = 03cbb0ae5f7c0978ad8c10c4ff099767465ed6fefb7358f3eb58a79366707107cc88b305661526f2972bd16923375dd898ae72e81f290b86cf9a4dec086d7ef04d7a7bba5087f8e +S = 09f77a86f0da4e35c395978603cbb9c4dcccf126b7cc924cf62732593bb1aff0dabb6d58321debad4410dbfa1fb8fe249bfc336db7669e4ee13485ccf8dbde01ca4cdb9acfe5e74 + +Msg = 274567f8841183e68c4f6c6b36c5a52fb0e88492e4076b9cd768bf571facf39dad6affeb68941ee326ee461ce1f33c26e4bfb3c9e0cae8241fbcc14cc69c1af68701fd0be3def1e87b7d52b682ebbe1cc225c1bd177b0886e3698a06d0e410a1f92c9bdf7239189f6acde0d0653815a72987671b415d1e8a70e685d6e5b14c33 +d = 09d98b32c8eacd135ffb8e13223690ef02c0c1f29ea8b4da193502c8cb3f39f9eed608c02fd457f2fb685ec4595e8fc8f388d26778d225d2b18c9bc8b199d8b65c0d1a6af33854a +Qx = 775560724ab7d98407e20af12b03634a757037f8b3854957e11900d58460ca20d93ef06436921f8d4481ff9123a9eff3973e17d441511df3cd88d0d6dfc8016d2cbfb8963378463 +Qy = 3082aa4a81d4e6f0ffc94511327202f2baed72c08026e05a288eaaeaa36a1a4961f400b4712ce68778ff38be43adc2222a986ef0fecde62f861575842429816c8fc77797af018c6 +k = 1f4acd3430931ecba5e9d986c6712467526ed94a0bfff36135da3ba7dd9870ceb38fa0b658dd391ce658774c6725360dc20e5ef41daa9cf52fa863840ca91053e7287ed29ac69f5 +R = 0502abe544fc3262663524cf88a5bc256b20829b7bed3e2779f559506adce3c4f3a89e18bfd31819f78ae3809d9d0710c6591b2fc90039328678aed9df2fae38a74b66f69295d82 +S = 0b2f055248d9633cafa4db3b3cef0b76ee02f6bda3d508e19c68870e76a02c69dd1013a03fd741e854cb34f815432bf48138203177141be7209e957f4db1a958fcd45421a213c98 + +[K-571,SHA-256] + +Msg = d9c99b8da92d3c2e40dea3c4025dc37770e867c4d2746c4d726b6de24250591a586c166c88acb8ed340e161d4c81b9d14c919a1b06f1feb22c5ce5fca2693bdaf4994ac72c8983c87f331473fd094eccb3d5f3528e69d487562fb5a65c150a8217192f8aabfa7adcfd0b6916d5000248fbbddf1ca2f38e3d9ed2b388998b7cfc +d = 04d873ac744c4f68bb044783ad69e1a733cb8b8f483f2695bbd90c4211282036ad7914a53b25c3e890c6824643cffbdc4138d7ff457e3fbb99387494eb5cf2bdf1ad243a3a1e644 +Qx = 4644456a4e5c543af7a086640fa9ff6627c2d9f17066d255c3e805db31fb1ba895682e94f6ab96d6ca449b0c3f76bfd6593d182f422689b31d9dc3bc0b70df210a96d19af9ec2ac +Qy = 1d38f8572a06ce22c1586a8329f9421414b334352f1e8b961f7e0732ee01e838eb975bfb2f62132bbfd9acc6ef8899b4fd388c2b59e564fc3670da7a008ca016de678d6dded137c +k = 0b050aa7266201a42dbee063ae2a21398ee1d2a190de9fbbce2468836e416b3ec18d7340c81fd2a5283713f9aba33e8cbb105eaa2abbf0b687fe2713921bcbc02a4b77df21f762f +R = 08351115714bc8f29b84a6e3f0a23bdc219d4271a9ee18bdab54c3acc9cb3468beb1f89b0f981da5aa7d7ec7ad451bc5e91bc98440fe20f5877a4e73614820b9ab6f2bad3e2e609 +S = 0c64baaeed68178f5a1d8f095b0932fb73f9a02462df5e8378746ecf17d05971a0a287d5a8e0317db055b02d4f4b5864597d0f9a9cb1ae68577dcaf7db09c55bf3d3575197295c9 + +Msg = d2b88a01fa17703c99e5b867c645e98feec0d6d1afaa20a97b5fce9c23f0594460142af4e36a5739b8d26d3ba35a0263caa5429b4abba157f359fce701c43372500fd2ae1bc2ed80bfcaf8cab7016ff93d4a27f565b7e67fe7dde22bf02c48be12114fbff2421517c825019c0ccc72d927bef156140d7f0e9b6ee37af78c3efa +d = 18d2eb947297a054f8a789771dd875b12b26ef057fb91235dff3b062916f85aab3365609bd2a38a861439c8514e33f174c198139354e63766942f605107cb1b9709b782622b295a +Qx = 3f6454f1dd032a925c6bc3e1c62892c1dfaa700d3badf83f07c1185c31ea817641865a129572f3351340fec331f5ed466db7bea3ffa9723c951b518ce6f3c9263a7bd6866c8b0b4 +Qy = 188877b68c10cd6ee543cc5638bf0f82db25b9327b2d81269dc61250eecb976d6568a9df29277836b97973e3615e0a4345e610b33909c2340a23c61dcc6e2baf2bc363a33381802 +k = 0ec6af799d92ab52c51cebda61ab642d4876f374edb17253a1de3e880048355e58367096d3bc0402e4b93fa6a6c8d55c529b9fd68a27962c19274393ebe1bd0b1197a28125275bf +R = 095c42b3ef01c0f9ab96693526e903ef3ccf0d843776089d15e77093fa9d010872d65cee1801f821bcce747ddc5875eaa462b00424e6cdf0995b87c6cf33c37d4463848a6ad7fee +S = 0c4f0edd4b2dff4f9fd1fea5addef6d483bb51c27bf5c7aa13f9482243e5ed5571bbe0a658543c69b731de56b6b34de27795095b3676375cb4686b45d48010fe8c941208cffded3 + +Msg = a704a1428cc894f958774368979fe075353b56790555386e3b043dc6a2919b94a11c7f85883f46b4d47b324d349c28c667bf9a000daaca1d7191f2a0fd97a4867aa9f72422134a690625408a9ea4b723704690b69152655f9e9dd5fa3dd94814d97dd4f13e85c3f9bca769491c2461fbd17e28afac00bfa81371d5039013da8c +d = 0594fc0b7a5cc0216d2e78eeeb6394c8225de795f4b73bec48b2f4ede185ba622b59a16dd3eedf8cf2c94f2ccd6dcd205f64c97cf1b7f1e34129e94b5129502909f43940dba0746 +Qx = 271cbd3e0d73ac19b975559450d686ed67eeaab4175435b2801e8989966d7c5ba81ee7d749e43dffa12efba820462bdb274a57d04cd7e92c180cdf555686c78aad58444d5f17129 +Qy = 7c407b46e93d4c2b12c967cd3e41320ea8535a2ff24372a5791fac9e95865e14d545dd3627dcb4aad2350db248ef49469ff4d59a879a84a19d1c0e5d7ad3db432af927c88aa5d48 +k = 1e730d50a9747c7c1ce2918fda7575bb81a74757cf9625d0f0619aab7f1eb6954dbaab749e573290406e599eddd7d3376dcb3fb98c116ed7b65729dd04ece3eab1d7b4bed52326c +R = 00d59ebcfb30d7b27c87d56ec2fc9286b04b39e68dc49b395f374e19647bcc58f2fdce1c0dc815cb2aad55cf863a4786efd6c3a0ce56c1d92aa20a19245e74550c17fdaf7a08340 +S = 134e80d63c9b328e02ebafb75eabf0fafba886f48b25206cca9086e03658ce2047c94a5222a206c6c5a57ddb8f59c5ba1408fc56668066fef4557124c430cbd1267455e0b31a8bb + +Msg = f8a87c4acadee27a908718461e3b45060ae4ebb009b10a15926460bf219cb7e75dc3a993fb9a741b94e2fd71615c50f6df958568f452b2cc284f0516816bc0d2e2d45f663155660a26326f63f4aa42a6e1cc8462a2ec620a365257ec042f55e4047b62af689592a1a072553ff174dd629a4f51837780ca232cf479a68c1ebdda +d = 0f000631106c5851e8ae0802b01e7a8a8540b427a8a3956a1d36f0600be89318032320cc420931d825cc964e823745c60aad3437ebc1c91d32004472e9677605fb708e5a71a0d83 +Qx = 34136cc7b8e2dcade5cbb9b3d0e0857c485ee791f862273749b5d3757d072bbeccdd8eb81c67fa6927c1aa54d823193c370fc596d0d903214d7967b905292f4b96549b3dbc9b47d +Qy = 56f69b42b29ea82b9f2fc377e874b58ee785010bb7f5814907fb5531789606810b71613a36035cd257864e414fe0e6ea353f398745df87ccf25b3a25cce1c78f61f5039d66241e6 +k = 009781f5d960870a289cc20f6b1af56602e5e12d9a7353e81b89a90b0a9675686f15511157d9fb70b82e8b2e25534f8ad22e14ed518e62a88f1ae21c56d4ab7763808851762d3ec +R = 0f3eba5ddbb8c127419fe5e8cc1aae2239bfbcd2ab43a006020b96c9e7db832fb09e0bc887aaf24848491d4de935b78141f426875f7dcf2937748afb303ec5eebd01b6a82a8c4df +S = 17acc35bd81cf24f983072585ee1e096459b408da909fd82b5ea86b77154ecfbffa7fe97271f50b67ca3c29ce704b28186b831300db0aa0dd6147d2d160e4aff14348ba76e6f711 + +Msg = 10b5438294a77c7e517ecfe8f8cd58d75297b14116aa93e574996ec4acb21837e6297cc0e7e7b5861e862062f192f2206a01b1caf42c6d7181d02c7d62b76c2881f8479449b02d32c6f792714d8f70f0c75e81c7d9abb996be87f5ad9a01fe42b75855558d5f00df392b62ae0d258f3f67dbeaf07208952e679a2c573aca941b +d = 1023997206341c6147c536d034a9c38b4012035dc2c9b7ef0bb9cfe65e7d788296f055d508a1fd957b2dc7f9eb10c27790f15f30d81670945e54a508c57b70b46b4a09f4c769289 +Qx = 66bd3f503cf42a20cea4a55cab75940907f38fac7fb024c55245f02d72d80336574a72fb248b1b61e3205b31489ed789ee78d88e487db3f5a1cd48efa1487916b8707e72e4be7e6 +Qy = 10b6e4330af0270abeccf0901dad2f8f64f4993ca93a7c5281dfd71c6ec405f9a9bd78008fd22fef76fb79e20a571df16c4d97244c7356e3ad16cc489d3a9b2e3fdcd5f23b48e26 +k = 09137bd8436dd126924943e8599c87f64564297117766580e6344aa3c02056c811fb996f264ac4f8f0cb33eaed5ef8f120d43a1d2b3e5e34697765ff9db4b4683ce5c1596d74723 +R = 03b684a66e92d352847f63196181160db3de7a304b6e43679340eaa9fc828322b5b9c16a1772c981ff0febb474488daf998d4acd867e78019b61804bb675a98cef24fdad088afcb +S = 02649a94d2bc243e997bdf27be7d6364459c38845c3bc8d1c8b549ad4689c8a4b4fd55193ac769b1da607dc96458e2f6abc602bb4048cf6b0933da6785795d04d10f22e439748a8 + +Msg = d83a52d43216fdb16b1b40469863ca8eff4df9fa358deccb5ffd18b3e22a9d654aedc98f3dbdc4f5b4e56b4299e25d8a5a38d01b34eb93de382df1ae4d1c7f966e84b84c393d167aecc6f1192c4b42cae83748b1ee3d9147ce7de74cebd122695b455e8082f86e3e488fb0f51b3b7edcd579940d1cb9d045296e5e38f201b7ef +d = 11ebf320ecf6a908ea5b868afb8e22246ce84e743e1076d6185ec65dd79043380708bf8da4ba802c3b93b8d15509bb7d7de9dc29f1e9fb0f0f2cb97a26698f955b1f7ef668122be +Qx = 38b2760315b0999f9629922bcdff65cfdee4938d4aab8cc3d200aa9c1db843fcbfeb9da10afbf10280110c49f0c18f15c2aac4f39af35a79557c68eb6cf6afaab973538b98b0a6c +Qy = 7da55796396e919f9b5967608af06bd01e8870354317e76bcb8597a379129e35bcb69bbf6b38911a03c3076f7fbbe9b179e078b442c604519e330282f6f6c21aba515d6d73c0257 +k = 1c219274e54a4c5e1e1aee3bf805a7002bbfe1c030cd4c8a1617dcea2a14b1d537a64cb07c5a1385edd76f3e4ea9a38e38b458d2c7bf8eb56a57fd33166bf59a8af2e9639106929 +R = 08677167a7ea1aec4de76d1c5effdb5a1655965850bd6498aaa4fb3fa50f213fa4d99caf4145b4ba87e34797babfe614dce6ac21d9c13dd0fcd9802b1414aa92dfa18318c7e57eb +S = 048d6161a3739fbb3ee1c223bc82a46255d10a86a605f6c8e1934b13f1a8662f30f8e95f53848119c61f08037ee5a2440c8faa11a6b1800078ed476b2a3f4cfdb25367c8dc2989f + +Msg = eddf5553ed4db6e8ce72cbcb59fb1eb80671c884ebd68e24bd7abe98bb1f40806de646f4d509be50a3fabfa85c5630905ce81abfad8a55f4cd80208afffb9056bc67d9dd7f4660a5f924af2a3745eec2daec39a3fe36131fe9eea444b92d31f6a125f12125159ba095f89968a7028549466f41ad45668a861f671050d2a6f343 +d = 0746d5c824d78f42a1fd63d8fcca61f154ba3e75788b7a0b87f53e5420e23a935b02eaf67bace8dd8a8e7c1caee30154c2428e0a437cf12e235f41c416f92fb54528865fd4766d1 +Qx = 63645fd3810e2458d15b43287f329c354b07324c0707f19847c544f129e4de1799996f805fab7dd356567970e10eb21d875e8ee7bbce56c666511f9b4a4cca986683e937d6f0b3e +Qy = 595485c9a7f2a97fa7f8453df13b75682931fae10f3441042199fedba91a58c105df57b83d2a3911a2d34a2d41e451d0d2549b0a0a65b42aca40aaa618c252baec171da7937d812 +k = 0674788e75eb9d5ceaadad9fae036f129178fde1a584d73cf284acae3b4cbcc208ae7a5d35aa473f4e1201c19ee5bbe685ff9218a8e2188f3428ab45bf09b6b600fcf81fadd8d69 +R = 060d6dc42329687012a93ffc5b846b4dce3df46ad12eb61437832f81f4fcdea7392582fd75e701e106e5b83521759da6a22a21addb63b73783592d3f29347f3d484e05c19db148e +S = 197f3b2d4f3e10425f4cb60dd1ae84fd8c87f62a2cc822342d5f0be4f0841623227c5cb0f8bf83fef483a061e30ecac86cea0210036083a99fa1247b49e19a7f401a815cb68ab3b + +Msg = 3db94335f6d1a125309622c0a9d71bde1da09371f0285a93bd0aac255fa8f10a56074e0f6057f1b1aecf2d86a2319590ead96a2ad1336fe844e09339b456be32374ba2e659fbe9d0f2cdd83444d117d2ce3204ce4b4294dd05405634b84747ffb4227160c4e5c2c9da9815b0c6d20f55705f16cdbaa13d107ae666d707ccbe6c +d = 00670e72ac2de50dd2cdd975a6cdab10ac45e37ef7a28c685d77447051496b5e161f8b1b93f6c7f32fce8ea05e94ed35fd7cb28c44bf51ea29cbaf5aaa31d6abca30a89430323dc +Qx = 54db4acd0815aa7ebec4f7661d80465c64f1fd4147507549352bc07dfcc6041ad309bfb1434b60f73b3d61ebde91f849004d55257e98b6ebbbeeabe960f9429a55a36ff75c1124e +Qy = 5b6f36f76b3b3c780b6a70bb8ea150e9cd6895ff6a6765a3516acbb4f5efa91434def52dd0ab81f618ff28db10fcf39264be8e7ea76e06516335ac5ae33ba5393080f114189110c +k = 0f74a0ec1a7496043d78891e308c82b4660606642ea669e4406683d44b79dd6e6a1b810292bcd6a9f59bcc2e590518bdf2e9224755654026d85cf2a3d9768d909278448f0d63fe3 +R = 047d808febc1065646e6a5608d62d1445d922084487a64e9ced5fafff2977eb3a7e29984230946e3fc77a766820747122fdbbb9100c591ad7c9dd29d07efa2e8a43357e3c47762d +S = 04dd6c8ce75bf2792ef227cd5a3102d30a9a31690ff5c21354f8dac9f826c86ebfaa04653f0ead103b1c8ea59f0a78f5d4e8eab597ec6c028ebcc57f4ce4103ac14579bd6e15166 + +Msg = 69166ba40768d0a3930325405edfd85f3272f7b8e600b0b319f070274c91f9f03d0e6ec4bfc7b4445e91b87cecabfecf5e77c7301ee3c6b0affca2fa02c92216698705eb75443eecc25438db2d2fb4b24f4195d6b9c05c53e0868d3e58477100607ffdc31b18c40b4ad7202bb034e58653daec0f6b33c024d42a3fc84bd8f86b +d = 0369a3bb96f884983c23281bcd04e24a3e5f6359f81e3c8e46f3f6b865eb6bdf98a630e90646275c587e41b546d3ca7688cc207afda15cf9b25cf83bd6ad27908647f3f9de59de7 +Qx = 0eb02f6e741b3f83a9dc50853828b8a6e0861ffc644162515a264730c662ba388ac0d705f8b36f5388894df5c1bbc3582c85de141abb7712caadd2d616da589bdffdd9258808a41 +Qy = 5dbf831f450da6f8e503c19a7788c1317ebe556a458e2bfbf3137f986c9c966a14ca90344be1b76457159c9d70f13af7fe0013cf605010a8a3b84bc0fe187c7d93e4cfb2639de57 +k = 0ce22f7f2f01355280ba2d2cda06a55771e66f598bf79c65171e08a98f1d954e4beb3ec77ab06ee60c5fd156a7098023558e3d630641579cc179739bda6d860f8ba1d5ef717ebb2 +R = 0ae86b40d10ca45c20bdb3db55a6dc12e9b75754679eccb44c40fa57351c23c062282e1da9e1703176e4b8f7f224982f2474494772a20269c43a18a7a03fd12d8ebb975b83ade0f +S = 15ff7b34c3316d9e7ee3d7b48ebf97d98453ca32f3fc67fd08761d93cf34cfa5a2314fd0752d263c3eb7cf842aeac395d41ad3c04c1a9d3808b4fb7489e880d130c35a26b702952 + +Msg = f64cb668b72f1e6dd026a478505c0eb33446ae9a2993bc7648aaed02e172fa9a0e05eeec61e756ba246c1dad7e85d3f01baf734b1905c5bbd1b08d833c2cf1e079eca75b866d705c407eea8618d23ebbaf269c7185984b3bd4117ecfb295ee6b47eecc8d3a78bb96552f6be314656f91caff793838226662c75cd7804b6bef79 +d = 026717b039df834855511815d5665ff9b654facab469390ae257b7f0eb4dfe66ea0dc037242ed0c13bf229b8f7ff26da9b55fe4750d3451c62804aad493c179ae45d08ece5af085 +Qx = 191a6d1ab9cdda2d593d5598a966efff829c04c421804c2297e658adc5c9a6092e146b25c730ff7ee65cb9812ac9ea0c18dc6b60deda948b4b7568e8b8e14411a6969d7764652ae +Qy = 3744af98387421d958b26971d21928b73bbf5b0f0ef183e9f606d0348fa715f153a60b6c7991dcefead2ebb875d0c1dbd3665dc42a241c565ea0fb0e6349b4319c3de633883a516 +k = 0dcd28cdfe9028a4a6df1d41019bc58e4a1540ca94b717d258f2afe8bec560f3028e15ec1e8bfd422415961516659fa2b006256745e85e488c359e8cbc94cd2592bbb892a19c45e +R = 07ba5911415a3d21a3d98b400f61eb63ddda689bfff0c8c3ab83668b1e4bf8a703c853d3585b8bdc29aa2fdc41d5e7534850f4656ec949f0a13fd18295b662c9829723e5a7fe3a1 +S = 1b027e38283d74c962fe0e7b58dfbf5e21ce1d9c91651bc98284008f44fddfe4cec9441994e690d72a8ff3ba2b538718aa678e7de046b653403f3b7c064ee07c9c3c6d23e1b068f + +Msg = 51ee0b98eb6a3e3c1afcb35a33697c048dbf61374629ac5702a57801fafbea4d6fa5a26c9d1b79d1c58257ac0106387fab2d4a1b7f8c0dadcbe7c830613531b3c209bc17f792bdba1c1fae1b7528aac53dc86c2094b40194577325c05d2258303a2d17c854e7449489c43991b6877a50692a6340a528a6b188440ac0cddd4c4b +d = 1d642f2d393ed4abea37173e4a79534af87adf534ead4a0a1c46fb047619221e3577e6b8bcc776114d01159c736ab78af3e53feac339d7afe58be8e7a8ed290f1dad960f1b5de94 +Qx = 23d1ea50229b70b46578df6904fd528e9930985426eb2f1ce10eecbc0c1658395948380c4047d67bc4072be2a2624d62a301da41a5265f040642d1937fbbb7cbd205e1db85b8685 +Qy = 625c82ccff6047b1ef4b08f1913f7366c4f6c0312c21e5ab01b598d1a9618cf5c22cddc64a4732b477dd5c06e332b846c8015a2e5a195326bca46c29cedcc2f24d37ebdb7c2eaee +k = 0c9066831d61a4192ad9de23efcaf578a5d5774960a2b3e3e292e0decaef62d1701b86ec6183d8e17a699d418ef9d084b982c97a55bd76c8b038ac5c639451096ca4d331f070ad8 +R = 005778acb38b1961195d38463abd9c19d9e07dcd997f19676633fa3c44caa44ad1a9bd63435f3138ad8f22a731e749a81161c5448eb462fcbcd69ec2255cc2923ac697ed319316c +S = 1a1aa90113952608dd17dbf391ed56231ecfa7d649f3274774ed2b6034a2207c05c6d8b6cec480ae27b58495a50b1e5b74a17ce6cf2e43aa273c2b813c0e6c79976882b7e4b1c93 + +Msg = feee50aeacaccb6b1c3d95c6524044edb78322ee836d8159c4a4c2cc6982480567c4c6cc4806a564876622266e1ebd45f2f4be851b79da025bd57d0e6acce1ec1c8c255eb89713a1e4897d4ee0f7a248b9d4bd3ad5dc0e57f60ebfb65691e164bc908956a019083e923cfd33dcf37c735af3462768a1e14a8051d7aee74d5228 +d = 08cb70be29e83f697a3e2f67d86f1c1ec9a163b5335cb4a06004b6634948bf60b8ad9df9b27d2bedc4975265ce44a7884e57082d521320ca4372d38fc77b18d3fa05ad8aa5c43d6 +Qx = 4c042bde9e90b38b48e60551d832a7c80377a81e8c5b010d0e491cf765c432b5edb0771aaa5f672edf3ba108dc71459d245ad60f3884b8cf33f8cf797f36b20e4be39c8389e66b4 +Qy = 75f2454c41c0323ee1a640755077d36a65be7c2a014db36719ec217e21a9c004bae5befb499bf6be67e82d3da70475abf9dfb751c84c409fe838cf1c6ae109d27f24d75c02cc5b3 +k = 186f16dfdd7a71f20a5e634ffc465356914bb52286d3d5ac00f3ebc02497112fcd592e1ecb2ebbc819e07ea092e465e66f3e58da7a2ddd41c8787f57c135ba4c168539b4743c3a5 +R = 1c2140d294fafe3d9effb33ce73bb7e5485c93c7aa9d33b7535c7053831a1dbe79075713794c87e52bc887ded969d2dfa6a1e2630cff96760310e04cd2a75be6fa020a12fc84d3b +S = 110aa165707b7de1b3a8e05e4502701abb5ade0a27deb04fd93c6eb24ed2b67ade6c49d78e874d25247e948f704d3c5b925f84c5b07c9b289c4f8507e75d0f8927c6dad6dbce885 + +Msg = b115f7370d6a93a90fd9dfdfb292956be34b61992ce1fa5627c5e928d74bcdeea66d4040c473306a0070fa8363c4303bea32f73ea3639b5c6676fa5a1d68a2cc1f91f00580d7453a23ae70af4cb1f1657aa82c5b305374effe5d67d559e46a6cee6360503d21070506f1af30bb000d2f2f85caa6465810f89968f33abae81cb3 +d = 1eef463771f9c6285f3257691dea0844687606d4dd00b6020517f190891cc1be97cfad21d147ed8881b5a6e19b22ceeae30e1132476325f2de0e9af2e14c80b8c780a9d2d6c96de +Qx = 24de3ebe03d2d91b88794a77635aae6743e597410ae10c356a51e3af88fa7f9c4d648c7d1fdb887c8313914ed554eede282b24a2e66aeafcc0cc96907bb2f3877eeb97df491bef3 +Qy = 1ce1f9fd4d7d3870997f34f54f2ba8f08ac94ea94f74a766f2dbc02e4d5149802e3135a2d762e3b8abb01461968f1e88cfc8c7fda49c099e392e80d57f0c14de9c4fa1eea25732b +k = 026b545702baa340fb6d1bc2bb96f7fb1a77a2428cc122ea380a258c747d4e0625bbf4e3dbc2ca2f15bcfea92f2417cd5d22f2bb5f38a9ba313b3bded506d3e570dcbcb86c2debd +R = 091c162d040a12f08a416296a43501d92e2ecd6be302b5e1754b9ec119fb8a572626c509855c7c868a07b263f66070ac986f95e4c83150a5a492d5ea8a7f8ebf556c17ad2bcc996 +S = 00c217fee7bb202d6399f6b1ae4e5811d9361573ed4fe1b3fe5d474cf06d0236d59dd3580145dc0bc7632c721b6463c69490a67d1be1fae99e34318af6df939f9f7f36a9bb8d5e9 + +Msg = 726782eb0d9720daa64e4a77b5d8dd67a1a193f15eb6b5162e3d89c925ba63b7c7e1c4bfc8d6f11915b0e14d16ab53ab015317bd5958b0beb6074199e05181915496575768d026c23e92e06016598de008c3718aaabcda8b68bebca0a73ecfc7327e8d3646106b7d114dabc46cfe56265c326ee56fd2ca87abb5bed8f997c735 +d = 13bd452b0880b101df1aa65724fb60d5d85b37ed5419027481661a3617e0fb37bda1151b9b5b41f908ba832011f7850b75a07b678e5b8cb35c5fc8b94a625e4398cd5ada2b04cc9 +Qx = 31d88b62d2edd5f6ed29258c143bbcb3d29413afd8f86873698a9efb8d2021186415d301599232989a0df5ea91ca222c5781314f200c708de30751feadc277d50e64842dd355ba5 +Qy = 1c76f19ceb1be48f5540265b8b018da62fc225cc0d2d1675bf7df71456cc8e35b002a220e2e80691600a2c1ae31e980d0cd22b4741c25bfbd413f10b375a4d8adf70a65c48ff006 +k = 1b9235221a6df49e39b4cde6650e994f624fcb5084daaa62aef54bc154949f4da9074636c44f50ea40da1a3f01bf67e9b62a725ac0537a4e37ba33fdea8ba8b2286bf82901a933b +R = 01dffcb5b5eb23694da4978419110ed2bc7961c571a2e68daebe21e598c8b483b34f3178978708db6d78455cc1fb4f73c5ab7607cbb4f05d4d008c7bbeac88562fdaf7a370ba394 +S = 057018fc97d7b16d69af2b7dd4a859f09dc178a6025e1bd6839ec7c75c0383c59eee7079fe61aa6bfb3e2c780d4ac0ee074e6b13223c239aa60ea1187ca4937864f89e2c65056b9 + +Msg = 1c2418243fcd89c6382b7c3b2a8c341f26d08174a9e9296c4a5c98c5793a0fa48dce51e30811a96b515aa22bf9af89a43de06d696be1e531c5dece1f69fa6ecb7f20be063c602a16454ddafb14385ae3f8246c3f989d0566e06e7ed1864502896ea19df8393259c4dab3b3380a4a80b4103cbef4f38cb69198b7cf74ce94883b +d = 1288141ec2244e4bb3f62daf4ee588aed09ce22be55e3d42e9085a947c1f8cd16533635d170bd64ae0b417346fa4670c25d41387acb2a8e14407a1931d9f7c5358a14eca40974bb +Qx = 7ccb7b12a7d6997ed2a11eead3278a3f45ea284dfda8e17f6d926ddd6881a44d02a0f7504dadbbcb0cbd6b85c113aa0d3b4efef1ca151cc38cab1aa8360a6d22e3d6fbc0ed980d3 +Qy = 31b85dc2d2096bbba6c465629ea09ae3421cacc5581770ce3479070f23b3aa938333c7c691d9cb93a4533b2ce389ae34dbebe8f333cef530abe17cd21448f701608febd42d9bdc0 +k = 1e411ab53c48cfc1ef9eda97002dc9181a78352de13fbee3bed86cb00c10e7406033fa0ea97b50764b0eb2dc6eb8ea83e47bb3150ecb9437179c124f15fac6ac19b0c8bc324f171 +R = 14420d78f2f9f1010018848b0442ff6e6203c1dc06a4d523802190f462ed3c11c7aa7678bd03ba27df01cacf4121309551877d3a2bbcfee116c59926daafce55a4e0a7d69c5c938 +S = 16de0b369c28ffa0bd6ed8802a503929cebb5c0a4bf0c0e99b14659b48aabfd08bcb64bc2e39855d7d514d7525b3c4dfd2244f37019b5f86254cdda599bb144c8fdbaad5525cfad + +[K-571,SHA-384] + +Msg = 1de4b642ec7220c64b91561caed7832044d6e811ac909f3b199cceb0d8a7db91bcdc801412044f5c34b355b95a2c6170fe497f6d5259bc20715a38cb0341c88e93029137e94d895bab464bca6568b852340a5c5d6a225475f6eefe2fc71ffa42f857d9bab768ccaf4793c80c4751a5583269ddcfccf8283c46a1b34d84463e61 +d = 01fe06b94a27d551d409b0eb9db0b163fadcf0486e2a6074bafe167f9a3b4ce8ac11f42cf72f9a1833a126b9473163d29bca2ad139dd1a5e7fedf54798bf56507326fae73a3e9a2 +Qx = 38d4dce42bf8fffc39a5b6583a1a1864de288ef8479449d599115bfa35b37954ab288ffbe81e69d58693e2c8c81639df12e4b36f62b2ab042e92a0715b518c63d0ec630051d4be1 +Qy = 59c72c0bfb0ea1ac5e2fdd4fc380d08037a3d0eeed4990ff02e6cf5a16817ea598085e28f8269da86c547e7b34e16a06724ee73776529c5b5dea4ce3321fb168827ca1cbdf8856d +k = 0a3b18c8c9f17badd123c674869ff428d533d2ecb8c74f9784220be7a90dda591003df5259c5dfb612ac7398aa04cc9e82863eb0cbe66b6e7f45dd15dad252f74a538d5f4354c96 +R = 09c368c80f697c1718c55482b2c6c5c0edd7257a3a53f7193515629aa40a9716cc889d41c120516b54f3a106a171082364886e5d3a1e9482a103f072988f61de68f034d658bd976 +S = 0e782ef47b250f40c56e3ac4de112347174bd59fd4cc991a2b538ca90cdb222d048fec62e2773492a1d327152d1d6591740706fe2f8e1d65de888d47fdf173b2645813ac0fc3078 + +Msg = 70279be7d7ac72a32606642ecd81b5d4d0f95fbc3c0b07d85c16adf2788601e44dedb8e55e0f9e0b4ca3ca35f5be7511b0e69224a05204af67aae11ce154af6d594d47f6e3142ad183969544aa95cae1edf42bc699137f60178c12b10a67698e37ab9f3edbfb3acdf1b3513d62fe3db33b16cbb4e1f9dfe732c107f9d0c953f6 +d = 09cdc7e4945c485a41728f83d5188f539e372ff4fe38fffcaacbcb4522428e4f93ef4972556f4398fe17bdd885768f0fb5590df495badc794d4d274e22f2f4a2535555922fa43f9 +Qx = 3c6f046aa3007ba7f883bc1e0bb43a9a0a1daecdea3e2b6c10b2481d11a834af241d60cad7cab27b677c9ac11f2e5b5226c0a3de13029229af00e5a092340af9b230e0ed992acf4 +Qy = 6326ffcd62e1a68b63ac680a743130b1440bbcd3966207dbc8a8f4336eb6a7986aa53cfa4fd7bf363b30706b4fae01568020b41caa70ee3d51db982de66b0ee39777da3fecf5b01 +k = 0c717523a308418eeb2aeb816346b74149d56b9620774cab582f01681bec73adb779bcc7462fff35685a4e1e114c8fba474c68fe2650344fc9cf610908966a9dd1779f76bce0cdd +R = 0061067f377bff6a9be30c9c79d8abb7f54cc8f09eaacdc190beb27b1e6d297cd32b043b31feb49958745b78e42ac074b8722e1a7653bf03611d87c44fd3891ae410b23a2140b83 +S = 00edbe756a5dc78c8a29baac9e2059154294e3adac9a5adeb7b27ac6e4d4086821cbd55467266946ed8f6f03abff35b59434afe84067c1daa1e0bb62ee7c56b85e7f831eea99047 + +Msg = 4d7e0ad520445b6a5cb46b7c77fbd367614044ae6004494c2b3a89089287e2836c73b799cd8c90139eac427ebe335804c3788f3728ffb8edd7f49a4bcc76a9e24ce3c2299cea88c04645b82033115380f81b0c1d823e470631008d350cf0c0dba1915519985b8a389ccd8c809dbd5bb5051a79e631916e0d052d9b6cca18e0ef +d = 02bc753d007c4491cfb8ce0a6c96455acd16d37e02c982db216b8cc1afd6d10c6be4e15a3988b8b8b86b2b5b59a5c1939889024849317f27ee08a06bd8e7524d4ad83a1de208564 +Qx = 0ea922b09e902ce3847f14d3b3afc5562dddf15811cb2e7b9e06e1b919d795f8451a3dffcb92b418d30bbbd1a7ccf827ea0f1f6554387fa2fc51755799040133d7a655c7800b713 +Qy = 1f12439a0c0df9f6ef08e89eb1a62e2cedafc0460030810b2483ad9427c48dc061e4640ebbd9b4a398841c863a6e3d510e5c66934d66b317b1640bd05018a35677c6ac2c7839706 +k = 0385f9caee4731627276875dd8d725fe79626c18841562e8a13fa7531c7be9adca565c22459d519d643ea22478d7c51b4c286920b050bfa54ab7d42966e389c485b52cdb4fa1a0e +R = 02ac84262fd121bbec43e81021c0f0610fd2fc0b26d66581ddaa78714ce58be46965283851241d792ad6bc79af39f09d2d4bda83996ab41f1fd206b8293cdb6c4eb9d96f39efa25 +S = 1d9c9bc330adeee8f58ebfe8c1ba401d4433efa04a44185b0e8e20b634691bfe058770d074289e636af3e96c118edf31d72b5766c30f6fe84ade42f284fc7f2707bf27b3a309638 + +Msg = d49903f38b5c9b17542310425e59377f61f5b4f4740cd97371ee2116083f7758e69e7e2c1b0950ec6b76f96e3c91c721d6f2843afde8c7505a559c8a64bca2e665aa1131b75bdf86fb5b90581c7d3b61c2cff88f3fccf356ddf5ed282e27727be061b6925c51ea7f1a495f471dc8a5ca1a88bbe29e92338d3c9361460398965a +d = 02082c6e61d0d72f040905d8c1c20d47b029f41ec68d6cbf43ce97c3b2a0a770557a33cb803c432cfbd3958fda30ec1bba77a6613c318597a85ad02b26c44bb77ca96d9cc1194ea +Qx = 59ff339d505b307e05adb45aa314d47f2450e1b1aad840b5550a67c11940d0e78654755a8e28fb651e12e48c66cc1ce0338114bc1ffb00965b342ef3a3caf495f1d73a69c3f3d17 +Qy = 724e9474e6de57b9f8cbf6f6bb4f73f5769e6cb0e006a34c2510b379995c9e054cc4981c709ca85a3aebdf29090ca07dce5bd3c313c6153b551012d72a8f84600350e8754bc4abd +k = 18d65ca6c2ef1fb32dddfb9ad4603e03c7cb1791a9ec7b41266cb68b6048aa111f5971f3cbef3f0dbb9ce409b59c31cc59bd6f100ee5247f8c36f26ca77cb252331fc3be7346b5b +R = 12853f9d695b8ac4431c1ccc8498f3fc4916eb6a5e66b3795a3693f3f5a29ad13e58dcdaca5774f1f295e2d2d3c63c69abbcd9f388a3383371028fdcc8bd77f7554d6aa3f0431e8 +S = 0d1c324afdf01ea19e9453d2b7397584d773716d6a08b6e38f9a9fb104122ecfcc9de7bf1e5a6cfd52a08b7cecb002ebc21798d474f035fe7d4554bf632f237bce14aad88b47d4d + +Msg = 0e3f4afc3e7b25c1bf2d98098a5a87db1224d9bb45adc6e434732b8722a708ab80a1f3f6ef3c5aa70d2e1dad3e4416b12cc59171f05736c4b58bd084602c344f2f0bf3cfdcfe04c64e87597a99de23ded64b33607f7c273ec321f6462518715b11e91361e89ce5415bfc2ef520bfec378244a3bd2a4b9b6b3d68815f2f75baf6 +d = 0e298c93351323e2c5304015a4878997ae4e79d1c32f1dc64262e534d4f2c4b3e222356ffce746763373fdfb936fd330d3214a18c07f1205b20c9a941331cd676040ba1fe3dbce7 +Qx = 6ee4952a83477d89ea05ae63d5169cb0f7c7ff22f15728c6d69dfb30d1f28158e2667f9342cfd9b32f2fd537dad47c190d82f72c03043f2a9c5d97cd09d07ed4c35b96104042554 +Qy = 26d5935dcebc0ed5a07b7ffa50de3c8aac309dddb61b8c560230379696d81d72bda3c819c46387e7f026b384bb0f7b2ca90c402bb67b5e37d343cc21a8d1a0f822dbb2766030d73 +k = 12d23969d230e0e2712f96b11e196202dd3e6ac755c824f92b9c765e3fc808d4e7236c8a3c06ca2c8272c7ac953fdb936db30d892246cbdcb7f98c43177e1c30afcc162af511364 +R = 022f6dff5bc1eac1ef568588e2e512103cf56ebcb610e124a125fb004064a28291c19e83ea08171bd1b14ac729392c7c46354e795d63e3bb087fd100642465efd817b79924408a1 +S = 1785e1fd773446e3b90b8704cc2723b8da2f99d1d699e817c3c4622015d178b0cebc19b3a6dd972f75eb3828a386973c0a5e67ca192d69f1a84c825d1253f1062a990c3f1a947c7 + +Msg = 8fe32671f6927272fd3cd8dd4e34d44d27fac8c88b41bf9a48039e914990bf06d1633b38b9200ce1c2a275b9c55498e5da2d0707322c3ea0a0fd7aff598fb801628264e13047c8008153e8595a0dc95d54e70b882ac2ac9314d2b78e7b93922da818d7075215e354708994af66958954c92c074d132dbb2488e5a531c755a8e2 +d = 104f4ad56594c5cec2a988c5596d73adaa5a81802b40110dbae698ddb1f0b271fd1479c38abcdb9b234e69cd0da8a0328d2135c287d5b130a09fa0b899058e7800eb2dfcee95c1a +Qx = 4e8151aaf2aa6a6159622baad134be41c404982bb0101e820eac8f0a52166546c53927d9b419604e9b025757eaffac526d4fbebde5fba0841c6812dff2e9bab5054d4074a125ffa +Qy = 4413639ad72d6eba870e1760c71966544f3f881f88880fdef1edeff47cf6c235e8dfef1eb1d8df51f9c48b985912f1f70b61fd3d4b859e052887560872fe6e95db0f435778d5c4c +k = 0cccd1bf3424d8bb0513fda3db93e81bd34175d84aefafd26b37eda9e767618247bdc94ed2b1882bcae4c83eafc30a7a4a80806fda10a5e70b8827287eed8eac2721939a63c2175 +R = 05b1460e856548287683dfbb93efc869e80333a9ddcf292e2fa3b3c8d430563a01340685c6db1059aaa8b298c8db9e8281f36e3a9664faa17f413cb439ef24cbdc1a4d58872ff6b +S = 0c6faac191c95738f7c6ad0eceb035e5d22ae85e4bd0e27f2e65ab293717c0491be3d1b5ace80f4cb4bac7e33258706010c2aa48d84c9e39c95e30805fa7669c42bad84386f7754 + +Msg = a8fa01136a0a78313a5d160c32fe5d1805eeb3730c18ca0c47818e82c48eb4c9e5b2dfe3ee5facef9ec59b68f4e6f3213f77fba9f8ba06dcde546ae348d343233883894f4423331b536f62373a495852977a51cb192cfbec04b5582b4ece69f345979e234de32da7a120138a057a7119735c4cb19099bf48bb202e7ffac04def +d = 0c4989bf33b3136bcb4ba67906eaff2bcbc6567635aa4b057acb7353ee87ba3cb4cb9838f8f679729d5c6ed98e6c4199cf58605f009c6873a1b8321f83cd3c0973b7a3cfd9dbaa5 +Qx = 3871c7781f2b4f653f0d49a224576bd1e5363d5171bd21da89f590f49fc212d8a57ac8a140d923c2949ca287bea803afd763f15f909c099a07297e8ba1b37c70e1e8f0fd1fe9d1c +Qy = 5806bd5b4858ba0814da2167d232d55bb5c41ea0a36fb28a0a151c1b79b22cb16613ccd9dbf92174e42578ef88f4da6eb44918acf427fb7e4022da3376243e75410ba6ae012ddfe +k = 0a9eb767077886c48bc54503a0d2d62f0192d3581bd9ec253107092c22f68a15293d7c3e7aff56282f0cd35e86a2b3c55c9eec079201d99b5f49946780ce6aa18b225c2dfd72cf8 +R = 03eec6ffb390ecb2af4f5ca17fa8a7fd6938667b319f0f61e5c7523efb77afccddddb5114ca8c461b1c28dfe7eb85ab156e24e891cc6f9511d703e8b3c8443d04fd8de80f5d65f9 +S = 10cf3156cf71dafea6a0d6abbd503d72b13e6a684076ac900f390059cf3fc325966b3548b58e14a82bf291d9689783b899db7d4baba524b0b63d31f9900a84fbabc2ccad95742f3 + +Msg = ba2d83b21c783d6ef2f3b7b10e910a418a9b9f49ae0fd37990335b3a3d15627846c9a12a1f31a3d0e062ad1bec5650606ed4dd06c30e50c1e8761a29f4ea1a20f74635d5dac22e5b787ac10f4ee82b338a641484f91771c128c84d31cdab0a6b9616078c898665655ee9dd4ae73d33b94bf091b064928b959623aa71ff73b4db +d = 1a96f2ad56e31397e236cafc108087479c9823589a5fbc3dc7488d0e5d1199cf245d7f21f524cc0e8b47feca14c93fb760e631434a91188b32965053942f3bd39b3714f9d6f1a11 +Qx = 0195bfb66e20ae295cd22d59b27b3880a890fc44ef5c720b568bf7f72266293841dcf0572063a96c62736d9d4a9cce31b10c03016305a409858a79070477d3e989481ec555c8146 +Qy = 491122a199176e2492e07fae4ddbf02d2a40a21bbd99b8f742b546db2018cac27fb4b1c03cff55f61b7caf13b0f3b097ffc8e1549eacab89225e0cf1e96b268eab7f9a1a69258f1 +k = 097e28225aee5bc9a970a150502dd14bee900d3b040b0da9cb52f5824e66af46a991bbf6423fe1e089cba47593af555b07b45e47b0f4141b0412ddf6e91153213c5b8645ae7bab2 +R = 1439928b55917e93d59341532cd1f9d09de1f6e0d9a04514bd4b692603f2cfb75a579301b39b8cd92fbfc8832839691c23e0ad3efd3b4c7c3e9a366c1554c6dd13c50dd087b3055 +S = 1fb432e72be6fc524a7106b21d03fa71852c18c67edcb8b265db3b144214e7e6d10caad91f81616e03ae7913fea1e8d11e90d54b17705e8d04c8c20f0f4f46f117cc423ca178ff5 + +Msg = ea2d5f4e9797bfc2f33f0fccaf530db2bdf8abcec00f09a0338eefdba318221ec0e050cad1a85c3f76b784c6e8c18da2b062f333eeff18b7b781e67d6d0a4368b8231a892e0f4103012348e5df53ac745e4d34e2cd1ee9369f97d4801ff485fc144b2007008036bbc07cb1c302a00054b54f3713919191e1d5052978c9c2895e +d = 0c08ed8e0e0f8b0d0714b46a2164b933f8147692f18da97e5a108c44d5a5cf221cb50536e41832b83bff4026c6df156386235cf5e3e9a67b7cf9b2fa7707c5e0ff33a91601b8e34 +Qx = 2d516bdd1914c83aec1cb242710ed79efa61cbb31dcf8d238d8f5e089158b2ee2bab407e01996a1621b1a869a98227c12296cc2a71c1ef2d0f26bd6614f2ac77008048abeedafcf +Qy = 151474bef5965c455eb95ca2ffe1d589107dc251d22635f4a9fc7270358b64e4d2b81666b60c4a5c49902b0fa9963197b22f90a09cab97007842816f64fc49e351710db84980032 +k = 01125bde6086753b3bcf29b7d5a4fb0a8abffa6503b4f0b39960eba226062bdade57e4d73e8c1621792626203e83fd5c231a53b0ce10890881460802788d481f233466060f73359 +R = 199a1e40229786b966592ae6e275874ace23d5605d0c3371a4f9eca7ce4858927958bc1c2780e9f2f79767c1c72117c79c408f972006841cb621837ac002cc6510e0432d99a1f64 +S = 17f4e5e23e494ef149e4abce2d8a1ab10e3e6c2cc93998fc63baed6565ed350b220b282855e2824f398ae76b8679201b43450f62237f6fec643ea659e6c86abc24a63d82d9bf219 + +Msg = b2293b0a09f41decd9d8e637b1b08c2efe612f33c9c0beebb6e05033c6103b958f8aacd125d7c810b4c287349f5f922d2c6ed554be597fb8b3ba0e5a8c385ed8ae70d5ae19685298f20e8d844fb5ad98db12ba7e5f45baed9045c3e86b3cac9bd55b614b82fd075954fc59bfc6124cbd68edae988596575f379d8921b594c75d +d = 144090a0ee38cfa21fabcc24d35139a99656911ad4f6dbffb77dbe74e7993edfa9fd63d2c4f6bbdbc8ec21ba13c9f4a3576b5d6e3abeab5af5ac81b1f2bb6d4c42dde645d854d9c +Qx = 208729b3c7abadfc221cfad8be642588d5d1c20989fea731cfccef25886905e4b1e61cf9548d89c24f5706f5243dc8aa7d5b2675c2c6d2755ce6a12e5b12c28a2cd9c597b7dacb3 +Qy = 3db73ee445ffc0f6c77467f3add3b1e97061117e221687f5589a030f5248bb959bc2ed98c9fb66da8679dea3949b77652dcf83ab9c50a00f6a9c22bd8d16e093b2deca4b0c7596a +k = 0adcadb26626eb9f8db9ae98c6808840b65d6f886a3f0c45f0b993a8bc62bb5c08dcd87940dfef4f220f5e50234fba3a55e7127fcbb967ff78ce4fd6938a9bb653747116541cb85 +R = 18f7fb6ee028c3dd754d6e7b687560fa269b5a5fabb1d98529e0a27dc66bdb1ed79b7b5c64fb71e767d9497b9255f26b8150b9903caedb25f51594f5b7ec2870515f701bd68faf5 +S = 09ca9519388402d5d96dd9ef2d4ebfd0ebcfa58bf8c1970d04851b2409671c9d5e4aa833555df374469a4d277aab93b8df8d553399908c930f81c2d9769f1b30a13f61c02b16852 + +Msg = acce54270252e7d9e983c08c993cd6b7e3caf482a9149036afe4665bd3d0662a6818047187872862d5718b8ac063477f693caf1a9baa8bdf2f36d411a796f2b46ab56f66bc94924229f8264016d6769c85d9bbb7d6bb042fefdb8fde1be026b86af2017aacfe38c97309b4689b23fff94f1de880064f1d3ad9d74dc804c41f41 +d = 1df26b672b2e3617b6b6c631d3c6be0cb49c0a690de49643e0f416215bcdaefc03fa9c708471f1d87476d58c8f147517ec8a14aa945ef001fa01984d5c3d81f7083ea500558fef4 +Qx = 767ca8fe8f3a7addf01b230b99499b33c83db95db05e1956fb1891fed60406865291d79b0daca0c307a3ec8b1bf2ac2cbab728c6ec65c013e01775ee21a29305e9403f72883a138 +Qy = 0acfb786b09e5185dbd8abf831d12967107dc57a040d7c800d904b530eed1e19a8e52e653fe8bb824cc424d7254532d0fee62e8ee7ce8e871cbf6e4ca3bc040444585b9a4e397cc +k = 13e5e47048122c8301258c638bc0f00f8f9646cba927335535f68f4f4f51f23ac5398ecc21eb0bfe8fa6a2084e11fe67587bfa791cfbe2527797a4d98046f9df37662cb7e86a5a7 +R = 164b3500ad14063101b6c5ebabba53dc5acb4d6771d3b05a505e6a67727ca8ff73d996e1329c0f6d8f738237ee0f0be415003e2db515ef93931e09bdd853b9497826929eac9e9a8 +S = 06b65511990c061a6d2a97fe2a5053c775ce2bc5471865abb7261d0436a04b79baf41a0a852a57600cd4c6a114b3a8466f721a684aac2592640bc149980545daa271fa9b146f2fd + +Msg = e25274ded4840df0d71d3369007118f002b83e2d375c78f7e29ade067db15cce21842611f3f015db2efec57da77cb9d16eb1e00a8c1444d48dfda569e29fca1ebf40a22fc646a9fd44460f0e473bde487634bfbdac2c312f66a1c2982c6fe76c54ac72b6c8cc9345e47cb319a974b3cc4bb40634df74b4ad7e18adfa9a71ddd5 +d = 189918b832e9fa30161fdd927bfc267f6405335df3d66d225e17173af52a671138883bcb94c4403ca3e001fcf09ef4c6488934d6775af2b1da30a8f331579af2d0fbb530298d8f9 +Qx = 53e6b43c0551f32b7b34467d188985600c5c0ed12448f2e763609f40039f92002bc8e70d8dd3e337c3507fc996a1557d5f2fb3132507e49ce653482cdc86f6ca5903b77fa1619d9 +Qy = 4a9ac78a2c23be0841b96cdb1d55862e4854b530f1fa3f469ba9f7185e3f91c28d03c27d9666345bdbc7a44764595b303f49cc43bc2d0e944862913d280273cfd00e15b6b55f85b +k = 0b47a185140b583c330c64a10d50748e019134bacf153cb4a23753f140a4d607d5771a8f0f535f9c35baae5ab6c37a55f38acd12f15be18d5bd9662383b30e4d0ce487e8cb553e9 +R = 1a2ae62cc9560590177aa544945377ff6ab1b34e7e32a25140f99996c130e170015636647756a5e8522c936eb1389c206ac74c012941269165f3772373047521f69510c7f3e6acf +S = 1d86f4a6ab2bba7f6305c2df754652bad40d7c273ba2aadfbbe65c07ede4ac0e65fc0a37a0139a6ecab296f58c6c2532701bb008bd9e1ecac2771d9384aca094537fcab47f3ef06 + +Msg = d8a4aed87c316012482819b03a1d91691f2ad11a2f46082497ea8f64880d686891f7da550b2ac17199c657d4eb9d04d5cb8eaa180f743b87d23b1c86103f9e9bb60f4e19f0ff9d160f180aed7735130c03adb62502e69be5c624ed7bda2301f30580ae0921b02e103a638f5623c02c186e3bfe6ff134c762a2bcac1f879a9353 +d = 0bdcc175eca3a399b944eb0334ff33c4fd130999c8ac0e7b52ac5b774fbad53ccc3a31024f5262b2eecfeb2104b14bb244307effe3dbe8ed25686dbf46a42c4b6f8e34010ad826a +Qx = 7ab1a9279a8408828c2bd21ae6c643ad82633d636d36fd91498cfee49c8a635313f56993d02cc46da3f5b78fd243516cd23c14a4c8d79cf27dfcb05f52f0cee59cad5646a9389b8 +Qy = 799beb1ada93a48819ab70b74c36d2dcc3c5cca1f7a57ec58e643924c3ceb7a90c9cd9bf7ec762a2c428d16ef431a45cd5d069cd828601f903cb0a28182af2392b5ad12ac3a24c6 +k = 04ad8d2759df82dd70ebe9f3402d3d533a1b4635dfd0024deeee52b32373550f550b9fd4126aaa6c3a9b1f352c40c86e13f78e259abb17f85f0041e0cca9e2ae59f4ee3ba2fbc83 +R = 1cf9ce41dd5dbc3bee9f46f82e4bef10cefe79a87e8e00d002097045b9acd46364560e0fd27b0be6655e73b5cff272c8764b4c80ce0e1c91a94b8d05209a28b553f589ee2fa1b11 +S = 149fe587b144c37df2c48c2b7749c509421cfebab734003e51383cfb773c3ef5a24fbac0255cb807f5b95607121c5848d3f9656227b61d5a14042351de084d9b88745be242b6158 + +Msg = acbaa5ffc4eee0850075c0e502a70cc7a897a919f5e7bca4e798385601a26f411fdae5466ba9f6b6d8d7f819a749b799fbf4a3bda9105063e74914e8583ed8b31ea4d22164bee6f14bf53afca269b901c80cb3265be32ffd4ca4bc4ddb83e11eff82ead6d75dc4aec8e5c67f35d58a8a156cd1c0351abdccc0c5396c8fbe6920 +d = 007ab5a55a1d8ecb7f5dca2afdf9ef465569a4b0374716f604ad42a6e0271e934b09655e8e2529784b69b2894bb399b02aeeae30e9e7ae70a2a8e56b9e775bd978a04c728e3951e +Qx = 2df88e368c8162c1dcea5ceee3a4c52cfc8d6121eb81c31236ba26dfd1874c61586d2daacd96cb5ebc7053be57641bf53bf2651cfacf370cf470db86e1470bf285c7166c197e094 +Qy = 30067763f9fa6a9082ea16dcbf53c2b6f11c9ba1817198e5a4e189dd98141ab682ba4de0b3f873ae54efc080a2a03f755efeba3c0ade8ea67228b1a5a11d730302f1eb7c6bc3737 +k = 0d3dd75ec61e0f87737812fe1ac86ba336b1512bb9f7ceac2c7d1a5b4d5dbafca57a5209028cef9468ebdacb2a35988531baa094a1c901d9650f2c5d8e03a1621fb33ea85e2b506 +R = 184a98dec91b9afe52d4dd6b2d9f2d7e3c42e8e614332080aafd2621136ac7965beb4e8f97b222c1b2e5448b79534db4e710331a2f877f8fc2a9259129f0b24d24289495da22542 +S = 0fa384a04c4b0b0745abea373aabc09404a6037f302e234e7a2840ff39c2b86ae37c814e8bf3f3f7cf743748f2b88d02d66a3adef2028de94013c07075fb73f00555aa900337149 + +Msg = 9a57b63a4f418404e8f5dcf3052b9bc04a4f6d2c33bde8651506d9cbc5542ffb9023292dea463111fb78913ccdcd182faabbff9164219b8900c7f9fb394f7d9678f77b18f8d58526ec64d7c1328953b983a7c416583e05a069cd76aefe26e5f5687b70abfbf9f58f052dc0863b4fc3bef805cc3bb05bf76a83235af9d6adfe66 +d = 1e7d4da72b1d82e17a066fe387f2a0a7fa4c60ab993ee09710531789186077f2f32b42ddda497d5fb57356383e1f96973df043307f0b6519430c3f0d40d62954032872fceb7dce9 +Qx = 37c59e95132f0027f661511d1bedc3018bffa62aad7f44d7370f5b169d683882fca3dd0c4260fa8f72a47a44fb0fdcf0d7776ff0632378022bdd223753c66f98dc04904344ac741 +Qy = 2d7f19468b8e4f32eeeaabd6e402a35f38dbb9f2476cf07881d8bcff170b0a6e1ff8cb1bfdcaff734a32ae9bf34a909ae7fee689e3f1ae777812a45dd46ce13fe648016353c6bb7 +k = 18ad70fb9c5673e5a39b3a1655ff76eb84519555a6cd88e86a26f9448a54f04516c2449bab3f75e74a8d15c69926ac43fe01ebbe7e1c97e73870e3cc4c0ca431cf614f35659e3eb +R = 12abdbfb2eb08e326289fdf5615057d912749db4f17848c1ac73bf6a51fbe3e1b2732d4eb656715a6c459c6c3065b67b577f21b8eaca7d657c3b3171e8a4849f55024c69487e50d +S = 09609da5049092e0aa8ebcf10c204de54c968b09b9bfb3eff90b80bc675d557967b35f52e459f37fd198a83a858e5d7f9f5aff8b2ef7272b236dba5857e88515ed471a60bf6da49 + +[K-571,SHA-512] + +Msg = 97b79c76d9c637f51294369e0bb52c4189f2fd3bd0607f91834aa71b3555605a89ff68e84fb5bda603f502f620e14e8b0c7affefafa2f0b303009ee99653ae4550a05315e551dd12a4d8328279b8150d030b03c5650ed4f8d3ba7c3a5361f472f436b200b321e7863c771e20ddd7bdf739c51de3676f953a5501e4477aed1bd8 +d = 15b7271d4319db5743119c8103a7d4c6d57e9c62f3eb93762156d2ebd159980aa57cea948e416717d715a2e458851f1b2e9ad4172bbcc53861db29c3ee0ba8e82617a5866170847 +Qx = 03a5b9559b2058299161770166766aa65e151ac6a22a90205afd27de5eb99c5b1db369ad52f09141d3bf08884b96414c283b2669ec2a2a60c960a2f03d425dc4c229c0bb369d90f +Qy = 024f3a9cf3dd257043dceefe6617a98e222e1cc820f3e19e63c64fdcf7ce8d9c7af7323c9aaaef4df02e498597581082fa3767c8a38f508f4ca2c1eed6f298dc8142668a0027490 +k = 0c585e425ae4a34f9b7b9205f095ea07599716f1eab1a8bbd934219ad760c4606ebbeb06cbfd3952e045a040b8ce20603aea4f965d1b6e87eac7a61672823fb2de7767e3466c730 +R = 129162cce6fb05e1fc8630ec6c3a16d108bcd251719d89631497177e6fe6d1373f114ad9dde6e04a4ee0b4747f91c78703012e5a058c132d54f2ccccfc0f9326b27d60322b497e4 +S = 140163edb5f3c4b49228e4614bfc6da9f73674eab82678ad9947b2a635f733dbce99ce3209f613e2a75e62ed84db4d7d13de6d789b7cfedc0cb6a028d8316db8831db66c91791c5 + +Msg = 564ad0e37c9c37a60872a4780a723d08d1159ddc77bd834d74c1025cdf3cbd5338c3fc07a904fcad9b979b2a2ceb1a0139af35e5112305fd662a57af6312624b9bdd3a64849f95f59a46ca8feb2ed56f87f258518947474c1729275c4d89b7dd286ed65f286cbac76002cc63b92a73ab6bd13c4adef282f32297e441bdd8fd36 +d = 07219ea7917d174a5386df985d0dca798ac9f8e215ab2f0003aee929a2dbd91e37fedead0ed95b1e8aabcf516bdf54337b4aff7ace4c6b3179f2e919a49db50a41c9d4d58d4f636 +Qx = 2fd7f6ea770e0a6f1eeb3318b6b609c0e76ffeaa34e75f56910e8f658b70940cd7a5918328473b279f882816955b2e3702c22e0b3e03863f8d99c64f3a2c9d1c68f59a28eaf25ad +Qy = 6c2cca84218aa019326cadae9639069dd27df4d1e95a4c8e7d7cb426e70e2d38650b382e325dc3835afa719145d16a29e4ff67de37ac8949641f0d140072f59718450a669973206 +k = 03413376b32f18385cced4549e231e514eadfe05fffa0b252732f5c88d13d9c6e0c35be3dbf72029be5e4573b8f8829f6efbf58a12b5c161bb7055d1944eecc93f82c12c5c56d9e +R = 1c45c25f3e8eef9b92142f12e4119842122ed7672fdd82c14b3c34ade3243a4c50495c06b5984d0260376c4fa44c60b2e34b0084066d693943071bb663a44884927352668efcc62 +S = 08cdac0f4498173bf4e59de98ac9a26fc2c752cfea7a5b75141d4e1d019e25d70a717ac3ebb82884436ebe1007b0488c4ff29fa31fdf02f77fd99535c99b69c9d4e5f432516da77 + +Msg = 072ed5b14754fddaf54e20da42432df49bef38f4a3b1841b2db457ff86c44880727aca945770adb41269df41fc17f6a687bcaffaa45a3e59070526ed53b8dc3b78cf9a80a85461eaf4b477e44d5ec4c2bab9c05aa747a5a520b35fd09e8b44539d060ba1c3470267e0dda111b15dbb587614a46e1e477127f963a16cf3a43ee5 +d = 0bc623152253da24bf8d752bd78aedf7d5f6a2f889453ccdec14e10753335ea8bea83fd181a1f3680ed50f2324fbeaadae160cc85831750e021f3e44121ea1b1efc29a7d0069479 +Qx = 003f3a6cc6964ab2f6da95c0a2a7b75afe4f77faff16fa28aa67809afd9495cde1f5dce079ec4e15ec8c1a2095a12e8adc409fe8729d865f50ff31ee75d7d807afd2c15cb142be9 +Qy = 76b15c1ce931ba06dd56dd8e4f544425fba4f37f951a188c8e7eb13a2850c93b8ce60f10b3783647a2d053e2764a957656a184a385e95c2013685d4954a2b2aa20e4a15dbc43b78 +k = 1e091f4febd694879f78e83842572280daa48db65c463e66d9a7ea57b82fda531f116800530a03cef2cf7e5be5eeb6e420213ff757c27b8e8a94513e417f4acc62adc02a76a4fdd +R = 0264c499f7daa6ccaaf191d3502e86458ef088c9bf2ad989851c221364b24a1a3f4404fbd0eb44a41938ac6ab67002faba0bdde7f44ffe6bc10def8317c4e2807c3ca711cb6cd33 +S = 1b91c18fc55635c5e3cff70503e7a49572ba52b11bac193230c88d6eb65eff6b2d9a01f53ab0eb34f5e208538136811157f872a8255b4d249b6ffe021b0c0763cde4d7a7e72b0b3 + +Msg = e660dbdf3e61af39b83b95d3f1970f66d616f03273f7dddb98f768452b21cd39604a31cf80590d4a5e4b0d4917519e10fd325dd4ab7a52d70d154506329baefe0d5816f514ae109483122b4fa8fa1ebd7fdf1fc4e21e8d278a50c05d81c8f489596633d949c6c8fea96fe91430c01522a5afbd5042be8aa47da04581b2bd21cc +d = 0645947d981d258f2954558c31022a3b6ba5fa7b675312f794cb61bfff1d9ce87267e4a1dacb7c8fc58624d31c85ebe22f80d26a620fed5df5bf38515e0903f0b69a606048197d8 +Qx = 2d03e05c4b555943fd69a299249e7148e99633b286da69bbcda64e7b06ce9321d62bead7b8d095a68d9a3ab9e9cf1aeb1d8c4904a073c21806830451a79fe7a907b32df15ea4567 +Qy = 23cba4f6f1815cbe1934734a901206596c6f482011f6cb6d452329f9412d2ef4566429e7d35f2d247eaa7849ee141bb16914b64920fffe6b7923cfb19759fed6e1f80d6c40a0ae5 +k = 18955bb752f0af7d7aaccd0628dcf1f52d836fb91dc78b0fecf21ff5992d9c1f891f0eb3c139803b88736ce10ba4733a523854c4ae9ac35421beff9b20e0c8daf90bece46737579 +R = 110a428aa96277c9a13d4529f58ecc57cd7209a7340b4a78694dd9ec800f36c9c306221fa110e0b3fd65b9dcb67307b7d7678997a3143c04ba96d72be83a1cd6b01ef22acd0f82c +S = 0b7ae2da5cd36006a92a5b2e6369afc2728a93edc845ccb1500e551be361f8658819f7d3eb82ad41d7f2beea1a1cab6f103238a6025acbf03a2b08339841694022c17db8c6c6886 + +Msg = 8c9acbdc431565feae60e08bc7da113e12372ed373f1e1fdd581f98c8a7b0c79ac4aa42c7ffbc963fb4970fe26c5b5dd314b7051fe971c1186ebcb5650f7f7011a924de893f06961b8c75da7bff331847feead4abd2e8b9d6ecbedac18f4eac207b948e6e4215e4d5cb483e5c66ce7ad788cb89604d3a3e051539094079e7bdb +d = 14cf93ca69d94ee8fbea0c8da9d76aea092b73073d8f5385b65c6dd4d567fe86bc2cfb8e8be890c3c6cd9abf7dc3a17eaecee3d7a9455887863e496c48dc3e47821bd3d825b6bed +Qx = 3dfd1fac02ac4bd3e3017a3d94f29575238937824f80ba0b2eec185ce8c641e9fc72194323c779dde8c4fd6e748e09d66e82c82add75106a0e1739f2b977d40ecd3cb15a1eca420 +Qy = 6a73dd31226adba7ed8d08476b5af10a806fe8de72251400a83f6c9f6edf5e0cd6bd1fa8f3595c3ab32b4c4548729c455e4eaf83230e1335cf181cfea6b6bfa6cd4ad75ac3278cf +k = 176972d9402d5d6c9753532e5ea907f256a872c100f87bd390c4d610bc00c408a97bd55dff2de1ef2fa8b9716e33a5a39bb6ed2ab541848685040656ad0468b360f42c3742c1fd0 +R = 00be28427524a3b0979cd82fea407463647a77ac45c489744a9998b545a13516abb9213ab0d89a2f5f872d927ad48dfa502de95524f94f34b174933f3faa7b554a1c2c3a688a0ed +S = 1d49594454516c1876f23f2ba0b1fa4dd8bee028bed5524b7635a2df5b8459f4832b3db5f6074cf07c169cbfd9099a85ec2f5c42043c5b851c81a71c87affba34b11eda67e0ab69 + +Msg = 53ef87d6ac7b9698f40b3ea9f3442e7b64207b140b7f66f73fb7d5f8f98452d30a4e493b6c0e3268371e88e612b818d4d847f032ed4983817d020411a52d81fd2a17b58ebdec199d817c2a8ba77042bbd747a6fd4bcc7e844ea829fd8461b389aa0b5957d92962b6d4e86385a8fbca90b8fac40944607117e9a4ef6dccb8fc1e +d = 033feeaaaa28f16bfaf5ea9c7319cf4561ba4fc55327a8477b6cd58ef6ccad3962ee1f3edb243f3a04e7e49c8e23509fa2d63252adb186b8bc7e9255cd61fa9bc45242d42da3a68 +Qx = 6fc62c39bdd41ef7083ae10dad59e38dad217c55864a55a6a80bffe2f5e7da977d79db9ed8c9ac22d6f096129a0c680ac93fd77da4ad96e292a19b48454f91c93a3132559fecf07 +Qy = 66f1f737ad3af3df674637aa5efbb844bbc441966bae73973481628e5c2c67cb74553a7c8f2c5fc478edd8265bd6c99d6ce122a245e46fbfc21992b950f04cbda5eb220261316c5 +k = 0a5b86b76f98310a25111cc3d1b0b70fd0c20208cd0bfd8007cb569a187c3a97edd8e716aac938900c3ad8ed3a0d091a18555ab532b50f25184454d84af2beafadf754862b8ec74 +R = 0de2eade32f537727eeb82dce610b48106b277d15d8fbdb77cd312ab9983ab21bed05f05186a5cb2b530ba72c8c68b768c26d942f9224c6e6b9e7827c48e129833cb679c70aeb29 +S = 15e4fb92190bbf8dcf7548057d1bd5e5ec54a6edf54f6b88f50e96ac87ed7a7b7c0fe1e1174ba3e822fb7e7c083948296cdcdcfbdc4bde036a07f84d210001ded91c554ace71efe + +Msg = dca1b7a9a313ead11c2d54739d9017ae27f9d08b3544e418aee862bb57e427636cb6aedda28e10f12aa15d2355f4f8ef112a86fec5dc46e6acef693cb8fc37c3e4885f3be3d3ab31ea4d73a0de904e95c7135a149f77b621d642f9bd8ba192d39cfc58b6f19a797c4f3b4f3a87054298e3ce5eda0ff7f44f8134c9a108285dfa +d = 05613dfb53149bf5fdc4e08ccc1c752b0b66ab43aef2d008ed40f3df40fcbb2938d2c41e3ea2dd4428aeba9059a97efe5593119673866a19d27a2ee37dd357e22b6bc849e7e22cc +Qx = 7ef12ccf6b64c7ca64b5da45937281ec770ede572b9a8eb685f3614bc358ce550195e74666af9bb54379c1fe1304b76430d1e51a9976bba02e5781154c9bc187a31201ad99cb48e +Qy = 43d4ca20f06b26d75be1454e96f0568bd740165a2bc6e5b8429d557a79666bb7b9cfa597d392cc5b8ecd180c37f9fe2088d7908e59ff644ab05568d974ab42ec9e01676e1b24169 +k = 10b4b67007af35942216e9aab1d6561bf7684f334a80c7d909a6154cfde8ef06a148af104d534d7dda59b5cec7949de4086ae669edcc4d68b88347d2445edd3037525c97564ce78 +R = 15bfb47a27c6970fbb3256410d5c2f6c04eb308569a966790636899fdb3122f9e3015455c4b50a6bd8cf519afc22ea845794f51e6994214feacf48322af48590d02cc9812960917 +S = 090c61f6c64381845491dac81d5273d58c59d9cfeed214527a52c8f23b0146431692a25cbfd77abba22d4bc61ef24093c593c827ef645853bc8deef7c3b07bae919152b90c17f4d + +Msg = aff61d62c8f5c31bbb7d0a64a6ac589e918bbf2f13e7ad13abb9ac26405e267249a7c9922139bc28140833e10976b87e91cf28285274b2b48b63d24ac94c85c70fafa78f8ad05955c0ce6c02b841ee196dab12306e3e3d6138371217e2b474f7e67a80bbb78a47e374ffe2c9f86292e471c551da50d46e7b5c8331029f369767 +d = 11b92c8b72b86c51903387a65aa206988d443d1988253329ad3a89c902ff1ef8cf73b7f2e4aaa352443bcb833712d94c3e637ec12cbe4c2d4606878576b17fae1512fc77785b737 +Qx = 22440b63bb4557996b63faf19d9f391c5085cdc2cda3755622a6cedc676222ceb5a56ec36e220e507973c0f07e4b2e2d565a69967804ad311f0658a9854b1eddfb5270f4a86b769 +Qy = 50199c9e443555123f153249cf7256dc3e82c5d8cb611adca0cd4fbb0a9a90296bfa770c1b0c0b43e4363b0227273a9ec9f00ecf83afc605b0dd2e5e24f739dd0b4ef6bb11950a0 +k = 0e5ebd85f5fd9a9a81067fdf51b1906023e68672d160ddcedeb35787688dcdc314359ff5347907b685a718ce38a69be17de292eaef189fb9ee8c63271bd6818904cd246503dd227 +R = 051387b0d057985dce86cb962bbca7d9a047f70d96c20539ae7d6b7cb8bffff606f03b8315f15a53049c6c1c227f86d395c2217d32aec32bbd406c790a6cd2706775ed8a0ba1ebe +S = 0c7f3b7e4a8b65a58c1280110f6c2486cd2d2df7d48b49074e98accdfca4a72fa7d43bc25c6576279f4a70f22c98135ba79158bcc3452940963b556304da8e1ae88973d827bee32 + +Msg = 721017294f17ef351e41256b57a64a79f3636628c4bcbe676ac9a2d96076b913dc4b246c9945183ec9bd2d251441b5101eac44e2fa1bef59dec03ccd7fa5accf3b7d094d68dcf78c8de4e2f19f56bf0dcb3b66b9421ec3f8b353b9fd74feb2e9affe0bf9aa421b6f03eeba3ffd58fba56b3ebd094880e50de01ee62a108a24cf +d = 0c3c90d5ce4375a08b85575faa78ee6bbd9e5571ce5a90582042617b807339c282cdc3b003d82006264b1c08c20af4ad4549fbde53d262facb98d923d81b8eb6093374b6a1e84cb +Qx = 1d900b4f64c07cb959049f2bfa18012f9bc2dccec5a73e9a48a9d5d65499e31ec4a1615c4c50177c032d388263eba1a90e07ea68f081e10272e88a41389bd2626961b646c76ed8e +Qy = 5c094fedfb5b118accd64d5d46ca2ed92b3123a62042a556ffee9e3bf709092fff88231a26917d368db51d1959ad3285c7faac16ca57677651b070aa0abad96f07d35c5fb8a0ee0 +k = 14d4070307cd269cc1a3c048ec0847edbff46f64c1ba5b734d8a800e50a0a02af57cf24750d292e2c247ef1b860a9d7b5069a32f5b0546fe9e019e04af62316eb79507281fbef6d +R = 1cda7f743c47ae93a9fa533145feab4c46252afabe3d54990663b5891b4979c645ccaa05c744420ed6fa235952f370f5aa187250d7b069aea1123f19f0f18da18fde98100ff6ff0 +S = 180b4163f2eba6e3769d8345dd8cb003ea120164442efa885eda5bacd75f8d705b7f1bae2976f67cdfe984430e36f93455ee7528fa6febfe92e42a002da165c63dba8fc589e7851 + +Msg = e2d1f33681759adb7954bb5248b0db3c3885fea0d4c1c0c226eb1e6d2d3ef1b9ac281a0f1c2fe5175b67114b6a501e2426d1454bd5790dcbc4c232cf06b017de8a9bb39e6033f1edb5003e8de3b44cc3d6150c3c952afb442952483cc688908337b7c1a8b5c9da70937ccfa98b2b0098c530ff848010b8e8ee0a8d65283481a8 +d = 10f184c16228d9034271332178ed485d10b6aa76003efc160d63fea26fbbdf5552205ac7df0d8c852a1210cf0ba512f20b798827b36ad56b12a826fa7dc1db45aed264ca6822659 +Qx = 2637543ed8a11271bbbabb2cf72999f65df0104758c2fd6fbf3e1c5132ff1c1111fa5504ee86bed8f219d5025f8ae07055a7849314d2d439408ea2b2ddc40320c57f5d41255d0a6 +Qy = 14e360137ae33ce6930b844d42bcda4050b25f349e9e19fc4fe82f5e4f73cf9bb50212ea875a5735faaa1d5494f1685d6c8177448dbf356b408ffc2ba0726c9befb9de9f0cebe32 +k = 1146574a96394c82972eed1ab7ec98bd08f27653c565f0626fecb431ee4fc6f830554df35fa62b5f82eaad49524d3d4b0598cc7a2181ce9860e271812373d21be9536fc181c3f12 +R = 0dbf465de2c5242fb527f6e4a4188adb96a2030ed8417cd9431365173f569bfdd3e420f86947da10a703370d7f38dc43e2249a2476690829545992645c9c83d82af8adae893780d +S = 1499782e0163f80de68e3a580ed08fdec8d6552ec69f186a74be89480be28a0df6acdf7c65a72f115f8a59fbc28bb94af64cb3bb3cab20bd25265237a010370d9a5c781c1e26f3c + +Msg = 414fc5d2bd56b30040e105cb891788792da595583b11b8fcc7320f40dbf64d9263532dc57344dd17573c95eedf851668b5d552e8796af205f3a0043af1a829fabc2e93d9af9091fdd9e0fcbcc9d6d9ec960aa60e4e2964c29a2f375400366480e513f63d124db7745847310e69a38c8455e4e602056a6a4a14a8694155e0a9bf +d = 181baf9d497159f837cba58a11ca435c442e5ca792ea559bff9f6a1f562c05bf6bb5914afbd1bcaea75b35f88bdd832314b249a5298622c89462344d3f28a44ba3d059df432fc71 +Qx = 6f3915f884e250034db97327470197d13f0716d1d810e43055757460dc252f5281717b3ef3fdd51085e65a0e073e78b697a21bc33137213981fc05d9b34caf7dca7a4f99be78596 +Qy = 47a96ab5ebec6201b7c65ce7a6e70effeaeea1c095a0172e9e2c7bfc88f7b05ea575076caeab189f810258373cff2484f4fb9c8167989f61aa61ae27113b5140c95f7faa505d2d0 +k = 10e9e6047651362accc816389b26ea6befb0e34fe7363126f8c4ff9333266f46d63c4d45075480da9ebdd0f8da7224b470d914ea1d68cd821f563b574bdeffdd0b3ed73ecb9133a +R = 00e36644cf0861f45b333092d44fdd99f56e89bf3607f75a06920dfab0ccb1831208296aa2431bdb75c5d50f15bbea2e13d185db6d7175c221858fd2b22afbeca7431c290b15d3f +S = 023ee3b9ce817eb0a6733c85062cc3bc5f1ae62bdf3a74e3ec704baab05784dbb5ed01a6a2a73c80a3e754c013ba886108d9eed2bc210f29a4774bfe5508ecd876ab47a8527c530 + +Msg = 3b592cc8972a4782870e079b82a50f84b4c2d8ca90bd500d1ce5678982e266c391c556d8162ac3aab967154d072dbc0ba1dab5545cf2651753dee2881eca5abd412fe624bf3f9d17d33692d21ce23ad15ccffdfd250cb1949e73c9e40a64ebebb03852e92692dad1d7baef97fe109f35b7a492b343d4b643a4a7b1723eaecb64 +d = 083fae86ab96bce99a53e50b7eecff38e4e25b21c4b0f6a4986915de245eae24f16b6a00a4db159ebc27f5a6a072da94ab6be5bf75f5eb3f75c4452bf4ea7014392eb1e02706fb4 +Qx = 78003779e0287bee54df31f64c58951df7999b48b647a6bac416f844485a4cd7a53a64170f9d2d31fdef0194a0c262b90e5bd33a1782d2ad56c210cf80abb5fb118cffd71ad79c1 +Qy = 73f89ebdf0e255205a7525cc12b7e1c58303ac3b3417183179c216ab8e47f33d0af3238e3ae64d418ee89ef3a2cb4bc67a1d2fb1923947b9dbf3f4fa39ff82327d0ce3db24d2324 +k = 13d126fc4033f537b00a81372031026f6a7a2062863a68e36c6909c548833d1a8f5fb5fe25c7d9f2c65b1dfa974630204f71e96d657095b93cb54b00cb88f32adc08eeff4036654 +R = 09be9f4bcd7b8ef111337fb665379509b8b17a2212a80d5fecc685f1f362c45f930acaef9df47c33c6028cf7aae424264575b4635a11edd6b005ad26cf2021051501fdd1b77d2dd +S = 0dd196343ef76bec527c5929e02fbd5d02d5b0a4b5f2c8561978e600856de56d42943f1d74cb81b67010bae98de0efddfcddea5d354c60c1fa76138801f6cdc5bc932c136309b6c + +Msg = 0079a02cbab3dc02601fcb5c8607d555beef7cd71a66911ab6514a4ae21c5a9c0e166f8cf5fb198ec5a49a96e17cf041f35f00406b79270ebfe56dc6b8417d2529fd625686ffbc8f69685aefa2fd30a937c02f25b48be4679e6fde821de928b33b12470867def874bb8c7c8038ab6594346a2c44b39210d3610994ba60a05e06 +d = 1a663efa7bf4d8479bc535fad71e9b5e4f4281aec55967baa008ba17ac2f89cc3398d30573edef29d590fddce8cb157f655e92779f59e7a18d0327d02e7daf4c1216143b3688fed +Qx = 6b4bb31856dc516be60a0d2d9f42508738edd4f925eca9c72a13cf136720867babb38622fe97df70a1edb35735365f34c74baef9aca539aa1dfdead3324f41a16ca69bdf86b43f7 +Qy = 6c4a91d3fac9e7647a6aec6e4369158bdcca2275866bcdc5a09b2f0f1eba10551da9613eeb1e8d3233316b62a5f4641d6aaf669b975dfc511f2437d43c9eebe53c5115fb4741b80 +k = 0a843d0cf776878fa9ceb163d7aaebd29ba3aea0808c3459036b258b99ccae4e2444bc3211b5898c0769b7d7e036c07803497e13803132b3c6301412af3be8eb4a853e939a247a7 +R = 00356e282c096fe1690fdac4c0c66eda155ec42356dfc4783cff0160e1d76b33a99442d4ee0e3f6e1c5bde4a16c8e18bd18f98a178c3fa4a560d8fb8b4b1d72663576f8baf8672f +S = 0c5018c1383fc3847819726e1e940028892e1abd164b413293fe50f219f2059105218e4e3b952b912a3258c4ae52dcc03ac5f027fdfa448a8d58e3aa5c21e790b3b47bdfbf21175 + +Msg = 88573bd94ef50459814806efa868ebf92b066fbc2f7a4be9d2fa06b9dc1a72f72d783a6bcbc107b18a6314511bff217037a2252e7a5cd34cf9d5b2fe9c7846931f0133b2e95876cb800dc4ed7c4a4e4cc4f1195acf99fb0ec224b1f8fa8af71f72d390eca9d6be3879032a318734a63fec336c79035a43f70271def10c4955d3 +d = 0088d1a2c0219696a94337cd56516252b74139ea0733b17fdcbf7692c3e5f6c3989e5da2aaed7468e65a5d578571928ca273ec3b6aa72cd196f560f05095cdc8346e5d31c4c2e0c +Qx = 357801cec0888461ffde22d83afa9ca008ac88518f4b09074d29a846f5900e024a8e5947bc25ed0e5c980a58fd5e9aadfbfab31db8bec575fe886deda80134d91b3de9625465302 +Qy = 710806c7ed33f6879374c59ea144326f5948980c8013144345c5070122c0ddb7e18e9f752eadf2a9b0854dfb7d9b2f0d80ff0ba46197ce6017885939e9f59b642a8fa41639ea75e +k = 16940f69013026bafb6f400c037272176b04e35e9f1563d382dc9982968a186e3e1525775d27150b34b8ce5e70b537f0149ce1a521d056b52e75da7e39ee8a529ed987c70b8234d +R = 199058e36449ee1a3388d7357c9c1020b2e4c02144aea14b041bc584a752c94fb6e474959b24bd2c0c104f5ecfe223ebdede672298c29195033aaad5db1852ce4dc3185ba2409a6 +S = 11f3defd9b442378c461e2c68b239d2e4afaed691238c5ac4e0be46ebd461639a60176f9884133900f988e2d730d34df5e2bd8a14681014c0a213f8d233b3c50ae3064fc38d1a19 + +Msg = d0e02045ece6e338cc8ab41d4a064c982ccb1748c48fc2fe0a6f10bdc876094358a6a90a45facec798a83cc95c6795cf0f0d7c66b77e22cb114c1432bfdaa1485ff35b6a58107cac3b7e58cb4f6c87c68db60b751e78f1fdfa54b8923b98caad0a4f31226956d065c083ace5f1e9e91944dcca51879d782e40358d58ca758750 +d = 16cc8a0fd59455ed8d4de561fd518df2e008f7dfaa5f7f29ac2489a411e233917b43eb3ebe2596fc824be58871949545e667dbcf240dfb5e0c615ade0179d9ea2a1b1ebb8ab9384 +Qx = 2477e678793593e2abe837961895c7ecef71af1feb882ff27cfbabfa0ba3ed771b79223e7b2d2388efd371d5c325854cd60e48484f818e1a8146fbb780cd6ce06ba63c0db67df8a +Qy = 01b696114838bb972ec6d536abd809d3a436650191c43b2bfeefab2b400d5921a7eb78e307266acc190e05f3869017f0a66f886bd6556c58aafb1042478cc768a4f86758e9f4c32 +k = 1e1b851bb95d2913d6d35b756d49fba6f4c127dbed80fe4068260cab89c1d42f7a6843f731e83b379ccd8a4915d2e29550f3f6ccde607cd0b066dd5fa41ac2bf37bdcfc26cd4d04 +R = 10d4291346685fe070b267edad91154df83664dc115f058ea036c712929634d53662586bb50cb6473c2170db5d4ee43be0c50532015937202e193d15d5189870691ba65aead7f3e +S = 0b2a15f1ef00204bcfb5108d8f1da96ac3297aa041074b68989ff5b6b276380de7887753fe3d416ba691ba0b2ad7fc065ace02815b2323fe17f6445b0fa66dba5d99d8e7d557cd5 + + + +[B-233,SHA-224] + +Msg = f1b67fde01e60e4bb7904d906e9436a330c5cb5721fd4e0a3c75b83dade868736bb1d21cfb1b5c6407c373e386ee68ec2239b700e763728eb675a153b8ac44cf2a87be85fe8ed6683430cf4b7d718891cbf8d583d0a37cc952cc25fe803a7aa4fda80f05541a2f1f2601cdd0c095f7110f2a84f7d641b8531572269b21cbe77b +d = 056673197bfeea9bd7a8b820b4ae51a50411bf118a692bb9ed3d304da53 +Qx = 03489be62e53910c20cb508de019c3e326f65051f26749944b4454f156a +Qy = 0f775ac38baf19499675725e8190aeea16f52346b1c890d9583b38c7521 +k = 0a6c9914a55ef763913273b062475fd0188eb2d5af9c8c1dd97cb3cefc3 +R = 08601a42d7f7eb047e8ed9820ddce665c7277f8ef38c880b57109b7160d +S = 026d6f50f0508953657df5d753c595ffb8e1c19f8d092f8ce8db54f76d0 + +Msg = 1d496d96b533c632ed6a91f6e3653cdffaa5b8cc0008b35e49b2dd52fe261105c2ec7ee71a4ad5d51fdc3d36d688a3b7ccb3b3b0c3a65be17b8d8aa172e3005cfbf37a2d1b1a6e268c090c6f318e7e96f9ec9b9f5a8fbcc7558d89e840f7e76e44bed91c26ca48e6f5cbc253ca2fe8cb81c484cabd24070e488f9c00cd96ad4f +d = 0468f01d483144e514ec257f2e5fdee28a927f2adb19714c1f3524dd0d3 +Qx = 16b3cad89cc42b80bb730431963526e26ae3b415b421575dfb6ed973e17 +Qy = 1acaf7de06e20262efae01fc80969cdc1a281f68e8c8bc0d2d4fbba3a3d +k = 04d261304678301985f5bb3f6ae465f11c9fe0e5031b31f194969252703 +R = 0878a87b2867c03f55726ea2a6db822788f4aa4e9ef609997940ee8c8b6 +S = 03545153f0554a8f55301d4b948043de3057cace62c8032c8ef8a11dbf8 + +Msg = 723400655027f474446843645757f7e2cd466bf97275067b4bc4c9d79bb3b19b2421835d69db916f24b77c381fa771fc1e7a19d2b4d09411ae55acccc615b16fd24705762b441ab67083a921fd4ae569ce0de69449aa96f5b977ac7dc022fdc8335656853796f54b3fbd118577f98920624eb0a00204f1ef83827245c06646cc +d = 074052d027f05465a8083a59cdbf32600224e1f563f653b34314651517f +Qx = 06999290db440eb5b3291bd4bb4a1af6386654fc4d275ef136c0e03dbca +Qy = 1fed0b1f9284e488c7fa2a010766c340bc25dc132c7679c2598e423c3c6 +k = 06e38460379ac3fb13f64d4de654d4fa30bd8178da0bfc29fab2a1e2e39 +R = 01b18bafe55e5c24fa2df4c09112b44d24e78dd09557349ceb1b916d280 +S = 0ad7cfa003267a6b7a99894f75720cedc9cbf820d355a6b840709f42f62 + +Msg = 155860cb31a142082bcc0bad828d747e916392d21f1873b3a3c1d28ca3ff9d45ddb66a712e3856b6afd07c8d2b2a7badab296a9775b03f6fec0befa2d8d6d00fe3938df244ab46e836a3e686c8b4f918da49f0bb3940bba34a9aa22c7caf02df7758b0de01d9f47af6146344b9be3842d9c055eaf0fb399cd8db95c544a62d8a +d = 01856e7544223f55f80de72a6ef3822fa8fbd68eb397d06e2d76ddd35e0 +Qx = 1a117e52f09080625f85fbaad8ebe0d3ad410f034242bf48365e88ff735 +Qy = 008b8bb7958d191265901a3f15b2919142505efeea13df6e42da8b0dc1d +k = 0aa106ad1461353865706bee9aa092b00fcf1b0108ecc1266ad5d8b6579 +R = 0bd6fcf49029df32fe0fa47f39cb9428d95d00a84a5afb392d7b4b365e0 +S = 0b17734befefebf03d1c79e59c12ed3c57e7d120dfd993bf276de559588 + +Msg = cbd6e305cc9f0dc90caee6e65a74582e9357bd25c78e33a7b14e1ac7e9397ff4466f192fb432143e6df6d61a0ab808ec0a361a6d95a357a38cd3e241fe03ed883ccc364b248ee2a08702110745c2688bdcefa33c1a45b9c8b200e45cddf3e3f66b8d37eff07fbb3366ea1558ef304085613c56707095724b3e134c7a7d3f8dbf +d = 0860aa2b589f2defc617be73e191502e5d9952bf60547fef19eeccbca26 +Qx = 06abc5619422b7d548c612e54df0385c293632d4d97c21e2e15ad98d0c5 +Qy = 06c36c072603681c1b03f6a023c8e987f39d931bc2a200eff82239ee38f +k = 084fb252dae9a96a44212d18e15cc52d179cd5e3392ab9da57d04cd5a9d +R = 037cd554e7815699f033ca9187ddb116777ef847b92353f613152c4216b +S = 05f806dd062043420dd056998bdb9822b3177406a536d766c4aacdeee81 + +Msg = 812a218ff1ee1472c189f63386e5b8ab341671c3a4dad27a8c6249d1c0f9a29338b471b6179f17a078b6504e804ac55ca3b13e68a623041bc1a092ea2adf3fa1124bbfeb161e6d7c483433f1548763b84da00352a6386e1339f674d45dab13898147ede468e0e01d2c4e0ed66b395a16cc3ded3e952ac739205f35a83376cbce +d = 0d0dec052a00ccebd0c0c5d9a08272f75744a2582cec7ddd924a2b022b2 +Qx = 16bb8c3d319b93731f1055756e57bd56d50b6b9ffbe42735925cf6f7675 +Qy = 09dad7b87a749df130b45d9cac8011101c15abb7e64bd4fbdd94107fa31 +k = 04098547601430c723ebcb04b23e0f1ce8b1f79ff7ed3d05ba130922b01 +R = 070ea6221c0d62930b019faaa856ad2c84c3989ec54040bffc42d8dadb8 +S = 0aa20fc58beae8ccc880e7fcb48a471faa5baeb36bbe5aee71ed9f8adb9 + +Msg = 0204b1fca831919e89e108cf140b3770f531a696b1d9a4d1fb68809eb10afccc257cc90cd36717c02b2f3d6d3d1d8a93cc5c48aa7ab9f9fddfe121ce9143376535a0c65e247c6558eac49fd1d6d1bf431ba918c471cb3d536ad485ec51f6471a340ac75f160c4c54cd3ffb9dcc123124b42df1fd2eaa005e3377c5d2d55938c6 +d = 08a017d717d6d1213f2b74c53281b07258738c0c7db649ea1ac46b9a3b6 +Qx = 1eb379e27de6c04c5320cbc18e79ed9e8993710ac70ce823f1ab5762b67 +Qy = 0f552192645d350361762aae79ffba39c33c2c5c0df208219f1b339016a +k = 00e4822b2cffa327a8396301b21554da6fa52f418d67114bd58e850d935 +R = 0d64dbdadb4ada2d3a8892049f7fda3c733030522b44cd72ab850b77bd0 +S = 06fbae2d8e4fc04abd8a6e9cb011974ac851ec108e38f9c72603f7a04fc + +Msg = 2033eb48756638cb56e2cc39a3e775cfa11fce86cf71f04487dcdbc7f262bc8350a30ced54d1fcb697b28a6e96f88f782947c997872307ed963e1d68985f756435af77f57755cacbb4c6b50ed419deec9f39f0a549a13e54254fa0a5832dba2d943ad4aed8688889a2dd29dcb4ea12abd6a6c50eabcb3981c3a0c1ca5f0b9629 +d = 01b56c14442b084cfd22aeef0f8028ec57c8b571c9fc1e43de05c45e47f +Qx = 0d450c533b13b211b8c91dad0738402a5c811460426ee2f35ae068f2c12 +Qy = 15e1c9f9d398925c619f8aa0bac746eb7907d3d510814cea185a7efe771 +k = 0dca09773730a2758b7f4d9257a8e6bd942c141e46bde5ca54a79468c4f +R = 0379773ebb7a2860f3422d8f8f714b234e5abd8860defb19c659c9c6179 +S = 0cb9272a27661604425ab84632f586048483b9f9cb80b9697898e745117 + +Msg = 2986ab1cfe8873009e932dc68d4727d77ccbbf378e43fe4aa7c54416346b036b89c0aad1b82977c9fbc39a00f1dc916c0561d8dd70298c02b6cbfe572e0ef2058641e841c6875e8515f3c1082765e046c90c956d984b76e0e8e6eb433ce26c1757ac5b13422479141971c20102e9621d18f51096ae3173c2753facee2862d66e +d = 05afce37c5594586ac46a34ae291f591eacb9880a7de92701977f447fbf +Qx = 02a069ef14f2989d2b715c5006642ba966cc84df88bbc27e713e15c47bd +Qy = 0f001f60b8a8102a971faa2c42d3ea9cec37b49c7e6ec0cae9f7fb35713 +k = 09756db630ed9b708bf1ab8aae6a7559bc235c4e9f4002ed26e2f019aa1 +R = 06b9b2c1d214373647d9a2d24ba69741218064004614368915d5cfaacaf +S = 090dd607329c27483fe43b7be137c3f51c23217c939baae40b53e65af2f + +Msg = aabf5aa90ceef91c2155f90660adbcb0eedb996f5242cee15468ae217058ebeaad8cd4ff8cdc754a8ab85ba43c59fbab6386686fad5e27ad3848fe52191c7e4b203720841501792a625aef2acb6e36493b792fa55f253effca682946ad8c77e01f44e92ec3c258d0dd98d3183f4dc4a0bd3eca183794abd6232a6f9e4add8f57 +d = 00696df05dc7a54a9908a73eb18416a155cc8df4ab26032539d86eae537 +Qx = 08f9f494ddf8d0030746a8c0b8d215dda6cc2724f411a7ea407629294c3 +Qy = 1ea2e9f85f06412d29c677aecf624a83c2fbd86482dc0d564906a91d97d +k = 0d62b06628d3884f0a329a7b6b4f832fabea4ebc85ee03e63f2967e7810 +R = 02e39824f272d4b74810594810957963c777207217e53a672010605b9de +S = 0e64bc44af64b6f879f0d32f814acfbb98795ef7b2f246b3f91cacb55cc + +Msg = 29ff209eabbde02b10b3fd559671fa53e418750c32c4a18d31cc0186d1077581bbefb8770ed079f536e866414a07431ae6633955bf42a2389b6f8a565d6e4ffb4444336e0030093876a26d4e3106e9ac697788e41f8a21c755eeb86a7c60f18e5e1069f16408a4c375a6a68d42959f2fab7ac09736c7b37c80c05897d8566ce8 +d = 05ca31e88c5b2e96e433af2023a66095161710628e7bfa428944d6676b8 +Qx = 08232d4bbe25536ea7f83c145a8d2b1cd72c383eefc2adaa1ce72c7dd9a +Qy = 100b738c6f1551b3240293ee8e8ec29fad0cc485ffc2cfded96b68162bb +k = 0df9e1b418ca1d41d749ee998446ba1cc54bc8bf72eac6f30929b40b5c9 +R = 0d4248e0bb60fe46abf7bdb2effe804b9d394d8a5514a5791e149d435d3 +S = 0b89a459fb99cccebda754c4b2ae264c9aef7b5b610427f42c35dbe7d3a + +Msg = 97765d876c80819f4004a36d09ccba78e600efc71eb7e869d3a00f658d2ace6769c7ab1ef590f41fb070aa8e08615e138df45ffbb6473d4a86ba5fdf17dd6dc9ea9ee19c0332563c99e6a3451c211d286d69102b47bfa6e07d468d9bde82e5c2063fb1ebbbed6086f542cf68ba46d4f214634afb1146dd5a6f3d50912ef5b824 +d = 0ef8fe84727a2ad8bf4e646ef28a492adfaf785a3a2ba6e6f985c649a8c +Qx = 03435eb25ce9891a78c120098992c666940103eefd80d9bd64f1d4ba37b +Qy = 0ddd6a4a01e443c92afbc247f634b85f1c858a2aaad35a26f57ad4c9126 +k = 09753a236759eb32e13f19b9d2ad06f7b4db4ac7b1df96813463d0cd557 +R = 08408fc46149dcce0753d7cae0f50c8c5fcc97acf7a1a02a9f68c0b80c7 +S = 0b5ffba104acc6d0cba87523382ff928859718122c4d0d2298e74985d89 + +Msg = 21cf768d087d1e4eaa8a05e2008020e243116206d675c09be42ef2bc93617ecbb0575c873c6510ede9979215531b62126552738862fc4323d487992754e39d8f0d7e111e165ff254200e05082f59a57ef649bccaef6f980094fad3b7ef93bceb161760e200f0a2e396fbb6b6142dc84d872311bf932b84616b22231747937d58 +d = 03edb94b8c62f9af30c14a790c0f5d65e362a21cd8569b9725916d534c0 +Qx = 065133691b888cd2513964b5a905ed9334cff6367e25c09db1743045d58 +Qy = 1408e1ac721bfe2198086c1834d484b6e5692c037e09928cff87f4b5a88 +k = 01d8f800ba05d8173b0f1bb3aac0aff68c6b24cf98c28f5a69b0b5a52cf +R = 097c07d4352e39e1878c42fe97ebd4c3ba5098706879fad9be4bb2dc2f7 +S = 0bc669db3a488e613665cd26da7927c6b6a073ba6b0951c00d22ab1ffd1 + +Msg = 7b8e58eecdab3e40212bba6bf284f9379265b3d2baec3e4625aa08d0ced851da193c292ec793dab42732c07b4e94d8b19c83aed796a7e3a6c2b954a7a9a1ff9b2bd4ca62592c8b68f709f1ad38a5c8033ebb3f33d176945bfc68e9ef2b0cee2d45a13ce89d238a33c09ce2c0c63c4233aba5717b85c4c161dd7648a41a5e39d8 +d = 00a7519be62562318da1b67d22cf8e720353d22641e0cee11c7a352bb93 +Qx = 13b63dd8ca9044a3e518a67999a781a5b62994b6e20454003a9bdb8715c +Qy = 1a2f9bfaf528b7f5bc8c3b02eccb71666c83e4a598b4077de999d90fe27 +k = 0992ba1a8331bc4d88be7dee06f96098bc2ea56668f345e187f32f38171 +R = 0c55b45bc7bc3092ffa82234b06ad45525b45f8904011f1bd6cd356f0cc +S = 0e6163e70ab56d43fa27211b98b48f1cade127237bec1c6556020d39990 + +Msg = f8f268d2b04fe47e5052c8d0d653787384b9654f0bd2138a6f52b80713feeed452b976a90eea4edcfbb62d04f3eafe172ddebd7cdc3701ecd6008e3d82e8eb217b13b5228839f61075159f3bd1e1409c08903874b6dfee2789dd72c208ae769ec8c7d52552a2b1fd73dad24de8b571f88e2184d0ee7d063a121187f97e746f2f +d = 0264022fd7dc2328a6436b522793ad9406d7a586667a0daaf1bce927338 +Qx = 12d7e7f8519a7e357510adfca2f50182dc5fa12fb2a77409fb781ed500d +Qy = 0ceaa9a22b7ef9febd8a9962ce21d83fd2a2a938b9d7a78d669dd233974 +k = 026fb8fa6e746106500dd29ee32bbd03b94302ec3a123356b23b3055e51 +R = 0f416418f7aa4d437e7606afedf961b968a67d9a1524d60fe3f6df4d3d0 +S = 08d3afc975a8147fa8230fef4b16e3024180a9768702038f955357ce8df + +[B-233,SHA-256] + +Msg = d288768cbd066fad4bb2500b5683fa9e4eaedfb3dbb519b083f6b802efda0a022355565c5fc6babeccb22f3adbbda450ce5d633193d1431e40c0fe631a295cf85965cd3f5937b31866bd6a5300eaef9941daf54d49832acfceed90e572ef34ccc94eacd0fd6b903fee3c572b963d21e2881656a214d2a4c125778dbe3bbeebca +d = 0da43214e2efb7892cc1ccde6723946d2a8248a6b4d6c8872fad525ec3b +Qx = 0db09738bf0a0dd777f67e82be50dc8c2d8e91598bc0b8d4486f67c04a5 +Qy = 08ef463e2f37ac7c3d276676cbedf17ae11e767ec577da7ccd90cde3b74 +k = 0249cbd55e307a0fd10a0c70b1c0d5e2416f4d7f144779ddc11911f4a08 +R = 04d1c99f9d486fb92b132d68c0173df891ca757572f7acc03cb41d46bbf +S = 07de2deeb58d55d65fb37f600d916cfa49f889f02ef53dcce412703d1c9 + +Msg = bf0ab46e0a756c11229b0ea961f8d57218be5b00ab8b0e91d7664cdf5e0341c412c0e992d26ab12115197db39df2d1a6e18ed26a91be461432a2dfc21d98cb16003e339b0b0b1f100e4e6f4824ddac5442f22a1fac26326ed8a89cc91343d7223986d485cc8c64424e84d56be536c57e4dc5faee459b1958efd79e07e90a9811 +d = 0aeafa49d776b61f6a30d66ff64bd40dd8d79891dd5293c1b5cd3b46a7c +Qx = 1ba1b87b16122e6939da5dcadb8902177a9f9ef09194c8695008b80b588 +Qy = 08f51ee5cea1f4fc9c44c70df57326ff121268bf4e02cd9b2626fe7c1ed +k = 09d640ede5bb60b9aa78e393ed453b1643f6dade4aa20e994db53e81fac +R = 0277bbfb7479077d5fb6813670fbc7f46055718199550130b122a7cb8b3 +S = 0f8dd350bc0bd2d84cdd374c56ff2341de4102269a1e80df7e35969d4cf + +Msg = c7b1eeb7c19eb16e7f42b61d79e421b71de797a6cab4e0baee522fee7acdb533f7bbf5855316544e1b82b4f2a18ad0a2311e7622549332122171f32fc62a90e408207e0fb90d1b052821dede9c41b15b6e07d84d5d7b9e31e6396a8ed229fb6232b3051298dc5321aa589f4e289d27169f14c8cc93644916d9b72dbc92c43488 +d = 0e95db309f4305b621f51f93588a2678cb19aad0932f365fa0aaa3a3895 +Qx = 1177eefc44b6070e2c41537e75c91e2f08908c0d950bc90cd2f4720b335 +Qy = 0f751312dde55b1bcabf31665deb6c12d043d5ccc89800622a557a7ed37 +k = 00015798ef57a771d62d194389817c93de1b225398fcc0d2b81d94054a0 +R = 0eef7161a167f69a6c89b0f173db2c4a7033b5d801c0d89642ce65e377b +S = 04043f8985bbe0221fd595f9355c33e1930b5e10a1452e81c31259e1e3d + +Msg = a738eb074e1f277dc665118ca055e6328059ab26da188c16f56384c566e43df8cff3d2a10d2d15c3c1406de8f734b20be5dd1ce937a4289f0ddfd7bddabd03586556eb8233b8feefedaa1f49bdec6d45fd562c2a83fa9fcfc2013bdd77900857199e51fa9c7cbeab925ba8f6c3c5fae46bf8e9c574b302f1e5f9c44400152a78 +d = 0d4319cc8e409b8755880827f3200d3f0f1c64d6356fe74eb1f5aa42499 +Qx = 0bf65953f2d08477f7fd0428c31125184e3bad4d5da00c91991949e0562 +Qy = 0f1669d0d116817d625128ae764b3fde956432552d24d98f08a12925afc +k = 05e8704febc38bb8ea76f3c6433c1f0421dc5e5af959723a5a2f0e9a970 +R = 0307c0b838c65d1a47792cb367253bf7c9f627435f1c7ed74494b318446 +S = 00031a9b35e935be6620243f4878a38d4e617fb25f7a4883893366f39cd + +Msg = b28103d77e5457c42e026e713ea6ff03722a36512da17197140117442a976f9e2139c54a759fc26af5811b455e5a0d3a95362d9939c1e738045be9237b469ae2106ceed7e7842b44cc0a475d5af6d781e32ff1dd1f4e1833dbc7f82b27dc7e1562d0e29213fd8911105104a7a16f665b926aa137f70d868c90e72f8ee2c95b64 +d = 09e556c945052e5954915c773b2d47970c521fcc99139269c3ef46093b7 +Qx = 0db68c16ffe64bede4a849812df0b8e202f74500cb7d5349aacf7f3f026 +Qy = 084b5892ea74835e96e9dfb1bb201a4dcaf32da25dc00dca019d806f5c9 +k = 0d0c9e0b6d4526d5f6494d2c72f812fb8d26e17c7a44f6b5e3f9e684cad +R = 0a379ac253f3aaf94cc49e91fe3f2908107a9e1a4d102e02395eb18cf08 +S = 0854c2f6ecbfe95cfd14045faf71ad47561e365c1dd5f515d8817c3198e + +Msg = 463d04c84521ae671bb35c0a7acb3ae509b1b0470f39b8fe7ae5f3c9fbadbeb2bcc3a87e284cbdff07407a351f7ba743aeac50c4a1fef7375b90eb4af8ea2df040776bbf3e4389e7a80bea40530842642b9895ab9ef5ac8ed6c9ce7917d7b3ebcf80b801da845943313988c1970e7748cc306f914c37414f8247d648b580000f +d = 0becc76f8a77615c4f92ae1f91645bf5bb908e75ef22fd544aae63a3c8e +Qx = 18cd93bfe8fc8ceef2b9be14fa947b60fb122f5099cb5bcfad0cdc601e8 +Qy = 16de11e673011e30f6fd92025a60d7938412ac63b19d23e45bbf53c6c4a +k = 04e75a7b92c42ba0581eb1201fa5b3fb2ac82460e953c26ce6bc60e145f +R = 067bad23ecac0883d218b1368d822b3bf9b82453c0e5f3e336777c6a507 +S = 03788a331249463533384a61c47232aee6f057634c37560ee25895b2a03 + +Msg = 8b2379b5553ae7db6023cb010e26ae91322bc3f94dbaa369481936f90a886e5d3827d995ccf03ca59f46805fbac0337d31a8f117cc7044218a934d5bf507090e7e21178a7162c8fcb39111e6967803dbf9d752f3ae737ba024d0f4f7627e08be58efbe997a164106bfe37f67d2f19c0fcc7a6c7eebd96a72582a9c7bdf881896 +d = 020572c2a3dc3ea430cd8cde9d642081c21658e8bda165550cd9a5d37d9 +Qx = 16117486794f14d171dfc3ccffef0396cc9fe5aa45d6d39ce0f252c4168 +Qy = 1b6a12fe2adb279dbbefa4eafa273a2ddbafb2c6401067a5ef5e859fdcc +k = 0edc8d0b64496da309b10630e9e5917c9a807ccd7cc7bab14360873eeab +R = 0e1fdd3b7849806fe587ad93aef737ba0472409b7239981f0d325785fa2 +S = 0829449a0c39071a832664e8148e762efc36fda9e030e0d062458728273 + +Msg = 3090bf7373731cc44c00372c1ac59280b0f36e627ccf763fa68a7be37bb0ac8cbd4f70db54fc652566c78ad268f78f015e4bb1e41516fa56ac303a3bb4a52e1fe897d8338db5a6e37cad685e704b994504bd231c7dec0002dbd907a7ebfa809833e32eb23fffdb44fe4a18e11fa19d67356cfd703cf39a75b1a290b8a7c73afb +d = 0769cfbf2dd8248ea1e0ac9b275c9d6ddcf923fe762079b9ed62ccbaa89 +Qx = 1aadeee0e31ba9505da3e195d883643d260dac9fe5e86102c8ed7f88eef +Qy = 0d925bd5fd700fcdec60cef9c9fdd304faa102d9d721b4f21291f8c96a4 +k = 0f2e203410107c075e25c4adc2f55dcc277883d679ea307df7d52060fa3 +R = 02fc0975c2e70328da4a0ad2b8bd344a8171c2c500c55b1c92270230c27 +S = 08871b6791f7d03796a3aa537fa820f0eac8f2463c9f918468e7588b784 + +Msg = c37389cbe3f46eeebdda343e354ccd543e96b0c2a87e057aa6b9c4895a403de706d658bbc9066c140e50fef4b56af2db1f42efb70b8021254649983f1e11d04d6b10169d5a1c2093b6ab89227b88a30537c776bb7575749c3ed87bcb29effd8e4f17915b4d5dff6cab9678d88f33abead1e73dbdc5c3307ff3d3b2d5fd7bfa83 +d = 040ea4a37b388f0cc464f7e2bf92173107b268ff77a8acf5f517b4ec0e4 +Qx = 08acee84d29638a7285654d20f8e0653c7386140aba0bd2fc157d517643 +Qy = 1482ba5ebb82ba46654aa1eaa6a5f01e030177318921a0c99fa3f6eee9f +k = 0a6fbf938e9cdd009c838196ffeb61f7f545f7e7e9a6cb18d1f595a87b1 +R = 096a80172a7b3b65c0a8acfa8b89cedf9cb19f6eaa5d38436c300b7c0f4 +S = 0b7bb96ddfc9d1324bea96836c557cf88d6ede9a93ada8fbfdfcfe56244 + +Msg = 8884def8c3b9c5f856b9c2352c85ea71aae3c8d0e84ca74e70e404a21467159fc9826548d16dd1ec5a75dc2c23ca37b30312f25e1194e0f9385a0499db34c855412bbf58979ffce7fc3afeb7b8dbf9898df44023200d809f520db99eae315b5cf85674fab008a20340fae8f6974034fd3e55bf08c5522a460680218f9757e368 +d = 037fc7898df9b37b5390537352f5c0b8de22659166c19d7d4df31c3938d +Qx = 198674b40d2a68ed94d5b2c51102393d1332404f75187130669b9de0df9 +Qy = 13ee77d854a60f1aa74041ef1fb58727c09f13039bb4b33a818dfe9af2a +k = 0cf92eebec59605b1d45848f5d06e93ff2767dfa282929208ba801a9fec +R = 0f7bd93dd4df06219fb974a4e85030840c7d4877f131adccbd98cbd25de +S = 0c2c4a864459488eb5498a06b0b56ce7fc98fb29b1eb9b6238da8cc8f52 + +Msg = f1fc154d469433f56c2bd42aa52237a4a4bfc08fb6d2f3f0da70a62f54e94e3f29c629c837e7adf0474fa8f23251b9b349a16848942c0d9cf5db1d0fd99527020dbe21cf0b94a9aa21f376bf74da72d36f87b306b0696771efa7250c6182b426a4500ac14de4a1804b38db8d4f3beefb8c9bb619ac82cb63fb37c2e1d22951f7 +d = 05d5069425e7a9925d2cfc6360a708147b2c1b55ede243591885147ef3b +Qx = 1f35f161ce0963dca70066b3a6de2a74ea1941a27cdfabd9e433d8084c7 +Qy = 1d5d9cca5b741b2321d8511a777fcc2515c99ff8d13ff20266a163c94b9 +k = 01b9c83d36ada7e9367790ee850163ef4420104e0dd3299ef6d65191d7c +R = 0dca4e804bf74aa496c15025acb4232c637c9b81e9e26d6f2065d6be21d +S = 012014f77a4ddb7b266abf2c65a653988ee6f913e700f3f83f3e78c88ab + +Msg = 885cd348f7983a0721f96c0e866821223d3e5a95178b16d18652b4062b1b2278aed6f54ab06f7e37ae6ce1020aa3eb812d215194bcd212302da5b971fd86aee1dcb23057dbedb569bd0bbef80df538da69ae2358cb03bb77c64d3ead475c8c5ae5bfbdd75684b421a26f1a7b0c37548fa32d805acdc91230dd70a48232a12846 +d = 0ffe3e7b82ca62b96e057ee072a4718ca20a6cc9a3e51e4fe8ed7b4b9f9 +Qx = 10f774adc83c1893894855366f1db1962bc697b8e1d047a01a08b12da4a +Qy = 078c6ff634d5dc8ffc4d8b1a53bbf94046023095a8c2b41618c4330a4de +k = 005a4a50de4e97280d6ed1324214d91b271deb649a2dae18d21a0182022 +R = 04bc8ba9ffbca81b5f19f0d8b1306900ee642bc5cd9a9dc9867a4531b04 +S = 0353567acc062b83459017c70cff4f3b8ef0925032b51d7300261408549 + +Msg = ca3b0e2f1c7db4e73c699f06e432bb0f63705ba66954bec4a259bf31c161bb4861476e2f2f7dde9d841d1ea6bd0990cc793cd7a10432e38735c3eeda7a0d786e8821239bdd6c4972c96c2cf68ec5b935391f963a50fe16af2719c9029943b539ff0f1f5645962a6ac46c75d2037fa0c7cd46deadcdfc66e1ddcaada3a376acbf +d = 007a9cb5ce27c763646de414ca2a4dcdb774d69ed2bde7a817baddbc9de +Qx = 086d4ac1e3d54f7c154c5370f5c9a2d22cbe8f794df68974706bdc9172c +Qy = 17770a2ccac923423137731a14e97f6ca65a8cb3642eceb4e70c78ee929 +k = 0538b86e0a899281ab56d28f40bf3b7435f9a57e334a3269233766049a6 +R = 007ceaac3aa0e260c371843104f5cb91a057741b38889ee796e69f920e9 +S = 035eedd44b036b843deadb8e8df9d96b16e719ba350a634553457ae71a1 + +Msg = 4b0a31b746763beee77cecd318b90acf50fac4172cf4bfb354e5a440f651cb89d7a515e09ab19e9850803ab9167c2aee3b395a5da10dc9aff799d73756dfb0a9961d93bc32f15a96bf13962a03d5bd42ddc8b5928def7fc48fb063f42866fc5f96cf88fe0eb125b7c01906ad6a7fdade28ccb0a421ceff50ae03a974671b2c27 +d = 0c03fa9e38dc1c697f70bc6381f2bacaf860bb5632fc837f728da959ac9 +Qx = 195f386c7efe108fd1d580f0a77031e180e45a23911ba983217207a904b +Qy = 1a6837095a64f71ec53ab1c0d9a3a39d69a514065d83f1af26870e41741 +k = 0d4f48085b367787a614b57c06ee8018b2e95e989c2e8cf355e71db1091 +R = 0391710f815babf07b6287b7aab8b9d2ce04bee2a144f4d4a46fd17cf77 +S = 0ef29cbd771b8a6f414ecb73b7937ffe0a108593ffc6899f28d4030a9eb + +Msg = 3011d42792b21c0f1719faf6f744d576f72c5fdfd22b1a520d0e8d47e8c2b06823d853b13c9fa039fa30a6f2e3e27bb2100c6a35f55703806bbf0f79b09d0f629f8042ec63fa04062f15f2edb92b19237980005566f02bb12a40b4ec66e4ba6c599d928b33f72d7437c0e399a8e6a9068d1fef24917fc4f9ab5464ea6684dde9 +d = 087dba00e3fe4802e01718017510094924496bd2785d4ac1a352c530473 +Qx = 1198518db2d1255aef955b9b80471aba60cf6d8fd1feae6d8e048ab1403 +Qy = 1833332a116214e4d9fb37c8e0ab7552b87348434a67a0c41f73972dc9c +k = 0378578acdfa572b1de4e032158b28bcf00ab7dbaf07b0e772c39603216 +R = 0be2cb45d527a7685139290f1098de975b69957fff2c5c29059ce417950 +S = 06abf4afdcd2990121723b94ab8145d01cc4917cd70416620ef100c67bd + +[B-233,SHA-384] + +Msg = 05a5d3a3b79f4e51b722e513620c88092a9bb02408f5f52a32e782fd4923f4fd3094fc5536caf4b645d830260eba91b5173f3833dd65600fb9e246aec968b1f6ebdfddb4059fb2de7e636ed60bb7affdb74aefd158e54485d5f26be373cf944c6570daf8fd7e4b77fad57300667d6decf5c65db99ab8763bb4ecbb09fdf47e3a +d = 05a387e7affc54a8fbb9157b5ebd400c98e2d7bd5c3e095538987d4f8d9 +Qx = 1a97224cafc063967b25cd1a43283daa5411f3eabe9386b8b14c9768c29 +Qy = 02cefaec5141bcb084cbc9aebf28fc59780897ad1424fd439eb43eb911e +k = 0fb7ec3804654b9c3675f7b3c427f6d01f83872e96de2742e59c93151fd +R = 0808d829d78e65eea47122c92f8c2cbf5a8d6717a057ef1659fb6f8cd3c +S = 0ef338e09dac0b12fa6109d15924efb694a0b672afb4ef05f4e6f2f7b88 + +Msg = 247a101c8196eb93a440280650ad463795690bc620e46e8118db6900a71eb493d03fbcf2f73a79bb47aa8e2d8c87ef70e4cfae36fae5c45fe247d8cd0f7d0718dad106526945014b4f3bec324897d8e1fa2f457b8a68e61873b7fa0350fde3b87b7b001c13953c2050a24f71fb77eb455053e49200ebcbba7299485c0f1a40db +d = 0adae709a930d6f5a5c0e3d8ef4aab004d741d23f0ffb8287f7059890c0 +Qx = 1541eaf3dca942957c48d693d2eaf2a456646d2fb3eb8df1779b917a9b0 +Qy = 09737958276dc31852e57063119f1d2d061616b6a2fd35b4a1a3f046954 +k = 0390d5ed395f8ee3478c2765525c235587dbf5bb2316df3a1e8c664185b +R = 0ebcc4f84bf2deb9b3d669158998fc96d7516580675e24348ca58d70d2c +S = 0b99462b85e6ce6b46e5aca221250ac9de7ccf3e63b38919b61700be866 + +Msg = a16678c71976a3ce3362ca379b3272b92e8ca7085b43752473db34e4d6b61eeed3875f49f3328366fc9d0644824e0104817de458e4c1036636b18b83dbaf063f2f99818959224906571c7b28873d9c702360888df151e9ad1a7003e6130033203acf8a69889be6ebd90816f2abf0764f10be68653b1e56766ecc3150bef8b042 +d = 035d391411e6d679751092c4ea5a079c591e77ebdcb57c1d9006ae70d90 +Qx = 01298e6f1612f90dbd2eedadfa8ecce22dff1da2d1cf057c41bd37d4b06 +Qy = 073136a1caf7dae2aaaac571a900135a51ef031643e9d5f01934333b864 +k = 09e343003670f61db85aedc0249db21953d232bc45488c3d6ceaa6072bb +R = 04ac435e88f8e487b9b217e7d68fbba9bdea0b9685769878818f25e661c +S = 074d8f4dd58c922d7e79f30950bd54c10c1cc52ae3b8d00b675c8e501a4 + +Msg = bc2f080a7f0b69a6b142b8f3fb481a43bd71d07418df4f3b802568073c1a8d35729ad197f34a4e941a6dd511c63f201d1f6c34a1b66545bd5f43508c10bda1d6ef60ee5bdd25dde975e50c61f76cd36d50ee3bd8dfa2dff59524db9ef12f1e28d109b552cb42f021963f559c843476b5c889fc567b7840297c5a480e18c221dc +d = 084e79093f1947d6ab9cf399782436e36ef87c59a4c090930c9a74ddb10 +Qx = 08e756774def210e2d6f76d6e4b0b43d86adca0880f017abfc911bafb5a +Qy = 147e6a20c1aad897829339630c5edd327ef9a7e40795630504318cb71d6 +k = 0ce780ea99a344d67de7921feba6ae062817101068266d5d1a140d2b49e +R = 0fb2474b854b8e5d6920ed90e69b5b386a1b26a947b1cf28a13f7c5d3ac +S = 072722017a67ea6754873f833fc51318d41d6ef598d3ec2d3e0eb5bf41d + +Msg = ea71cede8b63ddc5648eb244184bae265cd65d50f77a9e25ff93f02b132487c08732544cb88936d4fff7c0fedb39685822dd1c9be1158f647c605c9bb5f6a1ae34722fa08882c14b36b6c93cab33c9a269c7c10f755b6453ed045ea3e56f29e95a9404ba189a0b48848120392b4dcac43148b706c3d9e4c03db410cbe5dca3da +d = 079b6be015b8006f86fd81c2792bec6b42c08bee2d295cf9dc214c326ab +Qx = 0e24338d5e33ad12d41eb623ad0905f64d5b75835fec4e693eebf9bba10 +Qy = 101b4297b5b62fcca7c61637a2a57365e911d3bc7eb0fc7adb0a9dc7bad +k = 0f06b001e5f874d16632e3c8d49f13d70f48ed4eecaff9d3b741f9d02e6 +R = 0de16d8fd7bb1783a2cc4b9ac1563eff3f87e4e6d75e6a32a4aed1ecb02 +S = 040bdb1197ee8ee51e4ecccb8d42dd985913809c131aa9224049425a052 + +Msg = 319b41d16e18059a1324c37161c937e882192cd949c420ce9c59208a0ac208ebb06f894a7fd78df2a3c5f23f25dee6595d3dacb25a699f115dd482ccd36fc54ba29dda279335424c86b07a1b1fa76a5411bcecaf4d37065b229cdce0bac75b666c6626ec37a716e9841be93c907f87453ad91d36846561f284421a89013b88c3 +d = 0ca9d751a060fde64336cdc88122819f4b3cd1b4e7df42d495197787894 +Qx = 09549785f4f9c71f20133f5a1d409b244df55445beec404cf8cd4d2cadb +Qy = 1b246647d7570f052840d4cc01182d1dc3bf357b25e5966434e1c3c2a30 +k = 09e99fe741cb23f7eb039f5df8414d069b5c2e3c144dcd6cbc6da56ef43 +R = 0cf00f519c18e7a0fcc84c1e338158399f16929ad89842ba97a4afb5bf2 +S = 05854ee1a6aa5a6a74bec0b4696e80aa275210183c86f45dde7002d7ae3 + +Msg = aebeee215e7b3d4c3b82db243a47506ffbf2263f6fe9de5b69286e8649d9218367c36ba95f55e48eebcbc99de3e652b0fecc4099714ee147d71b393de14a13e5044b1251e40c6791f533b310df9e70a746f4c68c604b41752eca9ce5ce67cdc574a742c694ada8f20b34d0eb467dce5566023f8533abfa9688d782646420c77b +d = 01dde4b2d49338a10c8ebf475b3697e8480227b39bc04253a0055839e9e +Qx = 0504bd3a97baf9852d6d46ef3db78ee7555db752120d020cd056b1b4e50 +Qy = 18dd305f6a15e91fa46d2a6d30f2ec8fbe2baec491e26d9a2ac81155c85 +k = 03b78d2772b8ce01a00ffe2e6be2f9e2ca2c89ea3b29bec6d6cf31afe33 +R = 0c0c51fba155f98900eaa2d2935acd615e917f9dd979dc8d92f1d6e00c9 +S = 08c8354f95e24ed13d8ff3755e1122dbb4117c76b21b3bdc7f4dd856f8d + +Msg = 8d353a6b6f35590baef59b638914d3e934d0145b045d221d846517ceddc8ff5e3d28826d3459f8ce1260f705e80923f39abc73d5949aa7aa8ad1734be0e992bff0c9a8f4cc9bdfa430d4cf52e29d3737b0cd3231b72b16e15e1a9040b832e4a920b4a1d94c4964ac6c8abb75bbbdb10825f882ae44c534c7154c446421a04d87 +d = 02c8bea2803fd746c874fa110a716538c179c82712f38d33d0f6d037e7a +Qx = 0a034560353561cde19db89dbcad5c9dcb74e239efc604e86ff38a0577e +Qy = 185e0b02c48be2e90c916a7c8ef2b41a57ea8d4f21d8cd3a0878a03875b +k = 02e39f851c57643bd799c4f3b2fcc5eec8ff7f9e9e279efa647f969cc6a +R = 09b2ad7efc7ed60d9cd3dedbd4159b1e05f05ce5ec2d2cdf7a0e0657482 +S = 03fcbd4ace6a140c8bfebe36ff30848966bb0d3eec323cc8ddda55faf00 + +Msg = 847f134b90f10ba3636ec24f36a94111f26d58428fda5bba4501e58c7bb55809f52320cbe9e0df55af1e40bbac9f3eaa26a55d78b60621d4356d090d98363662f406367601eaa9eb9568b1a1b319730bad7bf6a7ddf1b45eb6922faf8d065c540b671c50df758ebf8c4aca6f01878e5e0012dd038c58833e2b13ebdb9a9f3fc3 +d = 0b9119b3b4b30cbfb98ddf0a4f6953417e515fcf0e5a94e83ebc1d1d14d +Qx = 1be65d340f7e99067bbbf961c2b357e1fd47a74393cae5f93a40c5dc280 +Qy = 0c04cd8ca3ee253b99e44ee6bc0e52d2f016b16f59c738b9f2bd8c1b9d8 +k = 02c851ba0123ff0543808931ab3857b5c15d7c10c343f232913f6e0c92e +R = 0ba2b33550878e223cacb80e45e382dae84e76bca5a2ef8371b84d08572 +S = 08c370f82506e97cc15837f59e9779448decbd87bde0a463bc14b18edca + +Msg = 99d23950493bdd931915e9f9b65e4cd1329866c0071a19d4f7d6fd190689275b7b10fc07503dd1c27a4da274dbeb3aa5cb0e71e9b7b03fc2697729b7be913756e6760098951d7015df181cf14b1e0b954e6260276af553e3e59907794b863e941950718ef154669c5c262946ba120892e0239e05910c2194f712db46e37e53b7 +d = 0f4ab2a573f3771d1e4222e251faf14e06cefed544e804c299c9a8395f5 +Qx = 0b1f973d6495d277e24320622b9b99fccef8eb5c1c6952f35b82d4479ef +Qy = 161dceea4d3c9caa4f640f51b37fcbd5b8932642a94c8e7aaed5db17fdd +k = 034ff28a5ed6958514c603b3af5a991e2e9b4cc2c0a7aa73ab2d70bd05d +R = 01abe4a7b27395a37089f91eab27ccf29001ced1bb3348a6f919d466477 +S = 057449e55d3f2a4004d647ad6e8fbbd516adbb4de40b1a872ad8ecf67e2 + +Msg = 7bef2487bc2bbbcbcc1570bbd4ed437c0dbcbbf63f666a3355aec49ea6ef593da25aefe9ae0d94db50692475425dee3c88cdea975794ac69142c25732f3541457d68d9101c8be069f2b515aadadea2019dc7abefa6c12cb3f76d9f4b5e46546f77eaf636aa8f2329130922111151a4df913d18b7cf9d0308f01ad84d878adde7 +d = 0f4649cf30d4a5269296a45977de2652cb06d3ca2aff4475bb24517b927 +Qx = 100ddcc8e09ba2122a6535c6a0a2dae83abf9e17687b5f6aae7ec6a2df1 +Qy = 048f5587360ee251925b7ed02de82307ba219a707705623727f98346a26 +k = 0a38b2bd0e9a5044db19d4312ec88d19ce1a9bf0eede8c357f898b0bc67 +R = 0d0ebabc8761ea215808a2c3035b14b614f64be0c2741b3d7789a8659ff +S = 0f9e742bdca44c11bcab196f910c0d887e90f250817ee7027f6df8207a0 + +Msg = 87c717eef6dd3c7434b2c91de05723783bef603d170f654b49a04b067b077c405d2d757ce780101b930196ca4261efcfbd3fc1ebb762cc0eecf101072988aca508c41581936526d3f337053000dcf77b16172492c5d654c6612bbd2523a6ad5966d7091697a29ce882fe331f79a7eb59e5a3fe536263083cc59b8133bfd33c1d +d = 0cca24ad914c24c011f41f80d27ea41caf41fcc8dc9dc6dff5248b2b474 +Qx = 0175b73db13324a678b8afe086944a7ad257cd33fe9538c59b9177d1064 +Qy = 16a98ac9e0ff59de1ad94b50f8c709ccf4342f983c7530be64c3f1548fc +k = 029c83def3a5c386b0bc3cf2663b8f4b02f26c6e3e14fcb17e9460087f3 +R = 061df783609ceb355aba3b1753d38f42434bd75c8354029966e7a788be0 +S = 01e8a093f53a1d73d5a994b97f2b2f210125ecd3dcdf77c68ea3199856c + +Msg = 9bf48c2aebf473b3a4a928b3b6a4d2fb7e9193c9e60bc2067f9f03083a8cc7b892bdbf05601118bcc34dd283e7be996bf19b0bd36727eb9d65276b6517bf0c77ae0a9091e7a9e46182a2586eb22324939801034e5ba94ba30d1bde7d8fed51eb71036fab6224f8ff30a008422efcff7ea239ff23b9f462777e62b41b396c5dc5 +d = 0f5e12d536ef327e3b0ba65ac5fc3f7f4880f5968f3340eb8868c1d47da +Qx = 0b2910f5de9475486b3975ce91c02187e8803e68586f3a1df14df67648e +Qy = 0f28af5363ed851c42daaa810afa1fd0d2e001da7764671fd44fb6737c5 +k = 02a018753965bdfda98512c7f9da3e9235a4a77aab9804437b652182347 +R = 0b6fd02b2d84b7baf1a5eb592cde667ed6d4c2c821ca336027a72d9abdf +S = 02253faa5935885945121a374010b2257123cd5db4c54a2aa0e08c8197b + +Msg = 716d25519ae8f3717da269902be4a7566d6f62b68cd0faae94bce98c8a4ac6f66215ebac5407d6f64adf9d53f79f02e50921b6f0e8c805926a839443d30d9294eaa802faa7c5471d81fd1db148cdc621a8dd0c096e06fb0b71943337d5325e1bca77062684873fe904ed9012474ceae5b138e079f941a665a995026d13d7eed9 +d = 08c30d93536b8cb132277645021775d86c2ba8f199816c7539d560ac6de +Qx = 0d69332763cf533d48e56065e1b5255790f8c0eb23471fac9b945e62195 +Qy = 0292df8c77d9a6803f60bf0722ed57ae2aa3bc816403b000fe2940e02dd +k = 050967928d6089da5b16c88b7927de210325c8d8f5e727fa1ba3bd95b5e +R = 02434697cb5c2ad95721943154bc81e2ae16332fa6629788f505bbc1522 +S = 09a5a6792b1b9c2e200ace5a3d50c04f69084dd9222c021ef5fce14d4b6 + +Msg = 01e76755007b2ee5ac9e1d4c8adabad6d0f9c1c08ac6e2622b7c1ead89bd3ad0921b9525b49a780a262fe8fc0904a80391717ad7cac9607de55f7c744af8a132ec45ce79723f4a4a8c8b9ef658b360bd3890df164c9f1cd74eafb74feea251a34514ff2a57ae7a6d4bec2067cbf6ee4fdaabf13721bf9ae178b9034ac5e9665b +d = 0fa3f15a506ccf7b50bbbad0a54d3223f5a95eb54f0d1f4e5d0cc21469b +Qx = 0e797527d57fb3a18c71d1e82e7935e37e719439952d4b972f0c1e0c835 +Qy = 0a345bef4c5015e97a148b8991bed4b7ef48947b12f316b5621e94d49d5 +k = 075afdc12d4d50a7495f5a7d309696dca23e9356a0cab11c3b3d7b8c54d +R = 0960ef460000fe8c761038bab7e29d665100494d0874b6556862c2808aa +S = 08d3c004426dde6c18b1c9ae00a44ac947e36755d8c40eecf47bfa963fe + +[B-233,SHA-512] + +Msg = e95abeeb2c51a8cb75ab74253dbe130b5560cd52e2a63d501d26e1458aa568aca6694be91eee5fdfcf582c47c1c727084ee2b2c810281cf9b095808bf7e7c668eff00a6e48b06df3fe6a445e092c24d5687d7d89acc8063275caac186c441bc697b2f67aa71b03294e1adeb7e557c296dd91304ba0587cda3c984619f1eb4f2b +d = 06400a4830889115aa88b860b3fb65905b01fd126c4aec2785518c2543a +Qx = 1a2051662c1681bbbf6bccbd33c44c7c7fc80b81a1bce14caa36a73f7a8 +Qy = 11583d3ba8f22080488471d8103f868100a97af94809b58bff1435b16a9 +k = 0ceac6e5d10c55888b9ecab8d3f6ada7f4d0bde2f109699157d194efa42 +R = 0c148f2337008ccc3e61501dc5df3ec95d3596d97eae96a7ab085a915d8 +S = 036d1debebaaef50243005e25c791b9674cd6fa986dc3d32e089fbfb2ec + +Msg = bb8d8515365d240b2071daef0d80558fd3d0e059be9f6abb7b7a0a5f47e2ddca7d1b3b5101d5c583143258520ce8db0a87f877a395615c9bf879ef46f2f20f68bbc9706f82781fad69019396b27f292cdc70fff1772e90205a2225f80889f9daece1d03914d8776ac5bad24d8fb190ba10a2ca17768b918c2e079d83734eb372 +d = 0c7b73c324250f14fac0edc941f79bdbc6933ee8f64bf94b847bee5eef6 +Qx = 1af7266ee56bf0518f2875d4f4d9ec508a01769d9c1fd0a885a48bbd80c +Qy = 084167ada99502475478465315bf8163870a9ec1b43f15d68f0304ab03c +k = 03badc9b8098c3b4d7e943a2365093028b579519031a8643b50c0f81eec +R = 07ad4fc96c21963395f56eb63e1b0b4d2c93d827626e7bd4448697ded97 +S = 0e7504e6a9f662472e3e6f18a40f7645922fad2ef7313d600a5a6ee314d + +Msg = cd8b2403435fac9caeffa21b55eaba52d7efee0f89df7142340cdffeb89556303ca01a800429397e2ff6c746743b6bc60a87133274282d4cac02e4ca90ad95d80c93b84163b96296f67d40b2a1124b2b6534ab6b60fdee312fbcdf468d0e84eb85fce4ff360136bb31ced3998d29cfaa3ae685e638ee272058f123c4f35f8b6b +d = 03db7f28e161abf52ab0adc8c4c8544fc989af081303b8688f22b7b2eb7 +Qx = 0ab94312e53832265b929f3d529bec33dbcc5c17b969e0afbe2d559ec39 +Qy = 1d53b2c1be229e2c224e6e9fcb8bb0f044f3f9f5677c60bc9454f36eb06 +k = 034a8f980896284fe6d28b0b49703f1384d799e3f11a04b1e62da12965c +R = 0e374fb355f30d7e427bc5db99ed76a914d6e286099c72f28c07302c741 +S = 08d5ffd41f8a1fd3de6c433635fddcfc2b21809d91496ac17571afbb856 + +Msg = 4bb08eeb202564efb5bda40777d71f1bcc4c7c10b611e803e5c570876f3e319e9e2bc2d32031c56a32fc0d1fcf620d4e4377d881e9e1695bcdb78acba370b849115b86c1c4b83edfa03299da8e7fd14c7cadb81a8e4911c8e427e32c8c9b67e317575331967cf58085cff0c0d48ee0b8e7dc0b49687bb1c70c703a5dad08ec81 +d = 07e9d2fdd017d6da6029e88f78927d9ac9437f542db1f1fa99e32bfcf1a +Qx = 18429bf08752aa470a8f0801170a7ab96adfb168ee8212d76ab0b994e46 +Qy = 072a5071ce308d7daefb3e8f4da4681842ffe0f35dd8b071f0775c83f82 +k = 0a0f330e011d34714875500b70c881ff6b1c9e96da930eef75ec78ac120 +R = 0439bcdb86d40e8f64db5dbead95d85d6a771d811480c5765ffcbf75422 +S = 06c01f64e2812d18b0946ea4e6599e8cfca0a2b606c3c35c803ef2cfed3 + +Msg = 0bce683d835fe64e6484328aa13e18b0956f6887b5e4442fce36ff09aed015889794e79da8aa60b4be565c78685674c51e1e7ac60db6a763c777198a56e382a03aff8b40862f961ae23e8b8683b76a5577769422418972ab0049119382edde9e752b42e8b93f403c1ef8665d7ce8530ce4ed9ebf6d397827cba6b7645e177231 +d = 0c94052760fc74c2b405ee4dd5dd2a7d38ebc16df9cc32df706075450b5 +Qx = 1d2a5ee02d97f82ea9c8833b825cc57b0cb51d3f2a2cfa7577eba676eca +Qy = 149c68d98d0e9cb242962326a26164f3e3cb6d81b51f281474b0f8d333b +k = 0fdd3ade90da682676d40008cebeadb9b2378d8a821e9e9428018cdc768 +R = 0f6d244daea95002daff2ff6513da694eee58f8b6c2d47ad121be87559a +S = 0b04788fbb5655a053d0fb7a38c39e1fef68ff17860442ec8b8ad049842 + +Msg = a6defc770426daad4dafba3bbd2a69881334f7c31269b297e440926db54cdad3fd7ad200f5ada2b72ad221ad99a06ecac9c2563a8deed89f0d0896991d1a652f6fa282affefbdb1c1985652300d1792725071631d75a182b683a48448063c7d2563ec3d430e0fd3acea33a35cd38ec0b5b07af96af71d0bfcd879d9864ededf3 +d = 04076b93487c2da8aeaeb4725fb53b7b41b465315335c18c6ca041175b4 +Qx = 158755fd290910498f6c8eed83bcebcd1fcafef4878c860da118efa250c +Qy = 1781fdae501c2c147eca2c6c809d9428fff2f853b57c7d6add70fcfaa0e +k = 07debe933553ba3420aa06e1bc52a1653f8a19b59c0bc9c47212389442e +R = 09e09c6d96e33c845535468ec7f5b79cf30123538011d0b5ffd935d168f +S = 0963bbae921317666f5852759e9ebf05cd026a5d9f026942835ff0daeb2 + +Msg = 7803cdf4758c199962b62943f475c6c31356f5d9b997a12e21146a2399cd0dd3b97a860b2ce639e2801571599136d4a8cdbfb12fd1a5ce22374991e090533ff42823a2c58d2076b772814eea7fd7a1fde68263ef912681c72c7aa3e5a7cc44ee8c65e72228b7631e600121ea35bfbbc783b6ae3c0c8f80198ada218be533760b +d = 076ddd73ee4fc1f5e6766e229cc7236cdfce312417ea291f7c3328d5ab1 +Qx = 15185e029c0d4eb5102e0fe900ef3c921acc744feb44570a288015d0908 +Qy = 0ed56bf93394a434cd84b521040d40452bb39755da5e273a05e8c0ba792 +k = 084e9e4a9c84a602c18bbb6b183d06969c8b8538e2ff901f1c2794d5eb5 +R = 0fde8e9b1959477ddb3423661df1e7182e4b583849d6d17fafd7dc5406c +S = 01a12bd30e9c8b74912c670c0845ff5ecc77f29797160bd4992efa61f4c + +Msg = e789461e1dad0b6e21abeb6ae2e96385549d1bae39415188c8f833233da6a3328144c97ddb36e0ff4d9e19d84f869e79e609c51b32de59892fb0446dd28cc164a3e53534c950d26f87fb74e682db2038cde778bde06c3ee2eca2a077d8fcc2b0332e352e0e7e6487444a8ad60e78ff213b16fda9faf374dc6d27b7a3c4c6d196 +d = 07e1f8988ad804aae7d09a99be19384cc599e7652c02c391542be74b17b +Qx = 1fa4751e507740a7345e06a8964022fc6caa901cf0c2077a2c0fb86be8a +Qy = 0683c593a0bcd123d958deb6b430d49d5a2386d44706f4149dc526ad896 +k = 01d288de55b90dbe72cd8f1f86a3ffbc2902f4b5f0cf4e641d32aec6f20 +R = 0048d16d87dbf4fb8e994dd874c10d5d16846b9ce2cbd43d09df62ca970 +S = 0e2ee47f422095d629c188df97e2839fc6239b9e2dc26baf8161b037236 + +Msg = 9b58c145d1b6c887f2b25fb672cd49c3a1117224be697c15182d4048be92968a6500f8bcf747fcf33145c13a8d72e891a6e0c4c7310c2b62f3181bf586fe32f1ecf4feee8c2c8bf6c2bfdf9d5f88981ce080095c93e49a772d8e7b59f9cffccec3ca2f212ef4c6748f64e224f4f098334d83108bf6f8c7b43c5eb549f1526897 +d = 09b2292b0244c2aabe8b43d95039984d504ebe05eaff318760e4dee739f +Qx = 12618d89f50b7f83ac470705dbe9ed81beb03929732a3f2aa7a636eaf59 +Qy = 15f0f70c808e053b112a8c32ee422aac2b926c5b6a279a787fddf819990 +k = 0fb38174a83ceb9236fec8ea39be2b3c77c3dd2cf42d140e27838202d08 +R = 084941856a387a56022727f81a939d77d12b01dab603ea0cdef6d9cd6c0 +S = 0bb9fc30595f94d664a590ed4f163e4526809819baf96bbee629ff86bd9 + +Msg = 52310a901fe9681a23dd6e02f12974d57f2c4f653322d9a0ff8b338cc6c2bd9f4765c90c6b3c9fb17df3f492e67d204e39d81a8fdeb92c852a1dcc6151ed6c63049037235c6751c9a902748163a567b714725b4d3995e0edbde03215c645b1a1da3147f7406245432800c50f823a1f991c863427ff4c68e4e16d1b106ee40dd9 +d = 07ca463b50fdd92d9163f1c2bdfce2ee45ba1437b79162e3e959b814cab +Qx = 08eeeb146216c73ccff0096e1100008f8b1f3f0c5754c0abc4ed39f7f63 +Qy = 18c9228b11888edd66b2e661284f583a0e8d3c3e922932cd9fc1568f959 +k = 0025291ec0dc2b0c709c5e69695980564552545c2497636b814aa049ccd +R = 098dc98457ce6e69f77123d5d2460ff569786dd60fe07e847ed5bc14da9 +S = 0cd320afad2a4247fea5b74d78dc3df8967ab3159b4c8b191814d368dc2 + +Msg = ff419c011601cfaf833067cf28dbe6e935ebeddf8b5111a97f6eebf3bb28376334f329cd877a134b074790a073db766efe018fce666a34650cbac285ae856fb6b3b8b96877282bc11cd9f9c8e510ed1f69bc2725a44a1d2b35de1edfd8bc9d20c7525ab0bbc27662a7cfc1bbd1e0f4fce5b88411521e3893e027cc8c73acdabd +d = 0c3844750f63fe0c2e930bc38fe88522f4e72a2fd0db9778ade20e939b3 +Qx = 075acb00b5999f8b272a15a2cbdf8cb630dc3eeb1e78e58f58e467396f2 +Qy = 16711aca424ca335878d273eca75d804d3f009a1f3628568530ef265eaa +k = 0a63e7a20d100f14b8b709f0a6c383166c2151a36dc471f061b0f20dac6 +R = 04063be9d8e4f0f9afe0c79374c69b36910b5d2b1010e0f4db2e4cd23da +S = 06a6eb90659aa79e4a2360ea9ffb99a415175dac6c3efef104bef6fd57e + +Msg = 05a89c4824c5de66587875011e704bc6e06e991ba8f3aed331cfffe55aa266a08c729f77b8d082dca4d286b2d451ea838d726cc2cf298fddf2d7376714c5e37b64506f353917caec525a1209391449c078c5197a371feade74f8fc8a1a1d67576edfda13c14ad324342fc0b09277941dc072ec0d39434ff1cb91fc59478fcde7 +d = 0a3bea235dea86506be4476eb7999dcb8e584a34238c4a894ad6823b93f +Qx = 14093a072c21c44d1c4beddc5c8dd9a2845db0935bbb4e1c4edb0aee032 +Qy = 13286ed584deb744c9c35d7ae7eb9cad1c7ba2b670642de0399b230716d +k = 078eda19f0cced2f84c1a7b354e5a79bec035b8bb279473f32d60f5d17f +R = 0964e817f0cdc251eede4157a9bd830c476627c3f27d2931b4f593b0178 +S = 08dbf34e597ae06ad92b13900a4944e54a5bf0f16f586baad157da6dc96 + +Msg = 13e6b5241365d9d0ef9e8b05cabb3248afd221ec02eab92284b98bda3d9272184bfe5251d35705defba5085381430e99b33a3ab77d7870e5102757d065862372df2434a25556b76e54ebc39d4e6c3aba5cd6acf0c335756f7d9385c1068d4cfa37526a9a58c0ccc7f87a8189176c5d4f201499236058ec061357dcdb5acdba40 +d = 09a367cd1cffd8dfcca179e167ea437ee48e9b6f42559dda9224701d3f6 +Qx = 1052d751901f6f8e61858d3b15eb59dedd21e4e997531ef65622d575029 +Qy = 112737be67ec621509d73cd613d7b448035397fa66eb881f90a6d531ea4 +k = 0d8dd8f1cab623ba6a4e840962fb31de97a4d14aa6dd34dd21154105030 +R = 0a8276d0f069f34c60b26a55d47df69e4c9ae2981afc59e14b5bfcaa498 +S = 09351c4b3a06b839eb2e9f450d9c3d15efa45509886ea3f2610ee1dd156 + +Msg = 139a1a5090b97afb8fecfff8745efacf7dcf91a4393a7b629564e598d58d5be39c05c5830d4c8ca85d29e9e2c31ad0447864e867d0ef4788ac734f8d871daebceda98d449308c2afbe97724c3af8a468f1925065f39e52ba4b7d15728a744b1252a20476dcfff7bcb82aa72c209e72abb3c24419bc26191390ffed340c1b9c6f +d = 046f4ad2522e78b9b35297d28f361fb0ce82306322aedc119251d8241be +Qx = 0b976c53a966e0834d5f6bc3af10a5f12cb6d16cb2303a3c6cee7d35f22 +Qy = 1a1097cb56662265f4f2f52df375d70af086264752477c34c6af522f1ec +k = 06a0d21e5aadcb0c9e3f9fedd2d896b0236dc90e33778fb114e970122bc +R = 068063fe0a31b7e7925cf8959c3486985d98f58224d5f67cd0218af192b +S = 0f11a22ced98173040062ff9e69d1b2a1b5a939eda0a6944e96fc62fa4a + +Msg = 3315e5cda5f252e3291b61e493ab919c20a8af1286d9660cfa2f5ca38b6defe19ebecf820787fe692d04eae8a5f5d37abfb593309569cedf45efd0cecef6951b718924c8380ba52e8ab8c9bfb2261ed5f01cc5a5f9fc5fcdd269a0f122c597afdd9a836cf8f96838c3e8962c1788c3ce4128719b3ef4fc88569643dcad6da16f +d = 0ac82137e9c7a5ecfb8b1a7df9ab50732934566a392a6c8915ee8ca8144 +Qx = 00f7f835f8223fa6c49eaf6650e33dc9d09e1d2bb098925d908606570b2 +Qy = 06e659ce8623767e8214b076d7588746bfdcbbed59b75bb19477366cc78 +k = 080655784e3e31c6a498a63d4d84f7e5a353a66641ca17d4e223441bb1d +R = 07faf31d1d31ef4edac1c63072350536df84c417e0ef808c6be39617e74 +S = 089023aeb53ddd3e475d11c53479863739e62dd64348646581012784689 + + +[B-283,SHA-224] + +Msg = 067f27bbcecbad85277fa3629da11a24b2f19ba1e65a69d827fad430346c9d102e1b4452d04147c8133acc1e268490cd342a54065a1bd6470aabbad42fbddc54a9a76c68aceba397cb350327c5e6f5a6df0b5b5560f04700d536b384dd4b412e74fd1b8f782611e9426bf8ca77b2448d9a9f415bcfee30dda1ccb49737994f2d +d = 299ff06e019b5f78a1aec39706b22213abb601bd62b9979bf9bc89fb702e724e3ada994 +Qx = 405030ce5c073702cffd2d273a3799a91ef916fcd35dfadcdcd7111c2315eba8ca4c5e3 +Qy = 75988c6602a132fa0541c5fda62617c65cfa17062a1c72b17c975199ca05ab72e5fe9c6 +k = 2af633ac1aee8993fc951712866d629b43ed4d568afa70287f971e8320fe17b69b34b5d +R = 165ce308157f6ed7b5de4e2ffcaf5f7eff6cc2264f9234c61950ad7ac9e9d53b32f5b40 +S = 06e30c3406781f63d0fc5596331d476da0c038904a0aa181208052dc2ffbdb298568565 + +Msg = 44adcb7e2462247b44c59608cbe228ada574ecb9f6f38baf30e42b589fb9b157bb0560e5a2aa5523b71cc0d7f583b502bec45d9b8352f29ee1842f42a17a5b16136feaa2efa4a0ae306402940ecd6b71e57d1467c98e7960de2a97f88b43487e4f4016af1292381d70c18c7e6eed99a14cdeb5b3caf73688658e4c5b54c81e08 +d = 09c2804f8cab768248fb3fff8a055b3f4585c00de5c1615a19f9425b9432ea09afba8f2 +Qx = 2570ff62b03a5124f08f752aa71ddc57944cd94197fd286d5a2a107b116d7b8ff1b0421 +Qy = 37714d9abe9aa0a9668fce89a3fcd5cf2e4548102a181a777c9b3f1008ac6e8d3a31a2f +k = 0dab5ef658ae3e2ce2bc5c88a8b8022a0ca5eb8524815ffae414327e3afaea5fcb8a7cf +R = 2d99f82d92c9554722bb793988af0fd0bea776c5608f5939db7c8634eeb24ffd381dbef +S = 27ceb1d01ec9a3ec0e74d79e08024359e117488020de6458fbbcad28b173918fc7d129c + +Msg = cffee6252c7eb6d91d8fe100a1e62f0ad9f862d78ca2b747a6c17b8c9ea8980dc239b3b673310e6e7483582399163e39d889abc1a613fe77849ebc09b4f7f4fe0688b8a9869ae918a88294c7ee199be50ee9460db14725ae70b449d0cb48f30e7d817ec02c0cd586119341dba0b74f0279330807cfccc99c8c340b72c1764a45 +d = 2e625a6bc6d0ce7c06231de827068bdb0abc8ffb57c82b35ee3a0f873b9473905974d34 +Qx = 0458bf39974812a4e0964c31f40083300454104c0d65f22c5688bfff3c256b7ea958900 +Qy = 738dd33e32b9af93ade2dddf4147187a9270543afdfd66a0f2a53d6d3d815ef59795f60 +k = 0a9388815c528fdadcc5d3b125c7a38db57fa8c163ba795ee00e8e307bf760619e705c9 +R = 2481571400ecf9dd31dbd9c905fa1006cd5bc7afae759da3312ead8d5a7dd0c25a37ab9 +S = 13952fa427d348b6347b9e93d4cb2c4cae3429dbea6aafd1e58d5a34805098722b3b8da + +Msg = d058ab5dc07228253707ef224897ea0fcd09c3d5cc91fdce9e03c1c59c53fb4596be2ed929c7455e67ac7f4891aed3eb06ad88f2c4aaaabff045b959f900d1019d706b60526375851bb891494e99995928e4cd51c9616aa651ec77bd7e398916bb9ed3156391bf7fb1e29181e2b011dae2edaf803607def2ac6b194929a57f45 +d = 376ac24e1b86f8a55c052d92a0bdc6472fa03acdcdbccbf7c321ec0ccd97aa0a66b4181 +Qx = 7247c755b23bddf944e29348da82495b4f61d02a482c6111d8698cc77e8dda4c341f20b +Qy = 0f8c199138e1f4f8344facd90ac62d55f3c9a15ba7a672ce40241aa26419af790cf7dd6 +k = 25d07c7afc5a335c2bd7863c1965a48c12f2687b2a365a7c2700b008ee8a0e8e35a68a1 +R = 23fc2837a879b79e470305088acf596eb0159edc2008478cc4c3841a1bd66fab34bbb5e +S = 0a909b83bf77e74511063366ea1d1308a8a544864783459a60fb2669785ab1af8f4cb06 + +Msg = c86f2cc7ab5df5cf1a236fd83792769474cef464032800ffe98a44cf29dbfb6f24088160eb31a11a382ff2a49f3e05e983462f5304272f96c0a002b69af3d233aebe867ee63fa46666760a6889d022c18645b491f8d71b6a3b6b4ef058e280cf625198715b64b025bf0449445d3dd7e1f27153926e617bd2c96638345431d1ed +d = 2b50a6395fc02b9ac1841323de4520292f913519bc0d6a471aa28021322fc4dbcd7b802 +Qx = 696d5ac4bc40e679524e246210b7bb0f93ccfe7dc506ba87be3fd018f829c93e62ad1d8 +Qy = 65953e01d9db8fc5d64516d864a33aa14af023e601d69875ac0f7af92a1e78aff0e475d +k = 0aa25b43329de4e7739fd9134e4f4b3d68a64e55af47a2f6ccf71f518f19059b68d34cc +R = 1338a5dda5fa09667604a6a7666b0e54e6b688b98b31c25d037ddf55ee6bee7565dad09 +S = 00aec025232c16e778f90785ded5348f3d5345b8344b2a762480383777328e0a0b11cb3 + +Msg = c1328d8d2e5b6ffc850a9600bd6482518ddd9cee3fc9140febb72bcd444b0cd7e8074587d51b62cce4b3d4f34ad3355353fabe363369cf790db2df9fdac3a0ec4757e2dfb3b683eaa3e26531691ce765742e1c0bdc0e1028d347b6085fc459df0989c6a144271454eaffe413cae2ad7c8b2371fd2df1afffe56df727009765a2 +d = 24e5889722f6c35e18ca47effa9e415b1ba790066a91fb3c9f7b001ce28fc732b09bc23 +Qx = 7d4a57e6aaec6b51dce5408f6a7fbe9ba9d55f5abe2da55fcf015ca25dd74eb61c1556c +Qy = 2123390178b2992059151afb51ac652b364f562c65451eccc65d968e9e7210921c93c9c +k = 320d2a7f48cf3583e8d7e712b330d40ddbe4b6c128be5a43d72bf57d4227603762de7f0 +R = 09806a8e70742c6c4a9ee6f77fe7a36489e1fe8c442ddf9cdcfa61f019ab9b41241d949 +S = 061fda247ba7c198aa532906bc01d509088d6c2ba0f14ca3ecc5ba36f3595db1df3e64c + +Msg = 7176b7013ea27e94281977eacb976bb31c753bf80fa09680a29128a6fc15234f79f0e9900aff3217ce9be72c378042c6c34fced0158740073d1a985fa25987fb218002e425868fda5a47de51abfd04de34e2b8634cebfbdc98e80f93d94096193eaa82dc8778fc23f3765c7acdad94fdaa272df0ff0f28190c10a462ee78ac92 +d = 056d15b81f40b6378588a5efe43e21b95e18120d514bfdda0e7759a1d0766a8a35ce5ac +Qx = 306cb78fa576bdd2f43cf7b71d7e66a98b850d87ac087dd2e1ff62596a2e8d4cfff1344 +Qy = 3b1e3b12db842e00c2faef04d3e39cdb71546e4e3ecf21eacb6131c3501fa30edcc0b70 +k = 1e8969d6cad41a40d8306d2a8db3290d547106eb59f661e0d0eeb163044a92aee4483fc +R = 06786637c3bd5a95eba5ce015f151d99845255175ebb9e593d912c75cc45723612c4ed5 +S = 384471c17c45ddcf62b588993835bb913be88f7a8e46e52e211972ffb3b7768410bcb7a + +Msg = 4c3642ba040a9955b9d50dcd1c936688c17c363854358afa8ca49c6abd906dfdc4d89bb4cab0bbc363fb5b74e1f004d4b09ec9dfeed4c0bfb482a9061a1f487a3d79195ff7b65a0504bced3a28db0ebe8fcf8ab1ee4a3ae91324d15d890ac4c479144dd5538d2e36d3a587769ee9cd2d5c6f85a03362a022fe0efc4a3902b71a +d = 12fb2fb5bf5f7e42a500154823a174ba2d05af71e3b0cf47fab46e673ea1822f1563def +Qx = 2414d172d74a6281169835d18bfaae91f1f1cdfa9ed451884466e63160ecdd4a2c7906f +Qy = 2d892bb19b47a4fd9d851d3b101ba99acf6d11345596635cedd5d7557427a2896a913c9 +k = 20786f42d77195bea5761f86dbed8b452f858b447d2f3775ba2a4865d738122363b50e3 +R = 334507412368f08bd0992a5d56581ea7139e8adc88abe4bd80dfeefdc7a37a481b18609 +S = 0fd8404df06a02618cdbf6c28610d5dfac9907635d9e5f2887f11a7f18cb8b7ac95b5d5 + +Msg = e471f39c18b081362adc7da47dec254dab8d765f005ac574640d78c14222639245563912d942f3be212ee3cef134407334c8fe3602fa0e1629de5331643d76715dc1b0ffcebd484d86c5211be4b285a31688b205fa988e6c15b36daf396ccdcc209c7dde2a732f5c31c84c7ea041408ebf15e56632583af0131bd7f531b5fc45 +d = 30096c54fd480647e017f8cdbbdef292e799f054e3279d228b09816a757566a744a8266 +Qx = 2d4b28fec18cd888017fd5a27a375131bec3aa7195c0a4f255eeb3616437079e356a6cc +Qy = 27c607dcf0b068418eaa7de8da6f9707650e8d95aec571f7ec794415fc175061b451519 +k = 36880905a376faa594978713c2de1a90c8e27baee65bc60b1fa6508fab5abf843f66ecf +R = 295193f1c64181bdf749987bbc8ff2a188126131f8f932bb8ca952ffa201f109762e18a +S = 381c496b4035bba880225dcfe74fcf101103e38f9518d9427c74a5ec86ebf8f7183694e + +Msg = 8a93fe53e83075c4025228540af7e96a588520da34e3eadeb99a4ab2f3dbbb8f85fe63a3b86c1f4ec912e665ca05b43e869985eae3791b91205afb1380e16c25b74e6793fa63e4a55dcf25dc22d03f09deddeb9042b620434111afe08c5657c7d754af66ad91a1b5423301b1e8e6389a1404060d1b6a99fe0f89598482979e42 +d = 0a1b7e9c8c2dc25b494b5ef3195b294e41cd3c2c35235ab42542bd3e2a52d5826662bf9 +Qx = 6232063dbb66a56e2a92dbdfd9b3c136eade9c214d831691d9b49c56a3962d20f14b8a9 +Qy = 1b47b85bc223fde1918abf6308b74dff7f3e686af9c9d7a1855a1b77984d258c1f9aeda +k = 29b4221eebe151fe758218138535d81182c991c3b7fed93f9a6117e98c1c2f97e546937 +R = 1f8040fad671e2f32a1094413ee955ea5426bc906b8e034d87d7408e63db173b05afbfa +S = 22a353c431a9e9315ff69facfa4e15f6e6ee1be2750472823db31b49b17fc759e6b94db + +Msg = e193a8ef6f454ca1aed38bb67aca6d08280d421b196d89938c0582b7cde74dafd71716f3818940af412d4a7ff3960a8517aee108ae03576b68ee7557d35e6f1ab823d124de7243dd02b542591f62c80d822608572889573e4c9dc62f99d68e07800da6f83cb6f5e03d1f2ac15f90e38b4f25e0a75e354e4b60cc81c0bbe81d39 +d = 059b1a8fb84530bba7a607ee88310e31bc6ea6a6881603567a1081a05a3a9ff87e719ef +Qx = 0b9a71aa3cb4cff37586b1e522b0e332ad5962eec3dfeffcef3851976baadf611ae5226 +Qy = 6b1bf0b43b406b5edc6782fd391d9fb070fa3570d3cd5b2b66d7a95dbc45ccb1626172c +k = 00a77307da9845ec4572a24c9e74a17b76b6393da87a9d7b1b8456235473ff39d243ec7 +R = 36721835be490b5ffc4a42bee3c6d231417f7038c367efd9ecaf7fb3618ae8492906de0 +S = 237833bcc3e4a721e2079e579d1aaf2519c01cc238056fe0c0990dac7fe50e75eaf6f96 + +Msg = 8a99b9db191f6cabc88b430bc2293e6774d5180f019d871839289e25aec29379f14606e742190b7aa062e3b29fe0254146d9614856c5140c7315015abb98ac00da2c7e33cbcc82c24b797366f12767322c4381454d9d1eeaedb616b0ea5c66d1422da459f18081f4f966d05ce279c6ee69b1bf94b8388d38d4b770d9ed69025f +d = 30ddc2c7a4ce300cc2b75f0f977033f16c1f8bb13aae3d494c381f9a6dc8622499ae4df +Qx = 47bdfd7c77ae0c53e327c15c30d90ab1c9b670fe2241dc0ffa939fec3cf6d3c1f493f3a +Qy = 6a286aa2310a4d0468b62f3144a9da2e66d15bf86f60045824278e8986ff87a27611920 +k = 38afc3d11c66eba3441a5ea298fa593eec57b84ea29973c306ac9d46bb8d8e2f4c8b049 +R = 06c830f6c0be99fea4712f1c75f5a4e439800dcf062a16d93135c3255d3cd04bef5bc7b +S = 1eddfda0d0e02d382ae243e604f76939dc21f3ce106243b2d20aa562b78e620fb456428 + +Msg = 5c437b331831530aa94623b1736f00b986172699f0a02a5e5df0008bf25341787e2e66046f2c929dfe0058c3cb89fc5bebbe1025bb1edd1ee31522ed568e7b5b4ca3991afdc76a68cbc2c4f81863e27fdaf6a564fab2c6354e5c657de81390f8a4132669fd24a48580c716b5b7961a9c091f614d11cf45dfdaec8946a54a11d8 +d = 07899928922fbfdb5407517725edf231d15a8b62d90b7fb6d8c8d20424850dc44f797ed +Qx = 614257f54514cf37df2cd78850658a85ee362764ab8186423aa0f9a1ff486557f8f167f +Qy = 3ceae9d1370df045d20f576931ca63bdba8885f463d5c82e5edca5116ed3d2c2b0c4861 +k = 3395493478e69e6e1088166f622a4f9ec7feb998aa552b54bcf0fc67c06079f45a14993 +R = 3f31ad171dd59c9deb21851e631f223584b17f72a6807d5239ae31373512def954d5ebe +S = 28f095ae43ba5bdd899573ce6823eccd8e127c6c03cb59dff43c087ca24e1ce5504d1ed + +Msg = 91aa08567d8da4c90684dc06068f69deae240212842ff1786f04ec41b40d9187aa92c76401f9fcedced62876a34df82ad7c1e63b68bb2a972257ea8542bda6a7f1a020c9b122943b6d651abda8b8d322a8fb762eee376daa2d3637a71ed6c4f5cf96f61c0da2d6e1dda3370d80e51da2cbd8aef3267168c67359523faf910dfb +d = 2a2af63d1171930758bd3e5bfdac62cca1a83a3b55a49b3f80cf0d9ee4b2082757beac0 +Qx = 7dd6fd0868ec478e7e5c08965fa4f1efe8db4d0c04f0b6c63b5dfa397607a0d9d5ce909 +Qy = 54ff4fba9058179a2c61951fb4955cb637b01267f8f08b3aad614738c562f602d498f04 +k = 179482dddd033e8849abfd4991304137044d7433d7bf858a794340ea1cd66e736b821fb +R = 071f4cb000ca1c51c698c867a78961e6d7defbd60109f79d1d165ed045a653ddebabd10 +S = 1e2975f4a1fce0b3b0e13c3f50005fa664ee9319cf774d2e107c406d36158bcecb0e5bc + +Msg = eb5297bf408c1a55e400a20a3c10acbc5c2bc6d6ccfcc0941fb7a6fd4d2834415a6df86c3a6c4b867d1215aeb8222153da8cbbb1576c92c07ca2c36d8f243fd911f9a057e39ee25832454e28d7ed52a8d04169b9b9677a16b32d5d211b8573a8986e9bf36d7206417ad2771daa11bc21fd7ee1029b65ff7c9b2705a6dc9cf9cb +d = 35994e89e13916ad82608f74a639e6aceb756ff913aec440519946d6434af9a60a6af49 +Qx = 1f7805dfc9f90d4f8a1b241dc9d68aa41cb77b63d530cb3733cede23bb87ee5118e5bbe +Qy = 1c3f1aa3a1218de78a94ee8f88d3f787fdc68674e31792d919dbca681a6db1dabe89b61 +k = 2116684a4307c67a3d8c1014b33b928a962a8daf86c4031b0c1d47315d74bad7dab2aad +R = 33cab952e9382dc074d666f1f2ab2bd72ba394a404ce2fd02a6f7a4dc096d713827c94b +S = 33b2886738d882146c0cd715701fe4e8b94b0d28c73a6b79d2899391119ba910bcbe3be + +[B-283,SHA-256] + +Msg = f415d0adcd533dd8318b94560f86732c262ad2c6dff9dc83e2435543f429a2158cd2fbab0d96c027f71008c4895ecc644c2ceaefa80937f6cc6338d15d36e459a16bd9387a361a6d800acfd834ad5aecf442e30b70f5bfa164747cf9f89325b80976052a83a5e896c00c54f81472b14329cf23bec10a8e693005de2a506ba83d +d = 29639da33f48e4fb0d9efdf50bba550e739f0d2476385cba09d926e789191b6fb0a73ff +Qx = 770f9693777e261db9c700eb1af0b9e9d837ce5eabd8ed7864580bfb7672ced8ffca598 +Qy = 68aef01c8126889204aaca8f3ccb089596f85e2aca773634bc5775ee4d27c77f2af83e7 +k = 32a930fdb1ba2338554a252d1bf7f0169d18750a4ec4878d2968c5e735f98b9d0c25edb +R = 30cd65f1097d3fa0d05e1d6072675f1377a883b683c54b8a1f4960f90d68f3ee8c7bd98 +S = 15c61ddf43386a2b8cf557760200ac06a480797e21c92e45e6a311e1a508b03c4d9632e + +Msg = b178d86c9335b85e02178fc4551769db589ab91d823fac219c7e14e2f029753b203962389476723832f8d9631dd7764e6dd35da290afa42a794476f5c7727b3688aced848dabc9954201578cc7b25801710931f45cba1199d3788d64dc0188412e70723fb25b8ecb6718358150c4037b5b81466dac1686cb5270bb1c72d34bb1 +d = 0583a7ecbf2a975a32d07428d27ac82e5dc13d1466c4fdfc1e6a05a8d9a289f1010617d +Qx = 3775ec793ee4bff15027c70d9bb5dedfb7d2e41af8895faddddd4589cc5a00bd222b3bb +Qy = 300f7cd572d82f2f0a2d99a83977ed2034e03fdd76a0267455a524bd8199424ae5b81ca +k = 1e58b1f66c927f4ae16143856d67193d889debdac8eb03936f1b36d550c2f2639e13f8f +R = 0f897dbc8ea12f4370fcd08e8700e5e4c68dff97495f401d01b782f2ebbe259bc0dcf25 +S = 3c32424fdcca39f411663284658b8f0c1f950f0cea4354f02f4b359f18e3fefac0976e1 + +Msg = c8bfe9fa7c848531aa2762d48c153cd091100858aa0d79f994fd0e31b495ec662209a9c8761cd1d40c3d8c4262cf4dc83c4a2549a5cd477726ab6268b4b94a78b1c4a7e700812872d7f41912a723dd9abc305420ea1e1fb1fee41bf643f3a24abd6e8fbf6fde2475e290527724a6f99fd75374bf7cb01b34d3e60d8db33c4de1 +d = 0f817ab1b49131fb9bbe8c112c25a36f064efa85de7506fb9cd29d81b326bf276277f7f +Qx = 2b3a06e07fce1848494d3227ff77d1c43f4ec3c037ad73ffebfebeeae87d3bff7f7e59a +Qy = 75df52e6a34229266ff28b1c217538ae23b3912e4bae8de5cad9b57b7c1c9ca8aabb2e8 +k = 0ac57fbb899193b88fbf4ff2c502af72943b133e8d40459a833275212f6644f566f5c58 +R = 3e13307d5fc2b7ad24e9422355150578c78e1c99a6f9a24f9ca2e8bc6856936c5c4af2d +S = 05e8b77b580cdacc2660e6f8a1877d93c5983d135d63ca0e0b06aa8daedf855c9f661fa + +Msg = 9a5f563d0f9fd1f31f3a822de628ae970954f4e71292492d727109036491c29e66b9b0f2c90c26abe94c08502f5e923a9ddaf6a7d91e9541ce90d0a49f03ce4e4769753d5b7d922e1ceaac4b4cfa4262732a09550aa076b8ff9d46a50fa17de17e3b6bd606698464d116fcd5f1ae11bf45b0c48d3b738427cb47b0d1272b03cc +d = 2782af76ffebf3e2bfc0576b70e4f4bb87c762e2bb230d278ce776310a14f5b678f29af +Qx = 00dc21b3be7efaba5c7f9f22591327f0f97083d4d844415d3148d227931256d026ec9d4 +Qy = 1276f1d9e131f13bb129a1192fa24602fb508c9679ad2124e49c70a891777cd601955fe +k = 0255972b5329863f380de945574793beb0430dc416a8f2543330a125ce8d69f72dbdddf +R = 25bcb54e188aef6e362a62fd88daaacc8e697dceadc8a6b6f804ce4a36856c8da6de97b +S = 1e12e18e1e281606c16ed1f49804f8cfb33c29b0ae92c072d5c41ee3e6836cf1813d722 + +Msg = 3d6b065721da9de82cb33ec2c27107eb399b1e69ac8fa51145ed4147e20d72e27434104e76af988a3bc94f55e36677a05182fe2376dbe38195fc6a30673a4dca87336c7304f3f31d49216fbdfea00fd1e105d8b0c13ab11f8892e0045e915c17dfaab07b24ed21b06af5a8cad4f45fbee5a25bb6e87466a7bc422c0bb896440b +d = 31b827b88f14d3822244809096157df3c0aa99da90c00cd9f0b18dfe306f6881834e6b6 +Qx = 7b3ed076a2901ab2625bf05fa6db10a8c156412fd2d26741738f5eeb6a9189157526946 +Qy = 6a8cc2061352c36f264d23dc2857fbe02af34397ae5130c582e885f50f2c112f141c07f +k = 0b36f5d6da409c4a27f38ff9686cbf5f4714f4e17234fbee6e6deec97c9f0d4c585d42d +R = 356911114c9ff9ae4f3a4fcc5379c987b9d298554cdd39ce124f04707e7fd1ea25231e9 +S = 13c0a321c4c5a1e89dacddae38a9b3dda32a20627e53dcdf28ee26a550797c255eefe6c + +Msg = d125f0e2e6135567adec9e77da2afc6862e28d618416632ced829d14ee8b61116da59dfb44098a40a0b927731125617e3d2f32cfbd1546a6e758c1ab6597e75db07add52ecb61d37da2e9ed04df95b36ac249f4cbd794cb561655cbbe4b34834c497b3d392d78ed0db8db683aff0076fb6e43acba3fa2b91210cc6cf3fa594b0 +d = 27da4916f1c471cff80bfa14d12aa10270fc3b26caed010c0111f6e5a40d914a3927763 +Qx = 7d8202c88fb915446c521884fb756375a2b8d178f6a87306c1c8b67b926e830c8285c15 +Qy = 224dcebb8a7c46902532870ff855c780b2884dbce2956cd34dd6ffef8dc365b96753449 +k = 3fcb1e759418e4539f9be76354cc1914ccf9a111338890eef723431925fa132ebad8695 +R = 0d4d4f23408db58a72495aaec6dc335ce85309fedccb6ade053c23347abdc9e77a81aa1 +S = 129b6b322573dcc79704d08921cb54f31c571573da78cb09d0aab40c4036ee8f195d88a + +Msg = b380f97687ba24d617a42df1b14e5506edc4b62dfec35ed9fd886bb769832cec7f9adae10c21b7cd9152588797b4efc6b2b30a873d3f25e683ea9be070dd69731949a51121e534fabfa3a2eae0ee90a454182248bedf2595cd47ad08614177d58f7a773f5023b538f5f568682c83fb60e3fb1aa859948d01bf7b214e7f2dc719 +d = 10608eb51dc0ee97d6e488a23c582ecf0ea1df9a24db77094d87b3fb6ca98507280a934 +Qx = 399b3e571caecdfa1efb243323159a45618702600b870954cd614e494bccd70e381f68a +Qy = 2e2fc57721a500611badf48fb435a6e399cea356d281e853f55ef2cf9fc5f70dc8b3da2 +k = 0a8045b4f55115dedd8d742545f9f2bd6e5ab81cdbd318747aebfe9f74b0cbc964b6040 +R = 2d022631bb7e05d316a1b130faaca5af5eac67dd25ad609e6e2a067ff74fd4ba534db2b +S = 04595f184068433962d250394680701fbd2e2bd613a47e5de68fa1eb83cb08fb425571f + +Msg = 3f9ec57e4228e1a6ec49df02c58d756515305e48763ba1dc67298be9a1548576c28c82b4e9b3f62357d9b3c522b16d5c496a39effbdc8290edd2cadc0019e6b9fae1e61238b13b6265ad2ff413a5a0684babdb0013e7632051455e6fd943815213c555dba96cba8911e006bfddec6c3353065004538f37e48df9e339498d85c6 +d = 123f9eb8babed548df08cc3afc1d3b3bbed52b538d4654f2088fe76062fbea75b85a560 +Qx = 3b2e980ae7a847394720a9cb982fc1e41f9381b0f2e08b87fdff1bf891b9637cb22485e +Qy = 4a367d593edfaa4e17113b6b1ea3ad185b3155b1bcbd9f00f4482e509b43bf7eb67a448 +k = 2adaba166d703d4d2d431a26200acea7fb47216fd04882f91c5730a55c349770d58a452 +R = 2c83e6a7b4fd48e1ba4fda8ed7891425213764078926d8862d0eb64765ee2900b3deccd +S = 3561a949d583b7de9263d07ac427bc175b75dc52f43f3ebedf996218c94e51684ed5f9f + +Msg = bdbd7b7bf3337bd9d21a3c6db379f95408c17e49dd394e94737ceae889f45dc0ff5d48cadc53703a16b5589939506b548f8dfd34c577c084f372166cbea320c8fd07c809b211e0749ea639e68f890affa1569b66bd763c7c710989e491011371eb1d93ed9479ff0216b7f79c901a2023e2cf80b565d1c0517e73117190cd2f02 +d = 06a18e626452111922e02e31d662f4301319946a204ae8a34f06b91dd1b5b96456365e3 +Qx = 77c1fbe6a645b85fa0316ae412e8dc558c7c066d9aba900650749eb7b14a149ee57a259 +Qy = 1b2f3002ff4936653412c8ccb8a67dcae18d78dcf6dcaaa75061013d2134af2c3fa0e69 +k = 21bf4ca10d03a93d4675baa26285aaa554836bd0bab6e7fe42600ffe9137d5e304847e1 +R = 20702aa5b5cb45cbe8025b4ddda0a42a1ab746117d45382d018b2055b62791ad91abf54 +S = 12c31f9bdc096236d3ec46c4e6cdbcea47e4fba0e28d4df0fbc19e8740ce6dc0577b242 + +Msg = 436b288512ea57bc24f84fdd117da9dc1858bae8c11637f99295d88fa9d05e3c053a2584a6fe200ad190b3077d9a1608f660349dda405066c1562f6897ef69b6b674d6bc11fa470d0b96a7cf8f6e098c9ac03b0ef415aa045867ac7c11d16cee78ecf08850ccabf70f761682b561d0d0e4a889d840dc74932648ca2fb58259f7 +d = 3307fd717015b12a2dc76ada21442ac1d97519f66898b214c2ea317ab0f0905e819e4e9 +Qx = 4ff9b8d60ed177df635a3953c0f5f5c0254224bc48d34329136706d6e8fa1b16ba0916a +Qy = 2e50ef73f43ea9a5ad07c6bd68a82b7239534e195ee929aae7788c073dbe9e968c2828b +k = 14d8339f610b348f4639ac20dfe2b525517218f0c71b1908d407603b25f19971a1b5b4d +R = 2acf3dc4e3569e5038fe97920de626ddb36bf213afa0f939785dec8319eb8321234c574 +S = 01db40fa416527266a3949211fd9fec158412c447c392ed6a7c7f159a1129da864d33be + +Msg = 672faa156dc188bf16bf8933d65e091c633f294486049ce96a4a403dca28a149f4f840e8bef47412285363e9e89006614b013a41baad9885f1d9980cc897ffbd5f8a7d0e63feaeb42c07776efb307ed680ba1cebf470dd9bd8a2a9efc2b1daa569524394f9a50398add1a5bd2f7c263f9e63c2d49461acf98444fd23341ce78d +d = 14f9f412e3c7d770626e800d43cfcbba3ae6aec8563af748e8a97b67d244334b6e6d2b3 +Qx = 2293b37c84e7514564635e517bbdb9bda0b4a41217ca64c38e94a4bd00753255b4cc389 +Qy = 088c10bd909964ecfe10c373214544c6f60ab85b8f5545afb0fd2ac03d036db7ea9e67a +k = 19b21a4d73012dd2a2ec3ee280a9b855b89e6ad53438431cdb5d2cec0e5ba21300e9bd6 +R = 3baaac69d182bf1a12a024dbc9a52ba244a654716e2756c36ddf8ca634129cf9d2b23b2 +S = 13ed92730d0a6d75f2a4a56b39f82d063e1be988dc58f0ba5f553fa88b6510116005727 + +Msg = 4321334cc8ee44f1cb392a4b280a95561809dd3639ddf43b6e11cb73067597988d95b8643d86c76c3c6b932d9262b9b8b55a04fba0666dd8b8ff1e8fdf799ae3945b6e30d3af3966f1a6d634d5e012710d66cb447fc3375130968a2e1e647780aada2609d87247c90338dd71c3bcc3902311caba27d5d4ea4d73ccea960d4bfa +d = 3091a6a8bdac1e43542dce752694972e734dca31c061c7d1000754296d0748055db3f09 +Qx = 5c0761d01020a30c478617313c67008a1332a0e6f295c5a9f01b3411eef585a9dafc693 +Qy = 0eadfc6f7bb9986b0dd221b77b54287042ae8d1ae5788706b79a354fe785c66145bfe81 +k = 0afb2e2e29b26a686368b127e38c2f5726fd55a13e9f87cf00e831d3fe19d9511d07e81 +R = 2685f634a8c16ee79acf62b7a1fb3acaec0db47c6ff5f2c97a804e9550494b128b2287b +S = 12b545bd76b8d2cdfc5452291d5e4748a5e981c400daeb65c20812a65bbe936bc613219 + +Msg = 2087e22094570d39fa937f15a3ef0601709a66666344186a33b487d041793fbb9709a95af250b1df0762ea98e911aeb3ff1fa19f0aca53fd4179e454e0e91636e55cc5b17cad9e1575c82ad265dc34c4a66b7a31ecb9ef9dc756f2ac1d9dab35369a6bad4a0f47e629daab91addc6d297d1e5d81477b3966d8c3b607ed194d88 +d = 1195921b91353db9bcd00510efffe009c94f6bd8d790f5fb3e5a0101c9ca5d21c6ef2eb +Qx = 5dd8aa95e24c054d508bc5081546677b9a8e8dad40d3f8a184af7cf07cdb09ffa2e0498 +Qy = 5032f208dc3bbad6aaab63211e13e17656c750c6c2a6e3caaf55a7c30ae5ba241d8641b +k = 3223c6439db7255e89c28aeb046e906ba79f4e9b8222ba5ec201b964d3666301f74967b +R = 0fb7e194dae6420ac447e7d4f882da3c4859f53a948833a0a08f918acbe03c2e915d1eb +S = 2336f1206b46b3166b28918bdc1c817b22ab16b355030cfd635ab3dade20d2dbde08b6a + +Msg = 15c7bca449a73b03bbfa783f5a91ca0b7916889a5d99d541e2e8593c3b176a5b634ba20b34407fbd94ae1c1398f5313cab7402f3bcd7ad277a8c66d09a6df5dd086b20a0a3823fbbb80980cd86bd13e527eee15656cc977103e80113539e26695addd9eef6a1f56986168d9a53f8b5de833f8962c3826cca106ae9e8c00208d2 +d = 29dc20446e9abacb43823e12a83737b46e6e577466b5a3925e0f9d496824dadb4d4b50c +Qx = 4b3c1d41d8172ba15fc92d9586f29716821ea82274ac8e4fb3452ccca3e34925f1e736c +Qy = 23e22cec962d759bc659841f259de954911aa289e9994bd76a30149a73711bc41b29904 +k = 0931ef56f08c379d1ddce0649f45ec21eccf3dcfa178616f45b200a06f82172b91bffe1 +R = 178348d533217543af694c8d3cee8177e22740b657bc6ce6df9e57f0c1f14fc9407c440 +S = 3eb25dc4ed42495b54679653ab1cd4d61c854207994a7318026afdfd44c89cda9247388 + +Msg = d12fbb82ee7a57eaf76b63fd6bc6c0a65c85f135f019d43ff7bc295cad15d53729d904fed63d69d3ffe8b82c0ebaf0399e2717ece40e011f710b5db46aa457c23b85545953398b814816a1e7a8ab5b0b14c4a0451b0bda9d0d2ec4a374bcaae208b7fe8056bfa17d6b7ffd4ba2e9179f49b9cd781b0c06f6ce3eec26cd428cb6 +d = 3b9b77d19a42e9a555da8ab70aa5638890b2ed21daefa28ca6323fc658662dabcbfaf52 +Qx = 632fdf8ebbb755c960ebf8fa5d6b679416e488faeeb021c0782352279a7ae00eed33094 +Qy = 41aa517eff6854ba04e2de6794848823e53ca580353f2b25e45fd4efd3a369cf80fbe57 +k = 2450beeca6f1ebac3e82e3aa3239a5031f54ffe65fa6a45e2bf2ccbda448a2cf6988141 +R = 28664212774e23b6513f73a9b2da97f5eeafd10efe742e314f6913a6d0c0e3e581cc6cb +S = 025bc733edffbc1330689e7aee0dc121b64a72dff19e1d7c5990206d6daae5bae75d0b9 + +[B-283,SHA-384] + +Msg = eab0a37915c6b43b0d1e3ef92e6317b3afc8b8301b22f6059da8271fc5fe0e419ca6097daba213915855631af64e10d8382d70599d903d1535e25cbf74da3a12ba2f13c33a8562e0db03edce791f1d39af8850fd1feff0eb25f9ad0a86dfab627b96e65831bffc5f6d9693d20493bc9dd6eb3e9325dea50b055768e8aa30d49c +d = 0b9f8f3e89e9c1ef835390612bfe26d714e878c1c864f0a50190e5d2281081c5083923b +Qx = 542ea231974c079be966cf320073b0c045a2181698ae0d36a90f206ce37fa10fb905186 +Qy = 7e6eccfe1303e218b26a9f008b8b7d0c755b3c6e0892a5f572cdc16897dcf18433f9a10 +k = 31789e96e2ae53de7a7dbc3e46e9252015306d88af6bd62508554f89bb390a78fdbaf6b +R = 0fba3bd1953a9c4cf7ce37b0cd32c0f4da0396c9f347ee2dba18d636f5c3ab058907e3e +S = 15d1c9f7302731f8fcdc363ed2285be492cc03dd642335139ba71fbf962991bc7e45369 + +Msg = fdb93afd5dd1e3eaf72c7ea9a6cddb07fc2054499ffe152cb2870163eee71ace5bd420b898cb4fa80ea53fbbaece2a1eef6427b632320e9c97e38acb16b62fdbf6585b54fabf0a703307ca50f86387bed1815a05b0c8991e0743d10cdf49c8facfd7ddeb8d4a7b706b5a29e1d00ac88b0ee88b3153185495ac8388cc70104154 +d = 3a30a1c15b9ed71e102341f97c223a9b5ea3e6a335861c3cf407ef691a18cc639dbe74c +Qx = 40937b263c87461eb5d409008255d4e14c54d7a86d6e3eaf2ad9c559f7a6b9d2582542b +Qy = 7562e3a04f22ad37a1df0250215c163b45a6bd04a4b96c30fe2e2b7ded5486b172ef09d +k = 13e745c76b33e6e91f47f8423653b0056014841f4df890121655ac2044f3a6d58b9e213 +R = 22467497bf1b5d29476f24aaf5f88d905be7900406c64033913fc88601c62063a924456 +S = 19cb024c7d6be51d15337a207e66fb0e473956932faf6d755393dd5a899bf63610ff887 + +Msg = c78e35d1a5b1bbb0ec21e7ba7b7c74c859d88f3e100e40ae34128cf093885dae4e87cd09f3239dd8e79e25305220880dd352a650225d9bd193b9b84e488c458b0b5fde1af941c0c9fdf952d2fa41f665918dccae27ab7923da4710f8c27ac8ed424992568dd6f0a6c3ecead21650ed162e0292104eef3c2d8551be866a88d279 +d = 083330123cc64c11888c1fd388629d0b329a50ef31a476b909a182c930ff02d0c389b93 +Qx = 2e3a3e712676bede22893a8911ad6a683306e86487d24585bd6fe4f2657281f0bae2dc8 +Qy = 773889a95e9bd579be379fbf84dc8d26d47335253356e5b01c09eb8ed57474d6c0b0491 +k = 0d630f20623e93c274239200393cc552d03da6bb9e74f4a44a518e2642e84e761dff7a9 +R = 27b8997fb98ad04488f5dc8ae5dc88b2a3231fca76d7320550c74cc540110c0cee5d8fc +S = 1824f1050e85d527847faff236b7195965e7b93343ebac889b23425dc27226d50a5266c + +Msg = e05435f695997229cce314e50065f3c5f71981988dddccaae6efb81f936b22cb48813f506d1edf5ebd69b0be34f278592c5935f0f6db0cca1ef9d62834fbf3c4c03f4da0596cb4d67b7b767e85dde7b7c6fbef7d89babe6f97b876b33594a9e36ab87079861ee556fb03274ad4af527342a4794192b8933f28c6220f954c77de +d = 1dc2b656c207eabc9e0d6272099babca8d149c9c4258b779c2f06de75f76d77505271c0 +Qx = 2b03407b65809825a32ab50f1b556a65c3bbbd65cfcec898514637ce606182517fa1a4d +Qy = 21c97e293ec74dee17c89b962356b7bd50c7b23fcc30ec7fdd0a629d11373e28380a8c8 +k = 2d0dc9317a2af5a7d0a23c00d126b7fae4c06bda0a5c50462ba26bddf575adb091d0e50 +R = 211c396875b5dc71ba87ff2483b0ffbff60cc3656132fda7422a81964f1bfbcb5ecca23 +S = 0a0ed7bf1ca853b9b19924c706eff373b97585b692b4b535ad71cc4362073caf8f61a3f + +Msg = 0f9f36477076c4b5a7d1ceb314a397fb14646695b0803e36e98908c8a978770269f165a1fed8f4b655d4efd6ad283d7f5d51b6e1e302d360e8ebf4e887c7523a757ffd55384e114bbfc6b7a0ec8511079507b919065ca018573418f9e394854c5704227772161707b4d0246ebceb91192f0eb2ea994ce61fd98a6d14cc8246c5 +d = 0081772348ff2d7a3fd57fe703555ab2e14f5d203c4cf0292f944e827e884d95f3b1d83 +Qx = 3f7174e88ffa8bc0a770fffa4bc30a436fce331dbe7154f6e2fc0cdd09e76840f089b3f +Qy = 561e6aa3feffb2033ea716ae94b9a7402bccfed1fc4a137cb96fcdfe4685314f73a8bb5 +k = 3a8c40754ef7ddd0e289b2cdac5e06c72dc3d6ae9d0351d9295aedfd6f0e88809674bae +R = 1443b46c0e6bce31642dcf3037e25b6ba2b42daa9a83f5c0bbfb2487ce717c37b91f46b +S = 3f59d5a925fe19c795b4992c265a3c61b2452237eb34efb9aba30208ce07d1ad47e2279 + +Msg = 1d38b1c342b6611dbaf412a66c1c0b8397692755f576df33b31c2bd12b7f0707cc423376391f7b00aa4e7b7fe54532e2b39c3c5284b9c8ccce48eaf9308ed338992f1d4ecde6cbe352e46339d7d602942158387881d9b493fd40cc59d4f9b53ee4191d42352c6f7bf32c331f0c5afbd44a92901a4b713c7cf6ccddf7de4cc6e4 +d = 1eb6bf2ca1b5ffe6f6a795733eaeed12de6e87c53571e702635b9dbd0d96b47df4a005b +Qx = 0e64dbc1a08acf6ff0e820593cad79a46e3bd818ddef5ca0960fde799abacc7b840eddb +Qy = 6115d3de2bdd011ad053550471368581a5f125eb0d32090646fe4407980a42988e551aa +k = 3b28fc6d0e4a7fc449b811b78900fb9f89885f4d4f70cb5a2b3d4f8ab87bd5448f4bfd2 +R = 2601923909c8c953087b0c0acda57d8c01f814dc9722171d8409d0acd2fa4d9c1314693 +S = 3eb316cacba93bd473a4b4acae4f2b5a5b2ac9856519032e63a0c718698956e8f35673b + +Msg = 3353ad05ef90e9762bcfedd6ef44a1e8ea0392ebef30cffd48ae620f3e567e1cd44882d514e7c6759200d4bcab18afd3038c3d3f8c50f7bba32a04eee5a4b1cfb8c349939e4efe0a46fd047d02ed000d8fa1b98b0af5586f120d9ad174b3aea33905b979ece1eb3660b1e070c8821b32df41904ad68bbd8ed247aabd94066f16 +d = 3b2a3e65e5a306bf8e3955b60e856dfa9bf68c1275a678ca056207a0ec67c96eb3f8309 +Qx = 2c542cef892b06372af7d9c321ed5309995c1cbbf1a466e70bd30f3856ab7c5d18f4e3d +Qy = 2a8acdc12a7cc0b54f4dec9cf61c484a5cf86c4cf6cb5ed615479123ef1c6ecbb6c7ae4 +k = 09bb5e49188621466440a0841b007525000c2203d9821f4c6afab63ac2b97cb5e2e3dcf +R = 00a09da1c4bedff47945898f4f4ee9a0857bb56be535544aff9d729ae44e23d678fc71f +S = 2390be08ba0861b32ca35ba27a0c8dd1a4e96d28cb007133a096b52afa0126bf2a2abee + +Msg = e7ec162185fe9a5803c6b03d98041422315ccdac67e48fbd07a1ef3c5661158710abc6791bd0a75d56791b4ac0e7695d53c5989d9fa6a3b037583b2a80d2b154b024f1c36b63548be9afe1d51f2f68b2ba94d4ca1e69a35ac10e15ba72242aac20f7526b12ff9d3cde9a9bfd70d55adf9bd92c66d092d7d08e9764c84bf7f329 +d = 1fd4d1af0bb7c79ed5fea7bb45574e46534387bd916649485ef15207352d7302e81dc01 +Qx = 77057d3f93011440a78718a3cfded73e4196e7fde96e794465c51be8b679f912c10edcf +Qy = 59873441c590c43e0f00f80afad5b0166f94b62214ea45da29174874e44356b29eda6b9 +k = 3f224b35737e78ec5bc9b081a601d8fe19e33b4787449d3353d2ad225358211cf9f7f0c +R = 1a7bfe92c30ed1af478282786bdf7b5b89cd0fdba5e534bdf13899dab5af108803d73f6 +S = 2ba14810de4f5cf48b56e94bd6c439d230dfced3cb698c77627f59faff0ac5a42c43067 + +Msg = 87c8f2e3f4fdebce0ca9300fc1ebcaa934f51a12b6b8f2cb6bb6eb77965468663044afeb2a1334cb5a81e74b8427267f8b34b5e9ff0cf157a9f18be2b1942e32ca61dc23ea13c3f9fcfa16df8fe05e067938b6994982676463fb12842d4ec532cb904cf222aa805dd0d86ab9a33a83e294c6d81e8dfa273835e62e9041dc8ff6 +d = 20380b1136b5283e9b7f54b7535ebda33b129ceb177bf5d3d07b1daed5edd9fb3862530 +Qx = 5e7d0931db006c6abe04671d1aede760f2b1ac5c866570f8e5a24ed356fdab49cc5cdea +Qy = 7004920fdb0a744cc545068bf82bc5d7a46edf9265fd7c5979b9559f5421c9a98f6db89 +k = 3cfbb1204caf6011fceb8d4be987d9a41b81bcdd95b94919b220647d0e7a18feef4cd01 +R = 07096beda28c20d2e62d9b0750142d3d21b54c38c7fad1ed65e4f9b386f3dcfcc43a3c2 +S = 3d0af02aa39e329e4c39f2a1d6797f0e3d14554dedbcab9abbd158273a3c7116225abab + +Msg = 2ac53e8a50c4afe3b38904255b7cbf150c5f79dc15932dc0ac9aa631521f68a0d4b6bc5a04d55c99a36531fd4886a23a8d99f262ecd2a9feea925d7a96ebe9b6979a207b7f9378afbe404fc8e959b0333572a2c911f8743c0ba64eebc7ef12fe5435d2cb0e5091ae518b6e4233489efe3c16c6f21abf4e2c6808b733914e5a7d +d = 19f815b98836948e0a0dc9c30828c31b13e175f1e79f23d084ae1bbe64823f4866214b5 +Qx = 5109d8ce934972f5520101730d0a14b99213ea17772e3e7637d622a5de13fd2ffe3bffa +Qy = 502927e0c7baedc4bb3ed2bd1b15fd2d06dd43424393b246dd530d5d8598b56dfcb3cb7 +k = 10359d5cd8a9b7532c9902bbf1cb83d0d34bf37e73e7c0f5729b62a10bd4d8faa0f53a3 +R = 3503410a6feec71fde2feb14375d50f99ff9a2c8bef47e676bcc6c3045efa9948891ab4 +S = 159b1f65fd566ecfdc08b87e4ecf99ceea3088a750e2c3c9d868bb432de6a61f289d06f + +Msg = 0b201469cac4c078f587edecdcdb6efd5752cb4a3f43ab540463c4d908c27527aa3592f2f9acad85dd94a3c056bd28618317ebdf2e7dd6c5ad26fa3c31dd8e5c50c60418d91c93bcbb59ec1adb1db791f485ded78a5cdcddd23dd1cfa4f13443468d8a5f2d648059b9c4470d0f4fe7733d56a28a2c24456b6923703ef32cf0b8 +d = 01854e954654e726cf4bebc0e5a840e8809fd716059211c6ffeaed36829808363164684 +Qx = 7a6e7c542860e815d3fa24fbaf99989e8b9c812b08399056ae4f9a850a6711a7385b622 +Qy = 0dde6bff33891a64744dce6456600f5a6a11049906608e77f8afc38b922972c805af258 +k = 2c9cfd376903122625c7fdca50e93d4c216f0c7d07f33b3b51e54e666e13b67dc89d290 +R = 18321f9ee35d47648060213df1275ae89c2ec7d17abe8093d8a431ced23aa61d3f8df4f +S = 09e5a05a62b006a7787c97be38df6fb9fbc1433aa2241b5a788fa727229a18e07d7a8aa + +Msg = fc5e4dddf4c4a328b685035ee79069770fbebcc56c14e31afb4bbcdd5220e025f31eba794fd6c05e64f19678dab33ce4f084bc32790392f14bf35669d75b6466b4214ec30d58ca90ae285c9058f5804a1fc9d7a995958f2a0e84ee52e8a78b601bec04ab607ffc2091749cc548c6754ed14e2e5f92315bdacaa7a12823ef76bf +d = 3548f8020819588b3202f4c1ac62eaec6a47c2a19b2900c5a3cf5b4ba5804231141c647 +Qx = 38563f2482a399bf1c13f42f8b85ef64a3599c22da9688b97530718bfefdabca3ae8637 +Qy = 5c4aabf6d8a90af345008d5a244d0671cbe1afd08000c4eb37702a9bcba6dbc058ba6da +k = 32649876d776117003305f0ec9cdab5cd84bbdc747d3dad5d8d54a8fdc84d519d50df45 +R = 1f5160851981772c502088eef209f7f89a7c8ab35e630d16330bec7723e398fb37c84b1 +S = 073a7333a7037e1257d4d70be87c30bef770f9d728dd7e2615d47b399ec650aedc867c4 + +Msg = 284cad790e6207e451a6a469cee3befc3ec43e047cf91b9dff1485718aa29de36a43f7c51eacd8589f0c3a96ec18e8ccfa92941b50b2132e3612d5b45e16f60d411d1c53e373e1ba451352e28970ada9dcb9802102518a385dc571dcf6900971b00346098a58042e0d1d129bd6801fa640a895a458a45b31318fe63ebb30c6e3 +d = 3cc4505005c41142308f1489226b7b542e2e7f24f1d3089ff6b92a4b0013f490ad52e60 +Qx = 280b77ddc6648d9cc3f5557d406ea2a089c8179d4320781b2eb76ab07fcafd2535b91de +Qy = 05f23bf4171aabbf0fd50049aa017c0dae70b065964c685bc03b958cee2fc3249149d31 +k = 2ef488215648524f6caf85233736eddcd9d1d838c6a2799c3a68580492d40f9800bd119 +R = 3e8e13db22c97281307edd4037f0a75d2c70a070614e94e02c860f36a53aa738fa0db2f +S = 356f2651b51a6be0c697300a8c2641bfaa1795397eac208385c3729248e36baefc173ae + +Msg = 6d46e57abea9d115deda48b69fe8e0b36144df2f6a659509ce1b514c8cc4769d46e5f71df2a084f1db4a22fdd3ef0c2f90394f2898ce291b9f279c0664aa01419f5f6bee1fc1299871b27ecd57a5ac548f99d01871b8c238a6b46044c953b2e78e22346a0c7663af4db62799038ffb5c21ee512e26d01e70a4ed967377ab8405 +d = 144a2fc8e0aa63506e14e4307df36416f963dd9da78655832f5b991af8c3eb97df78efc +Qx = 3fe8867b560bfb21dda517b8f4d50578a11e1d0ab7ed4ab3796580d31bdf710e8e22284 +Qy = 5a302baa3795e2d132c55d90858d14d4b17aea0ab70632b135f94bb23112d163357f8ca +k = 0b5225132f19419715170f5a3f26919b4127a05b4f0406f895af1e4bba95786daf95259 +R = 0651d17b00ed9a06bfc6a913883b5cdf51bd5f2dd22307cc5ad3bb545f623516232bb6e +S = 01128d4784fc0fc050af0b97f859616d764b22f40734ba65aa15e2cf80e7bba3d15f42f + +Msg = dd750b39bd8753f4e473c4484e2b36ce2da7576813ebe05861c339ffae1d029bc793173ed394091c00685ad82f0550cb21ed1c68f0c27cb7396922239cfb886647af204e88a9101b7453a8ab662e270b87a8a13f2fe61d695597382cabeb781933bebfd7d0dcd33f77266e43e32d937f2dc89f67525e522977ce73e9ad36c8e1 +d = 24ffeaf139043ff25a395e4c560c7680c1c2155191378917eb25194136b4a69597dc277 +Qx = 0402bf61c0e36385e5fa8371a553ed8652466fdc3ed9d4a3ce1bcc567d1f451f6703dd1 +Qy = 4dbea6f67e1117116f30fe42e84383768b0da770f8a2b4cd8a4fec330a0034554a13808 +k = 3e4e78f012eaf1778c086a3bbd9e996da0ddde651236ebdb6348062f56b36f63a901561 +R = 1e2312720f6fbf44d7a6449a7f30019c38e69f2e6424d4bd1054f40798e9fe58d080b86 +S = 379d1b610a976730dfdf3300280f1c61109ad13c788e8f8f9a8d5e0130ca9482ee417da + +[B-283,SHA-512] + +Msg = 4736e59fe5812f63737eed57a570182c065538abd9fb0a1c9c2059199e7052ba57d84b5fa1cda2ad9f216610361ce1dfb9334816b6bea509283756a03aaae2e5b0597f492d078b6b015a40c9785dcc5d2ae266176980db04f5cffef40e16661a50ef871c5f531d73fd5d114fa19bae9dd2da4267a131fc31849da38c2b78d1af +d = 1d1f2e0f044a416e1087d645f60c53cb67be2efe7944b29ac832142f13d39b08ac52931 +Qx = 10b2d7b00182ee9666a6a2bf039c4358683f234ae41a9e5485fd6594e3daa880c0dfe0f +Qy = 0a419b2f40e573dc2dae4b22e6f56e842e50d631b6126153178585bd05a8b9e6e87e4c8 +k = 3e4d36b479773e7a01e57c88306404a46b6e62bf494b0966b4ed57e8a16169b9a1bbfe3 +R = 30513169c8874141cdf05a51f20273ac6b55fe12fa345609a2fede6acbeb110f98471af +S = 33fd50b214f402deed1e20bd22eba71b156305e4f5a41ab9374b481ee344ab3f27f4bcd + +Msg = e573fa7d4bf5a5601e320130de91f4ad87eb7ca6b8998488afcef69c215b0cccd221b8b66eb0af9d699af9ad6c4b4a580e82941f31e4c0a9bd83995dd076c5ac9bebb34481061e7cb1b26f6e8c6b26ee4bdf9887f7ae2eb9fad3115a21dcc96acce85d23a040c0ebbe0a56e75714dbfa803d6e279b2f4280bcb993f96ba321e1 +d = 1337362609df74d25f7adee382225e6a04dd6ee4c6b45fa31499ce9edb0ec046325caf9 +Qx = 287b288ce6f65fed9f95c99fa4b8c1aaf6de65ca563df30ac67c1066d2ba2f5a554e09c +Qy = 25567fe183dd400d256c333da92dda2e364afe84492ede9fa0e913ca7f12069b5a44b48 +k = 31b84ec438302155f2e84dd118c0d8479267f8d19c8c5d96d21177e20b23e0180dd6d33 +R = 08133e49644044bf9ba3b4c8bdc3973647d650c58fae4a7ea5a5fffabafed56e759010a +S = 1d8cc410cd04b188418b20cebc8f66ab0dc29a42f9067aa2926dbadee39abce79deb396 + +Msg = 7862864d0d78b44e2a28af44a0a16d8e9b1b8c4b794db0410c0a863ba011018ef43e1e11f2fcda2f56fdb2a69cc817df425c9cb3b458922ba00d710190cae16d61af3c304a42fbb3d0c4a74a297253fccd70aca414865b41f68b01c561be281265fa89f63f975d3101334886e85929a5a47fa8dc459b663548faf8ed7484958d +d = 1be00aa0afdfe92e24a2536594d4b41701ad4dfb223aab35ff49310bdba7566057fe8ac +Qx = 13583d8cd163fdef7c11e91f36c1d3eb2f7957d219244db883708a7c5777611b0066812 +Qy = 7a1f4df45073b838277d8da7daa7147b0f10aa98b5ec02fbbf97c89ee17f3a7ab4f3f27 +k = 26b42f369ff9b2740147914a2698cf1ec9bab44caa3b5f05957ceb9a32073729aef0fc3 +R = 37640dcfa11483b3754ea027f5f239500894dda4f4c8308f0623db256eba2113c41ae61 +S = 2096767a1f8210b175334fad61b4c7fb4e2d6c7811b5d22521af7750f101077e2fd4e44 + +Msg = e73c96d1a84cf7cc96065b3c6a45db9531cd86a397e434072a38d5eeb9a90f62bf5d20bae22b926cfe967647d2bbb5dd1f59d6d58183f2cf8d06f4ac002ead026409ca6a1f868b406c84ff8887d737f65f9664f94801b2cd1f11aec336c0dbd4ec236d1cc4fc257489dc9709dfa64eae3653ac66ab32344936c03eeb06d5852d +d = 12ad0aa248db4fbc649f503e93f86104cb705d88c58e01d3ae0099590a69aa006aa7efb +Qx = 08d262f57f9528d55cc03c10bd63ded536bee9ecc617221d9892ae1a75b7cdee175cb33 +Qy = 754e40e8823e89fe23dd2748fb74e9e93c3b33f188f80377a32bc66f6a92da1804c04cd +k = 2405a351a3bf9a6dd548e8477452c4d9d719e32762754cd807a90abddd3ad380e197137 +R = 28c5d807ea1c3ddb7f2c90f3af644c5d6a2757336ae46c2c148752a2fc150e8183cfd83 +S = 397c8c52fd67b99792229194a787518db5be8e8c291b1a30e105b00f108ce41f8ec8fa9 + +Msg = a73fb0aaec838d011110d49c5e94395ce07408917bacf7689d2cfe0948c582214b263c6b80e0a55f1e159086817605723740569eeaa1bae96b979679165c5c35ef2142525e943e595e6b4b160acd7ebe41de19775346363f779b1f80b6d5f0785b92a648028e456af8496102d19dc6526247a654bdae3368f075fa9ee92b2f4a +d = 2cfbb8f340cae8e2e2322829148981cd9e509b0c65497fd8d9da5dee9dcfd39b0f7556c +Qx = 260bb17da74429f049f3a7eb73fea9cbeb5b14ce553d7772a365376d0114ed2ef3087d0 +Qy = 5889e41bca54c09be20dd406a6e1f11f9d31d720e0c4e2e88f381ba89a97f12fa9faff0 +k = 3fd7cb455cd97f7f9cb888444f39569114589612b108657ac59178ffe31a33569c9f0bb +R = 048a10915fd3bf9ffab1cb13632359466ccc539128cd98c6273d5d8d26c64d57520394a +S = 2d0f67f9baffbb34094c5fce36f47cb73a537ff984c89e38d073678c21148056bdd6893 + +Msg = eda775984c7c9f7db47af30dab314d070fb77e9b623baa6b73e2cbda800f167b20fdc2e7219391efacf908f4ceed9b9b6bd3541b52ea087177e18c97391214758cf6455311fad336ab56cfdce57a18add8cf85b0a0bd6fa7297dbaa34bfc8585b0f06a0aae055186658c227e19cddb65de88d260f09f805c2e8854dcc524189d +d = 070e82a1f3fa6158d15b7346dd56150faee5c98c9d07c996e01a06dc9b211b12ff62d60 +Qx = 3d3ca5fe316a0820e84a8bb5d231bb14c810a87c7392d7f960e7cecacc56c337f88b0ea +Qy = 27ac0ded5633a98ec5734db9de1399c83a181d522037266d856c83e5c8047c4eff2c4e3 +k = 311b23487750c3c4b23b28424c33328c39d6f594d2a9b459a883508b985d8aca039a2b5 +R = 1465736c3c9e30e895b1544690e05108ca221cf2352ee4af1b5ee4130029a82b277b076 +S = 2819b94dca3a58cc5a96790871640fe0fae38883de6fb4712126c1c1cbfcb0c005c5af0 + +Msg = a4a13e0bfa761b9bf37fade6570d41c161e20558874911ff3bee38e5649849b159beccf321c6bc7243f99c01a2fadbab9e157e9952ca65d8ea676c74fdc976d00501c626b8465c6cf0e4fd1a7d1260aea987161b821528b0b423e62ecc5193a0a49442b0c3e4ec9c4786a3a86b199c07dd3a17033d430d2c83c100f54e0a7c31 +d = 0b471bbc5f7a07996e370da4a09e71e2119ab3a562a273f079401951fbe4df39a4493da +Qx = 333e9d5e077bc64d022e49d5d207385a19282aff1b73b307523b0f861b4ce4219308c82 +Qy = 5414e431f3b90a2d4a454d073cdd81f8b224180ac4139104166ec33ab33d079dd147ebf +k = 3e431c39ef6f4b7674a1bf414460b58998ed7aa5b1af7ddab746cbcd2ed9f42ae3827d8 +R = 151df78c0f453d396d71528032933566e176eb7f6910fa9df2e9b2f5ebb6038777ef209 +S = 08a1c4a1e21cc63fc15a78f0a11a1bc7a59a5a31f57091a12896fa670dfdc05c04053b7 + +Msg = 7ceda7a7248640f7055309ae712c19d741375d6a7e0608e07f0135bb830dc3e8863ee9e7a75331a5e1bd38c42cdd484d4f45a26c2c1d4e05ce0d0ca941f4e94ecc6b371102f31633629e9861de558bcb6407d66eb91f1062ac0e0409db68b9f2855296a7f42fc92359a7dae16c73fd2dddea52bd866a4d501aedd8fe3b3ea733 +d = 3c65cf80bfb507dff52f9bf2f93df0642020d41619b3990009409e7210fd7130ac44ffe +Qx = 3beb5b9b8785c5601093086b709c0a05955be42eca3d217e625349e5a875efa82d75ed4 +Qy = 07cd4e64475d628e6f562f0ac9c3f91075626063a52c2b621796e557799ab2f1ebf8dbb +k = 16212ce91eed7153fef806d2561912be1d988410641d5eb72d586cd4e6782deae4538a0 +R = 26ea04dded2cbeca81e75503932982c7fb5cc7d38a45a3fff8c4ed7f844dc759d8da302 +S = 061d3756e3da1c7816f0d72a8c84dd1f3b93624b631f5051c801af4e472fcf82d896c18 + +Msg = 609815edfd58c0e26a4b06dded831d2f33466a130754b96d8d7c3b4d99fd4b0789ec719bc25338d0ae8c5880560c02687d352d77c291e406eae865c3b26d00f2e63dc644ce7e01d6e96ceeac8bc1eeb257d36cbb25d89b5fff6e30b6051506a0ae54cfaf6214f30985d54cab78f708029c1fc0175bc58e888db89dea8d300abc +d = 0f4d33a9c7e6744ab3c441828bf0f1866ae1c042cc54abc754e3801263a96cbb3955dfc +Qx = 4b925b97bbe67adbb6e918acbcae0ced8dcf11d012e1a97875b750bbb7d01945bd64df3 +Qy = 4591cc9caabc0db8fe9047e6b1f8d850ac4389fe67bb84f6846b631dc3524c8dbe6a06d +k = 0483aefcad5e382351125b333dcede8ef50914b1d1f1843b075f242acba18c290c742cb +R = 1fb791c288e2cd52d3837c56b02fc99f53a6ee27ad6dd9c0a31ca08d8fa64eefccc5c87 +S = 0a041ca35422d8985c1c706dcb0b8ece64b65285bd0a934cdb41fc08223885147281869 + +Msg = 82d8ebba707b72655497320200ce719520c1ae7f46f38122958fd99322c25c9f4d4344bcb77a6658df0eece5df163412ecdca58475d56b0c2d14a0361e4cef458df146925d473a43692b15e9bbec550f1bde3444f2a5b2ecb55d2abd273ae999f16a32333529d94455e485ca4585e6b07bedbfc2bd1eb766abf0d28bdb1ae6ec +d = 3a4824bdcea6a144d85f1b194431724cc49849b6cb949b4766d641ae95477d1ec3d1464 +Qx = 2c9eb36eca01dc2fe921933f4cebe8046b3679abed80d2f8fbcf8f254bf17be3d551a56 +Qy = 34c836aa4e946425fc9f49f3f62e33d8a0afd320292a34d0ef8bde8ad79a10e3f95f2f1 +k = 23d8725af57d835018e8737fb4e8b2eed3ec5a83fda137c710fc1df875416ff82fba90a +R = 0d9f57ba8b6a9a1cbba67adfbb938211ed2d267468f79ad39ea1eca7271d135bb67c18c +S = 0f09a600d97c69ab521bd1ed6bcf0c0f69255c334e0aea06c68bba81d53e810cc553c9d + +Msg = 9c6fce18a6a96349b10c9f2f5f1505c8ab727a650b44bc0782a5f39fcb48b45fc7c1b82180d5f229b8abfc807071f931d333d265fc940c93fae7520d8d40ef59d7c6e3678c6a2ecde52b6a8827b1ffc6ed269cb9832feb20e593a7e3d4708309342875199eb2ffceba7ecd707b122516c815e83e27872eda812e3ea52ee3c4a8 +d = 27ba543ea785df1d53d4ae4c1bd0a3a994cddf0c25d2b4e8ff17ea7aa00619e858da1a5 +Qx = 7d375a9e78ccee85fd795e3fe6bc07f50af3456edda1ab00303f6de6b5b02fe09859c63 +Qy = 08d0d54ab9a239b5ff955452b32bfd2372fe095751bea4b56d52f79b4fda0fa635f57f9 +k = 00ee7010af4a517502cc5d5433d98916f6750e8a9009ea04b8132268673d4a02a3e2031 +R = 3c147b66efa47a842eb90371eeae907f0c813ca0937e488da95ff8ee16d389f3ab902ff +S = 01469d005eacd9ac84a140c93ed0aee09083a4822730a28df35058cad29267eacf03968 + +Msg = 5eac15a64c7653d125605869012b8f036804817aedacbb5a5248a595ee0c12329f91e8179c187192d3ed0d4ca2e202d8d4d9c93ad3f3ed931121c193af5b47a8a5dc39775b6c2d702708e5134f77a31bd62eaf87e39e6fd3f2b9f782c3057e162dd53b3addf92bf0ab99835c7f6649abd1c5322a1ebb2ba313df9464a74c14d3 +d = 0708d0907d14dcd5f40e2903e1e90e48a0ffaa6d4d9b84ca14df4e985c294f74eb9f2d2 +Qx = 6fb0fe1c3d5bfee5399c98518bc3ff135e0c351243fa0540717a9b1f7990eb8cf43597f +Qy = 5212fd4d6a50c08cd99ee5988103fa639b1123c878d416cc553639bdcee1f8e927bdc8f +k = 151465f40204d76f3bfc2e4052549869c19da82c678c332f536ef24567ea034358866c8 +R = 0803d3e8c876d46a9198f2f769faa76c4f66bc5ff4298b9640ccb8e67ff8d10f86342c4 +S = 00da3344354114d163d14d4c288785adbf9a8b31371c6e4420383c80ba0a430019c6acf + +Msg = df735a7e60bc267b18f313ad56bff830be5ef119baf43ce27c6368ff1dd89f010afd4f48740b11c12101c5903bfa71d6cb3d6462cf875bbd55a570ffedf3564088dfe8c8d3148231b78b5adaa6c53696737d4704daa59eab8d986fc6e519e81540f201e77b923a6a4af65d7173635b3b19b2023022186a7b8e869e1ed51717ab +d = 21fb0a6b94080da8b8299b87457dc09d21bc430ba5f3359d92aacc1151be9941739567e +Qx = 179831c55ead3d11844fea2e18d25cd4d658822e626550aef1afe37d88aadbcc9bfd666 +Qy = 75f8087d759ede340157667c1bb12be272b8318aedf2e8f8b487f4bcd12a50ca66f9281 +k = 37833e9aab843a6b967264fdb705b419ed63fbb09c12170491019acc7c21b9ee28a00ba +R = 1c9601440d109a3f4eb69a1a669bdaab9f4222a34a04ace8ae313b10bbb66811bea7d5b +S = 3d2f9ad7595dcff69b65f035ce600f2667f8499d3bd25f789d3f3c1bf83d2855f68eafc + +Msg = bb107b0eeaf175a786a61db923bc6d51dad5e922e85e57536118e032167b197b1a1f62d9bbcde04922fde781665c1094181c16ac914cf6fbbfb27bb8346b2134f05c55a8c6b9b481273758e380666d6e22c28577c29446cecc5c3df9ed9f1be060ca55ab2b7fda36a147aeb46df0275bb923e0876b703452fab42f6b7ad2ceb0 +d = 2c80151f91301fb6b0c7685bd172f20515b46bf94dbc4160d0720fbaedd40ec00084447 +Qx = 4a62b0c9749ae9ff00dc1d50d2b4a4941741abfdf13c8e416549ea27fc26b14f191f243 +Qy = 2c9cdab7c6512c322bd200167eb9657f8e8c84864b57480a80a3c6efbaa289ab8cbe4d8 +k = 3df951f8c4490fc7c2d50a72a93e0e82c5a20be8d91afd890d6846bfd146169ab58b382 +R = 1f2accc7f7c4b5f877e12cc17b227e1ba110577c9f4e1785e6dacd8491bc6017129d798 +S = 27a167e6f2b43ce9663b810ed4f8ef15029fb6f2be2ddf25c014d844953f501d1dcf6d6 + +Msg = f47e49ae30b09b7666600b7a95e81b0afa1553da5e01fd917e4ce1b58dfaddb8dc8c03c0f5591f533610deb6a7bb5faf5dd1ec4103a587a1a4c58a110a706b0f301a5c408b3d984c210d5b4a0b347d2b5447271f25b527b3c7864f7cdfa735dfded47c63b723fa0f0413c57a24ffde9a95c35f743f892ab1ed1df704cde82d9c +d = 1538abd7ce8a6028d01604b1b87db3aaf720e04220edf4d1d28c2d731aa25f509e58f2f +Qx = 3076b5c3a12b8a2e1368c7e3458458dd7ba6c5a6dda8c82cc6b30d1ef767d36e015207f +Qy = 369c7a80cf01e9f32c08f9924db08a7d0dfa5e9a8e0e29b57f5eea8506841e6e3da04f0 +k = 3f0052ba6ae6bd7a7aeb077a764d21caced6b241f63616ae4e4f0d98d2bfc0e44dca592 +R = 01281bc0bd36ba1f3e1c262d98ddf4e9bf1d80dbf97db02089fdf1d2e625abb5733ec3d +S = 076db2215d9f33054efb397c449f05db198d38a24749f046ee20032f5899dc142052e37 + + + +[B-409,SHA-224] + +Msg = f2380acb0d869d1cf2e25a6bd46ebe49d1c9270624c5507be4299fe773749596d07d10f7c2be1c0b27e86f27b4a6f8dff68cfe5c0b4c58dad1b4ebec7bd00ab195fdd635d9fa8a15acf81816868d737b8922379648ed70022b98c388ede5355e4d50e6bc9ec57737d8843fabda78054e92777c4b90466a5af35dd79e5d7a81ce +d = 0beb0df3b0e05a4b5cf67abef2b1827f5f3ada4a0e6c3f23d698f15a3176cb40e85bf741c9fbc78c9e207fa7302657527fd92fb +Qx = 1da1761981a65cb5c77ec50ebf7acc11eaf44bdd2f70242340ec26ffada7a4b5f661e13d6e7ad341cd7dd1ca491cb7a0b580be3 +Qy = 19ba11e4c4f2f5507d6bd2aa2f96b03510a03d5f8c38bcc8acd08080d9effd1f8ae5a5586603b2e112964514c831bf786b2fcb2 +k = 091e575fc79444fd2d9021bc267a1a076438d73464726bd0fe4ac2884a374e71bd462b1516b3e97c3202854bd0a286214b9e92c +R = 057ab9d5cf4d18f05eaf17d3b5a4af96c3eda8ee48acf5e02eefdfe2f542cde32a37c04f285794ddccbb14383a645db040bda81 +S = 05275de4157b32723366a0d63831e6512241e3e4416f3af02e22da8faeabbddd761160304927a71cfff4d6e8937347c9b78cd3b + +Msg = 22a97fc0a9694dabc6f274ab52eb592dbbe8beeb646ebe6cef60eff341a13017eef980aba6d24ab3afd976e2f6a84cf652654d4a54a36b2f2f62fab8858f8b0479a48fe9f47f8fd5a4a1f3141a91cbca186507b2bbfef5e4c4d2df525f04ef7c4720fb443ccad540f03a2be468d88c9545d1dad579fd7cbcd103bbebc9e9f961 +d = 0504865a30984a9b273d1bc289d734d10e0aa56e93ab14720f1a42a27d8cc932cb8804b963175de6fe57d8eafa8ab7ea0592dfa +Qx = 02de5872c40a79d5238722fcb94d5158009e28fb41ea012e92028dc3c87855fba71f50e6d0dff709867de185f9a9671e7a91e2f +Qy = 0fbf607f69609ae96982bda3f0317fe46ad1e0207030fdca702cd97fb5d5732f3abab24b10669875a64bd2a74c8603897c78d22 +k = 032d0f950d10d028db6e9115e9944e7c768e2da731df49dc9128bf145a747662de08cbe0517fca6fa185abdfcc4e3ab604e196f +R = 0e7d16daa689ddeb08074285f5293bd9f1c051ca5589e69e4b62c32af110b6f3981d9624df15c7cac0ddd62aee9c41c7b6d690b +S = 02f6bdcc551aef0e4e8da2df38288dcc29fe600de2f8b6cd8149f88146150790915148f069372151c3bdc4d719526eff252e610 + +Msg = af36c04af0e3fd64bf52dedf52fb788d2d1bd67fe05d98880cc7ad3c20436abf02f637fcec209fbf888903fdec8682717299f8a4386768153b7faeb6581db57fb9aaf4615b4ea8d924198fdd158363a1f40312527d6bd14c13d19985b668c6b88a7548104b1ff057d07082eea421f50062a315bc3866378f2d2d634f03fbc0cf +d = 0cc08a4ea5ebe32027885a8c212870e7c45b6c610117994d6a42a284c05199414a3a0e8e6645ac5c2ebf21c505a601f69c62b85 +Qx = 09d2beb607f2bab64451327e1dc67f04f7569ffc0c67b410c6db06dc04edddb1362ce8d8b8220be77c447640e7d0c676e5ad1d5 +Qy = 0ab813e800e75b6012faea43be56fe9d5a22cd46fb1f4f1ba65eab19f75f2ce9d8187e4940fddc485c42cd18d40d47415a80b02 +k = 0cfcc307f847eb696f16af32502690711ffbaa2e60e75f80cbcf7704152d5eeb9ddeb701952dd58fefb159926a83245fefa6196 +R = 068d1c646dca56393caf3239d9fb30d1dc56f991a8dfdbc0a7b69d273aec69a53056d9553e105c7917e522ffe446cbea23227c8 +S = 01db30aceed2b126cf45163b9d878a6590e9ac8284a31ccb0faeba2202679f181eaebb664b5537f408b693800f24da590082dfe + +Msg = 6bd6f52a6204b60f37929aeff28c87ef61ddeecc231e52a7772275f9329add899c130956f8c50ac2698aad3654fdb49b74a6427a62a11eca0a8ee8b719b8c0df7b9f0bb0af5fef4918a8c83367d29fddd04b6a1ecad904471e5b59c8fe3cdb06b4f8f96419518dda960845d83c49a49f1b1f2fd1d2682a9d60c25fe3ce982cf7 +d = 07156ef0a74ee1119532a2a7e8c02be1559c3c21897af9d5b34553c3d0feca4a8d5929d1945df824478e0c0b92a6fac8c84f639 +Qx = 01df419310cf133408e9bdb32fd85f8f0950263e1886f2e2e108a596e7e76153ec47bf9b33f69c1128dfbf52557f3c382de85f1 +Qy = 16a15517a811c77cc67ec4fe2bcba1290e4981880c071318aee28e30854692ed2d6bfb71e6e74fa97af750889ae8d010189733c +k = 063f127c38160e85acdd4d5dee1db1c32cd9da6075b2d2f46b010636e374e0262a0453394aaa8bbb5fe7b2dbcbcd62ad601cf51 +R = 0250cf50d52a5950999b9c0ddef219218f76dd9f22a2213def9ba98d258c2f8359d08d0efc208e23ea3614c9e27b2e4576b9c12 +S = 063479550873dea8a3ec0306ffa9252739c34c87bbac56d3d9138764347d5220bea9c27d6a308dc2ec53724d6d3ac4862d1735a + +Msg = 0eb8de25f63abc9cba16823270e9b6f3fdedf0fb90f6652a34688970932e3ae98f6d3bf0fefc5f247f72960a6975bff1f1acc2188a1775fe8974b2bb2b4c8d226ceb735113a14009e8ce66d58808fada4e6f697fd016829913352c0f659b6be354a067df00cf74919580750aa6064f21264d89dcb28b3b2d4d699115c36d1310 +d = 0a95c7abffa92e2c637611ccba66ff9d2ab121b40a85c5b71454cb0dca1f098ce1be8d9ea4933d1a91bcd270c5a33687835d6e4 +Qx = 048e6b8614c0c7156dc41884e17e36ef528a493c28c9e6275c3454d83beb939ccc74952732c18424ba21b8ea9c528966c692141 +Qy = 00ef9efe1145029d8d60d14dcf079d43e3cea0e18010f680bddc2729ffbff9a981cef2cb595a69142b25a0a39863a929adb635a +k = 0f43af45b0dd631bfe38d85979ff1612140b9cf80b4504857df17279d9d8ea12d5bcd2920fcec81326f15832df6774b9c4bf5b9 +R = 099f403ced566fde4d9755258445b6d6c2a4e234f99425aaa78ef118321f8579fb513ccbb71cc2732e31668a6a6bb0fdc7f4018 +S = 0d8568971a4f219d6d3d8bea6aecb4bf7de53886d2e6bbb0f71d054c63768c34d4d1883000019c59168fbb32f4317330084f979 + +Msg = cad58ca7a3b9967dc0ab62a43037764f8074ef9177d60bd98f623d693333971c24a575ed03cb61f4dc2e3d6285fb1204502a540f3c0bbbf23f5bbbd1544f322ce35d949d8b1d8edeb82e90927ac67ad49c91007056bf5096bd690d15ac00e1874fe33293d8003a4a2b094078cf09af799dde384143350c54a99e1f99cc31f2d1 +d = 02c438b07c6e0685d1f94a4bbafc013f8f21265d893f54e54c3ac2071606ad1ffacace0b8367aad724b1d9508c65ce52282e397 +Qx = 1fca66bdddefcc3c2072ea32f026c975a2c392dd7ed7e93e94a810e1125ec161bed698d8305830eb66fca5eeb71934ab3fd79b1 +Qy = 189c22a2c9f1fd7624f805fdf4faeeb931709d745a3feaa3cf04824f5fa58bbda144d4e96d83ce1e3282bd5fc9c50bcd68f5408 +k = 09230aa7b58505e2dc2f205b70a09cb9f4d8272f465b7380195ede0f7770af2a33f7623c310a0520e7436835cfcaf32467f154e +R = 013d0e70d8f4b1563efbd3c46feee15b88358562f769046f39df6d00477815e6b8763c023807eda87a86338c7b64214784fa2cb +S = 0662f43fabd03a0c05ebba700203fa2188e16504f8655bfd0fd090b109e68220122dff7a6cbb8bae08612e0d516e9f95ac15368 + +Msg = 281ce2643799bbfacc7d5993683a4fa656040517854f3c2dc7c4f8848dc305382e34e894d433caf12d8b493020a6a08d1fa05b08bf6c53127ad5f33bbe75b9db0615e3dd94408d028dcf3cb7598f6e7cb4c787681dabac7cba2cc06fccb7506fece6c7c1c1bf622d525ae9737085ab4ac578905950002024f30159cf0d99f50c +d = 09e8658f8f9e6cd98c0f4f0fd20d64d725653aeba339504def17f3ad12a63dc6157d80804e5f43f4ff48fc5573fde2c615ed31b +Qx = 15088531d914113a25f1598ba1d3cc611e27ea92ce8dc807fe8d446db14ef62ae2f06c293bcdd739f916cfedfc481fd941b4feb +Qy = 0a9135dc1b0384e7169fb4648973559e508319235a3f41ba174d5f58307448671cf22a3649168495c36b0bced09ac6df98f14db +k = 0d398fbed52228fe16d32a6ef539e4ee3858a1df327bec999ca25cdbc357de5a75903909973bbb0a5d0269862a74623a38da515 +R = 0e38910abb3d84b2b26ed17d2124f4787dc5612942e98521d9f94baac3d14159eeef9e09b9b20c807b479ba84640730a4ced4c8 +S = 0e370e575302ab0d8d08d5270fe89ba524b5bf21e43e70c4d335ec1525ff5696ced37f0de17e109fd833e5d179bcd4df42d7882 + +Msg = 0c061da1a16f2be130ae3b20b89745e840bee09633fb49671db28ec9a051545f57ee07e2410ae7ebc61c9af79868d3047705bfc64ac0c04ef0b286e579b650c7165443631e49e6a53c84cefa5625b1e1035a6ed89b8e839540040151132a937666524265e099272c1849f806db0fdf2be64960d5b5853965099459968e5beb32 +d = 0c4c13f65eacce85a51881caa6f82d9e48ec2ac574947d2751823a7f072d38bd9da0cdf30b6f19084a6d291052e7bbc2e1349e1 +Qx = 0af93430dd77e6016d1b076a52126a729f77e34bb3db11328d9edd56e29a7a09a7b6a54f72076fcba886ea78ab6ad81de43a821 +Qy = 1419e1bc339c03a8b4413ff009d76f9a19e201876ebbfbb3dc771b7df07bc19eb893ce23e40c679d7909c33af2bcd7d6306c0bc +k = 0889be0918e7ef34d3ed226f967301a10fc30111b3559e37f5fa5a57dd5c73ff672c5279d096c5b04c68b71d55e549d019281a5 +R = 0a4bddba9b7a402b584ceb82a54baab61e81973b7347e6dc9e3ce0f1e50dc21c9569d8ecf8a7da97c38e92e52636eb13d3b4c02 +S = 063c7291656466f7bd647073a50f410a2cd9e8c938aa1fd3b28ddc1cbdd7b78b757689dd661f5173f79896780ac3fdd4f3171ac + +Msg = 74ac2e1303297efc3ed8e624722df505df55b7f33964cc0d270604cc48b58205d8a11952232a8feb0079baa30d7d33660268b56a5a3dd90105f0703abef8f6636a99bc63bd47d9df100351bee32d8205dab0dbd2af36fd173409ff8d1fb7b24570f3c1e968458f58aea5aa2f46731ee91ffd6d3a060af6b3d5020daf1362af3e +d = 0da591461791ae7847e6d8dd8df46a63d3021644abe9520e158406c96540d8fd82ecfb1c3f6f5cfd7688c7656cc3e3dc94e586e +Qx = 1f48c95301956c62e2fd931df49953519b88ec3915c8de495dcb4ccba97bee023b1a6cd9a66dca29aeef8f4f1117eb954e47cdb +Qy = 10db6bf78cfeb92d29a922c4b05daa3cdff3917ba6978fe738296956ed141c749a938ca9f8f13f711aec930e0f1948ce7daf9f6 +k = 00576a91862cd63acc067563626977fee6f074d5726cf4f68e80d25029d4b8efe5ea845745c45e4cd42879e52854c3f385a10b1 +R = 0806435400248ec38a6d362e8b2cafc3f3bd46ba5baf538cd97683f76a733ba2b4ca85fa7d13b99f4076e7616e68d66f05ebd8b +S = 00ecae395fb324b4366f238f0df22d011bde5db6b0cf4189e3ad47101067ba87336ca47d637f09f7a40a1bc64de8c4aef7f497c + +Msg = 2afd17344552ccc577b0118caeb7dd56a0766e25f84df17c0505f9798931374b48df89a48c64e199108c36e00c0bf00a97ccde55787bb97c6765601765ab5417f3e75e35a9fe5e0f85a721d9f08440ed617afcdc200b318940a1e496040a6ad9090476b0fb4fcceee77b3fea11de09e7fb14853d1fff8ab12d66c101257e2d4f +d = 0b5eb943f0dd390b737510e2bb703a67f2dd89dc9f6dca6790bc7a260cb2d0fb8e1a81ad6009ed51010e7686d5b48233c6c1686 +Qx = 01ac00da454bc329f7c13950c848392cb4f31594fb7837f0986f61601fe244eca3db6c4f92accc2fbd1a4b8597b70e72d88b103 +Qy = 09a364065a9f67a0aa7518b75a0b4a9140787a67f852fa31342d6275c14713d484dec3116b9dbbb8af1d4945639997ded09cbc7 +k = 049176093dcde8549f95a8f1d1c87230046fd4b18a73243c3599815d4df8387a843bc8fe1fd67f3c6bbe394547e11866f41acaf +R = 09d7c4ddee55f61c5c4c2ac6efbba6164900344004976381c7b18c1de541a97cb58e14d14b6e433c4eb6d4bfe6d3e0a4e457469 +S = 0a9acf355bad544b3b120522365bcaa1e1dc6f1d3df1e30d3beb94f639e26147a81d154a684bbafac965bc39974c505fd0f811d + +Msg = 174b2b083541f8284645a810801e72631a11bd7bb805f684a7159e055afc44357f2c80df2b7853678d34a04144e0ede2327d03db6df23769ec41194a8d9d86af74d51c5bc11ea878c6a80689af71d3fdaf1c651003385332a512e03dd040c33d9c328ca89ec7ee9026bbacf30a7f3a68e0d894fb9f7100ffbc64bf17679dedd1 +d = 09cc63f32152284fca27ab2837bf1343144336a1fdf15b9727c47e877ac69ac9cf4c97b4bf42f1ab10d73de8597a554ed099efa +Qx = 044e655ad66ca9af330c33bc6d00ccbe4533a4c6a44a3f23c921b62eeec8cc1918e19956f3ed848fed93a7fd7ddea57096d1f23 +Qy = 03a71b221c85607821cd864af6f533f216b641ceae104b8e16dbfdfe7edcb2cf9ee0dc1679b696149ff42a051c51c861a3c7530 +k = 0db9bfe4c2e659006d31a7b44eb7bcd6dd23810f27c74dd587ab9af23aa5962dd18aef1e95da4ebf4aabfd558cbf72d2951bd44 +R = 0c3b91bf0794eca7faf227c4ee4085eac6d6918803242bff4da9c5dbac2e23fc32a4d4a192d7737be22810812558f820b0a2c13 +S = 03120a558c0edb58ae7ba36e886084801e7604558238c85a199af6c9e7506ea4e748791b04f3a92354a4f1407837d87faab66ad + +Msg = 758df71a952cdcffdc417b9fffdfb57582ab5c5473a8bdf0c2101953b023b77824263353dea0e2ede1f800a5757ec6ac0e1e4e3ab5a4cd85567d2d19acc6b7069a6e7368401cba2b6e642373654bec0ddd19fbf032794c15b7ef7e714e13e36875262c01e77766ed53cbcf735936dc9b33eaf2152a396349c82ca0297dbae4a5 +d = 09950355e8667bea8bbe3a2c4988436ab5394551b375e27fdc0c1a1d1b07ae957932f428f1aca0a486e54cd0b5bb0a5c5650641 +Qx = 02f623f81fb9a299b71ea8c58d5bd7d89e7be66ed8cfd7370de515eaceac90364438338a3fcf9981f1b6f0b30bc61c4b7c15791 +Qy = 16130b7c4061422d70b21251fa9c3d4e9636f5a08cea794a0fddf74ff5ab1b750cce0f2768d54fb2fb75e2851c2296b39c0ddd2 +k = 038e8c70cd35591012f45f27980095c4bcbb3bd36bec594927968d3747618c7f5810ea9e0a126e4d3e1e08185b031dbe0b37e5c +R = 0cf957d59b03aed0e48189d2b9256b5472c8a48b4911f9cec14adce5c6b4aa22d093a116364bcae01c1a739a4023da12a29c058 +S = 04cc2c22b243064758f52264ed84e757ff67c4f6596edcfe956b70f777d865d01e529f0a8a9a6e1895168780ab60950a62d2d2c + +Msg = b96d9f66b2000e9408d602096f032b112f0e05ea874229ab9daf6e05bee49b4722e4f2d8bf2eeaab9dad94438c76b7cc64dcbb59cb4e03f9ac70487a1d24d8d6b72d7462fe738a17edf381d52179b3acc0c0177c113eb4d10e8e78041deac1d56abda0ddf892edb8be956d285e7236bc6794168f8a180f622dd5f2b9e690c275 +d = 0a995493d6971c2d7e8fac3da9f8c0b5afd877cfb94924cfecc167f9d87002136ab253e3a4f9ddf5c9c99bb1dc1af0c6a3a3c4c +Qx = 0ac0e558dbca0fa6f013b7282e02717e91eb73304b4f7ac5e04f12f55824c441faebe5bb5af82189044827007bffb1e26557941 +Qy = 1178bb726242c718b416b21cdc9fd90b31ba6a8350f9b4ce3a188b1b5dffd0e8894ae6a417c4d74c920fda585624eed4c1d3f99 +k = 0d581293ab1e509baa50852bd3f21f6493cc524a2c16206e461e320c7f2c1c201b9d2a1dd4207227592a6457670a67cb72eeb58 +R = 022624cbbae5214d2c29e273c334b9ea78e10c7efff3611574d5fdf6f67a81472b606e0236aa47106097b9147fc1b56d062966e +S = 08895d107ba789d88a17c30a537402591ed788206487697a72f69285ee5eb4f03cdad6c2604e174ef4b9bb919d8b39bee6231c7 + +Msg = e7ae60ac55e6ba62a75d5328bbc15269d4638764169de0bf0df043d15f9152bed909b1fb8c7a8d8e88ac4f552c1092b62db00958a3a827f64896f6de4bbd8fa5258d6c36e3904d82d3eacf6eedba50b0242eb6b01212288448c3a9821c4fa493869c01149ff1850e8115cf9de1618cb8744626b1951d1de305745507c8b21045 +d = 070daf435cdc26ad66c3186267ad12d10f28d32d863f950cbfcf042fe9dfce553750ad098f82f7f1650c1126b3e4451bee6e11f +Qx = 19b41af3b557c274cf117d501ce7ccd04d8bff2dfc737d7efcd7888f2dda24737a6788f16b3b6cd589d3f65bd95194799d65659 +Qy = 11983077a2c371fcadbf47b10494f6ffc7ca8873b3d812c45a87c48e1b49edacc0ac37e5038cf1aba20360b74c0903c23a62331 +k = 043fb8cb87591747d12f4897dfbbc79644b87907bdefdbd7ff0f6f2e7970c7d40bb2fc08c17443d029a92487869f640607af460 +R = 05ea3493a8c04723de9de2cbd523481e3a8593ae8f010ecbd5add6db5a82d9b13ee7d24ecb417419639d0e9f4e68d14f6799829 +S = 0a9bbaded0a2894e384184e166bc06e1b2fabdc70536caeb3d0cd46b955743cfa8ac6edd03760d1b613fb445367734fa4270139 + +Msg = 666b0dc2ddffaa7ffd57ea3b2768f02d4b77c16fa007c6d1918400d195f068cae2dcaa69817e6e4c70d5b29c5598efe2d957bd12d0fafdcf5ac52dee80a2d46e77fc18cce2a49bfd787ff77b942c753974d22434742bdb494590d17c42af725b1309e54566276af3bcfbf5e174d3cf191b85903faafa1583282c97e66c5da6c4 +d = 0f8121980dfbe9ad0bf92383c7cab95fb72d5caba96e1de7772c6a179e85414802fbb86d725401451329287305570ec7fdd873a +Qx = 0c62f4e7eaf3f1bbae71734c86b8a40ed1297b9ba1151729f9363824425193e8605c2bcd6094aecc9d7ef2a41aa6b12877291cd +Qy = 1882a45555b68596dbc8bb093dbf1aab9900cf46653c58f5656f3688fbc72c5236297be2f0586a4031279b9014f2d3655adef41 +k = 0b4b5b19922bf6a34a00454374589f9c89745eb194b0352061a79401e23c0c0e1fecd7597b5a7cc1c463b76cce7ab921867de00 +R = 0f1fcb80a4fb49348fb326e808d8ed8c21c376f0713429a22bfe16d68cab0295b21d44029083769761c4fb853662d440eba4cfa +S = 0252a94a40008cc2c1a69113d8e14e989e7fe13918a2852de6930973a91784eb35e20d8ae150a88c459167f8ece998cbf6c5eb7 + +[B-409,SHA-256] + +Msg = 3e967cbc2bd936e0b6125dc5cf885735bdcd2d95b2f764de6931c4578ac8e0e87abdf96375481df67dbe1b6c43537e84ec62bfca6672cc5f3ea4125abd4a4119edffe04e42411d338e8b10abb1f1f818c50a9631a3f89feb5be5367bdcb0a8a82c96a427ba6ce99f9631d4411a2b7f5b14d32cb3901dc9d285e4cf5508940942 +d = 047682b2e3bcb5800a531858e8137692a9b1ee98ea74e929ce4c919c26ae3b3f1d4122d07fd9a70d8315fab727ccb67004187a3 +Qx = 17ffffc1d2009e844f8e625a3bf11749a8b4ea0b0fe3532d124112edddf72d518ef577f160962b88ee38b11445fdd356a26bcc5 +Qy = 0ca356fa8e90325aafb1826a694a55a80b2af52e70ad8d507d48946392da8b9fa27b8ff6927fe5130c69809d9a2c4b1d7eff309 +k = 058edc8f3665ff9166af55e69aab9d468f576bcc8f652e950082a48224b4923cb9396ed4ae06f05bcf7797352035484fdc501fe +R = 09b46600fb3b8204d4cb63ddfaad1482dd8cf8652f63c926895b8b8ebfe27295c052b3bb81dddd8687f4864f258a433010c89d0 +S = 0832f7674eea791b5f17db7cf9e2ab13253d870c6ab46ad01cdda30e78db8b8f51fd377dd55ec7786ccc92b17364a3c17ad5be4 + +Msg = ca1c90012eba4e7c5f01d8cb3814c58f48c03a16be6ed86934014365eee547070b870d1d26a872cfd28b60d9ee0a66dea223e9eaa90ee28076188d6091f26f665684f4b486af70669555db9058d485c677b2a34d4a98aa8d6f43bf6f44aff2a23c5d765e98f0438ab81be0585a5be29daece5d4116f44ce6062753a3ddc505f3 +d = 040cd1a06233ac27f3ddd108de7c6c0982793ee620d71982697713be9fd5143658929924cc88747a680779bb00da8a44e1e7d3f +Qx = 164e518a6719b1ad61a38a214ebb06dfb0553bc760799e668b1d0d098ae3f06dffd9b84c16de90db19043d72bed2601fda14b1d +Qy = 18e022ceb850eb1db59e6cf63c4a7c73bea0b70448a7dea77d5ee8a2e1a36cbc46454bacd5954792de82f3ec21ca6a509b0c7aa +k = 04a936fccec003bd9e8eb45d27c0eaedbd452e6fe99abaa62cbd0739bcf259cfb6884d1e60b82522c6146f081663f6f863576c9 +R = 0dec1635f2698d4666df2c217fbe3e644d27592c5607a5549c877257cba7bee29a8cac75a044e72d039747d0d18de1c34acf072 +S = 0138493216ffc3b8aa2e0c26f4fafaccd6609e6b15f767da7c907db64b5181bfdb447d73ede786144c70ddce7df7eff46dee4f2 + +Msg = a54c4351ebdb075d6a42a787647390f864b2bbfd8bb3d0e0ea9d767200fa344d1a9ff091bddb186acd69bcaecd767068efe4d752d185bfe63f6674279d0e7192d2077c400bbc0d5599ee28507c1253f05eae0687b965a015e1f3a292b4650106765266f5c95b77ad2d82a6a6e012f233169eb6b8d83576901cfd4a927c54d7f4 +d = 01ca6f752aae4eb7fc9c73a08d6fbd96bfde5030d759a2507bd45b6e1d1487e53abbe98fad4f41976364e0a1d830910ccf97abc +Qx = 0f6b7220bd24652572b37a0ff25e75f72d583c71c159857482ca9944b956a117a6b2ff96614898757b8a587e3c2b78d9943003d +Qy = 118fe425768bbf3a4acade281c41c745c9ac946c2f8b95d65787fb6b64deb71e6b38fd8c721e01c87efc7c2a6d8066fe3b35a0c +k = 04963aa161b5ffbe5d7e5058f0b1457ca1b9cd61d731a0470beefe5f8998904cf4594f98dcb41283f66e2b07c5c5d6a6c587826 +R = 0abf824d43d993107b552d7ded13f49ea0ae7bb845e56ad7e53cc5f9d64f99f9f250e4305ccd9f6594c92defa7f6860fab1c349 +S = 090a541f1844357f618e5ea34c0398ccbdab0cb363e266980ad304dfd675bc81c0345a4d723fbcc76ab5ed4cb0ba0af1b71bcd9 + +Msg = 6723dbddc8720feeb75e2a061b7fc49079f999fbc79ec8a8e01ab8d35b438b7049da5a23c49a58101742791f84f45d5f5cf551cd7de6926a0e2c4ffa1e378f038da597368c62df8cd8349bf046de46d02183dc05b3a3575f5f232dd2970057200e2c9cb60eaa6b4d72f8b73d4d40b98d1cc801d1a69cb5ed780a75a4064623b2 +d = 0fb9b1a9597d216028902abf743d25944258b48c9762d4589fe660396130b75f6006cacfde60f6204463cb8c18b032de1dd68d2 +Qx = 19b07f7f4ba100aa9e749bcf93a2c9955c442730c5e1f6f72c1b1d132b780d92f414a533282f7b66677c8cc8a3d5ba8b3cd3cf7 +Qy = 06ec6e9c495ccf600f8c19597e9cfdb639406b04f57a29dcd1a7a843c2c44e8321bb8508953e9c0503f77d36bdef24d5d39f85b +k = 0757f6acf74eb02b7ff3161b476dfd8349854154186c959179f11b9a15da3dface40ae6ed771096e053976866433382e640283a +R = 08fe276e7f63ce5f85fce19d1739a8a9986cd3c3fbe26fd59324efd98826f9db3b228321b3ad1d96145ca23cc02616d9e9d7aa6 +S = 016e06de8e3e0abf4a4f52bd2f827ca4c57412adcce3271fb4014069713f3723a038bf560788d8dd48430d3b30faf15ad9c0d69 + +Msg = ed53cec5e5500d62d38c829002916c657674ede4439c6f405ba672327ec677490e656bdd698f114c2ab5e6a1fc94a1a8d64466cfe9eaabd23a8b5c37f76a3c0decdef73b3e7b751cbf3b0817f4079560b5ea34cead88ba374201236bffc48eaf289bbaa4e828afa7d732473c228ad00588c9b443d65b998f21c3d7a9e9196c08 +d = 032109202d754da290c266f74f47805a06e6b5c3f721a72fc97a3bffeb8887e0c642d49a6bd034847d0a5ba09239c5dfdf0772d +Qx = 0f4dc8b94dfe0a27d4d41399005b242c3e5b14bc7cec55ff3a1561c894d73f365fa8fa2ccde1fd7bf3760b96ab2db78d2d50b03 +Qy = 13ac66e95c335b71fd1a98f101a392dd4696a806239fbdd0708acc69333febb48d4b649f14f42841d66ce03f1fb557a361c12c1 +k = 0b010ef786c13ece3a10eaff79b93ef3899aa385dcc1914e16abba90de0ca6389d664082fa727fa7c7907dc4c88bd621e6124c1 +R = 0488b8956c5999c317830206fc8b9f6760845c31bc4ba77584925dfe25c05a1e7d298a62e9748c7278eba622713df59accdd78c +S = 082701053ddfaa376c99cc42ad4587d84a358d9d8a9533888cc382623114aef51170de77ecf64af02e09bee203851abb22f5d11 + +Msg = 13829401bd41e9fe01329e9f5a002f90f1a6ecbf25fc63e7c1345f265ff02e496230f706c6ab377ea52d8707b54f8fc5c7f089044e2bec1dfc66a07da76ee12fb9ea0697d87706b0ebf677600bd2fe117f6cdefb8bd636a1b6b97549ee78f992c24acdf3a946053f06fd012a9c703efb8bd929a66aa74b05d61bff0395232b00 +d = 080536e820fac59b3203aea928475043b2576446619001647e35693a9e65d15236c3cbc12e1bbe0eb305973535c882b70197a92 +Qx = 16d7448c0afe992f8c59b19d6cec64d8fc5b10026a806760bbdbbf0012063f46d31e521a34771f826669c4d1ddd58d3aa13ebc9 +Qy = 1a3742a6f231546f0704345b9b83c72d5036522449cf60c1b3bdfa4c8d36e499d4ce62e6e7bb05c6132bed1ae44eed17414d2da +k = 042753a515e607cf9992dd1f249820dafe53993b59b1e57d8f2f9100f609cc15713d27f5dff4007e078d6da1061ddd36c169c21 +R = 07eeb1cc19ac45f52c0b63ff8ecf4f4f35958e86cc3e3a071a35446d490a426b48b6c287027b003488573a4834a06dad48520c3 +S = 01410d85f3f2adf065b60a126170c43e34e0883338118cd33b0b3eafea1d142480b236ce49d35fefd1ce4ad3d25e0cc9268b1d2 + +Msg = e696acdfcc96a6c088069b7595ea9516a36d8fe04dedeb789fbd965db0cc64b7017a821015f6210b6989e515def5a9605fec0d337e4ac59f3101a505168bf72ab6d98ec62a71d2f94071fc05b95e98d4efc59fedc138e3e49c5d0b44d1f48f7b1e7c1944ee189b242950d2bc804d31c7eeb45283c84638f043ab9533976433a4 +d = 0b05e5f0dad9583ea18fb8fc4d8c75fd2e3cf9e92cdd9b737485c953620d345006c31c288b380258b6500b84f729ce6730e5303 +Qx = 157c083ad9789966905c212dcfd7c049a8ba3863fd4886e4b118b3f06445fb0d4745c2a8a1193dc68915722089d0d382253b675 +Qy = 0867e8efb575800f834c978ee2ecf0f84f72e75dbbac86926b73fab8b47f38eee17a63baa02e3edb9d4f6b2fd2afc88b6de36bb +k = 0c72eb08acb1d422999ee8d51f9ddef9f897dccfafd886998edd3ddf30a638dbd0ed59d68885ce242fb838f022bccd4f3b5f854 +R = 01f4dddcacb088f6e24d331e8b111e390735a41e1fc29da8f5ffdbf7342f4b9056786f2a67159d1e57570bd69d69235ec562416 +S = 0809840df1ef8fce9b2edf8f970c07bdb5fb755e9d5bacd7996275c4f890173142c39299ce9eeb51d21a32acfc7761d5a2cd7ef + +Msg = 4058b9a8cc15ac148909eb97fa32aafbb6077b168dde91a411dbc973df7db056dc57ff78f0abcb70f70f800bd752197d681f44df4a7817c0e7f60f8f65489ecb6167c14b525e91fd2cc5d8b80ba380a83d031d5827c8b1262c687c90ef0e62723d9b565557f9f6fed0db48f3799274c2cd60a14303406c35802cba6261121296 +d = 0be1d277813e79051ca1611c783d66003ef759b9e104f32298017fb97667b94dcee1ce807dc6b4d62416e65d4120523bf6a4edc +Qx = 1fed0171b5b3c6d9092a6592944680a08a0d4f99f08a3ad1c22b5bbf11c0e4ab3cdae9526b0ca2b1bbd961362faccd5caeb1d37 +Qy = 1ae7d57db848e5c86c31f542f1995c76e916dea9aba882865febca630bc6a10ceb6732bd5f07f51bf2f37ecae7b7fbbca618ae0 +k = 09e3585213c6d6706524e3c8e753a2eb0edced626498eacd842d44a73c602d801a079f94b781ae1ac5d44209e8e3c729ed4e820 +R = 01098d98cf83c705515494cdef8c3f50ea8316d95b3ca5f9a1296f09021de57930184ee4b9f563aebf5fd0d5abc0885cd24c0f2 +S = 0d9706f4474a8fb0c701505516699025fde546a21a3fe519a173a3ac01f683d40b4db2642330bcdfe188693b15a476cd9339ae7 + +Msg = e793237d46e265ab84ba9929b196405faa3b0e4686e8693567e53f68e6991e57677974677682a2510c4c35b1968a90b32c4941af7813775c061c008a60f9f671cf7419c94253d6106b61e65034497f2d273a5058379bd986e3d917f708f0a2bebdba150f6d78a3af9c722a2430ab0f4bad602e91e18aaf258e3785fee78e4502 +d = 073c807bd7e07379782ab790720de4ae5106f16d34e80ed70da5b1594e660c9b775db94066b93e74f855f57d88b6ecc6228aace +Qx = 0301526b630ac3fca5085f633deadec27af353233e6f241772c7fdbfa42e47a04b0d3ae38c04eef2109390a71fa9fda652343cf +Qy = 137eacd97a8449ce83f19a13a248af52e512cfab3e2ce1ceb789874cb08757dd9e47ac21b5c0846498d8d7cd90122c437602d52 +k = 09245ba1873114ee2a3e642c5b15049a3566a2f003cb3d25250028655fba98203feef5f307a9f4c77f232976d83723f2621eaa6 +R = 0c8136d4b998ca0544ca1430abf55601f259aac7756c75d1371de63d1471053c789833c5cc257e323a71f80e21783df4efa169a +S = 0e2ecc6f0a418bee5de7c2418c4ad85d981b18048f94865821de696488ee19291912ae7da1cf5fe9708e2beb18e6cad4e3f7849 + +Msg = ffb8bc80e7619a562d8506eba7658bef0c25ace3dc1d01bdc2ef00933d4fa07b80364e5e5826074edd46a707dbc3b0ab19eec7ea8990839d7fc0a80b70661204c52bcbef57c1a7bdc861c10766033a82dafbead283d911a9502d5f9ef0a39d35ef26f3616212d4bafcd413ffd18b424fe09b48ba02ca5d97ec996205cd49d22e +d = 0a68379b2296a6c944ad5dacb593b302d8ef0b05873ce12bbc371d705f308c739d21f343349524aa72f05341e64f7435daef112 +Qx = 07fa0f698535b011833dac1ac96f3739ecf0c29f7fc1f8bd635f4f98daa70a39310611ef51b2fdc8b37eee3573dc34cd2528d39 +Qy = 0be1a9dc30dabee3403da4f2dac6622e6fb8496e72f3f17c169e7b554efd84ac655e727ae9520feaecc752601d5391270cf0cfc +k = 0630547017103c3f97de48ab6b942db94b2db9ed7dab0391ea9e71c1b788c547abc90088de5b3e36c9ee4280bb454c7c3710999 +R = 0916aac91ad329d6f330cb051941c781b9e59bfbfe45c4d4f6ce0d1aca982e1c612952bcea06784c57c121b14cc0dcca783d0c2 +S = 06a83d93f9bb81c61ac290906d74e2d3b964c39b4e96370f19cfb4a55a3f7901bca3deef4bb79ca6a798fb9b3a9b0137c5a9324 + +Msg = 946bde90a5b903dd281a51d7fa93d80f3fed07eaf50c18fe9fac5acf67326bb18effa3144e25c151efc006a50a274ec6c6a5d573051c4e2d117ceb0fa125acad07a10fb6534a8e5f5b3da2a1136779c51377bf76c3a4a93c0c6158f729f2293e414fcb952c9509f228c804f0adc1daa327a8991d48ccf4f3957c5f8ccbe3ad4a +d = 026046bbb269ddb1ec14ade56175482343a21b7c265026cef3c7d6a1ae0f6a68166b9e6c49a6e733ad2ad64df7137ef230038fb +Qx = 0d09d8118519f9d00df7514d2ff99483473f680b750604580b61017513870a3cf1c403495cba488309e2c084079d53139a36953 +Qy = 0d25e41038c18e4ba6f4e9d14f210b71f27b8ef2c1d4cdd5f63edf8fe11d548d070177e9ddae382fed2b163ff2b58546f10a99a +k = 0d6b0e5d83155a035248ccea95feb0b4d1af818e5ac6d5f41f1a255dd8b482a94de0f4e037b10339d1805dbb6b22af6ba834219 +R = 08059524790304a37f2a0d57bb2b93cec79a827b1fdc9ce2d7dfd4d277e0f71844d335314a30bbec5598a399e197a852b5528dd +S = 0e7870e2a0ed16cf340a04fed4d2048e4e231cb8918345e1852bcd3e30413a2219864851121a34fc98dd99976e2b20cf1d1bf2e + +Msg = 07f3fe1369ebfcbcacd66675bd4ab22edbbff72e68709cb57d4f590e49440f01691f490c58b5117bd24aa2fe2101b59c61c417c918ea08ea34bbb9b8aa17491ae5d9329affe894f42d7586017877fae3ce35bb80c97f92a004380374ec91e151995166e14ac00505fd1fa810cf02981bacbcebf5f81b2e633d3a3db6737890f4 +d = 0bbcda66978ea526f7bd867c3303b625f11b94dd9ee6e2c2f8688ff07f2bba83c662949d47ad47fa882cb7d203a7f0ef5dbc52a +Qx = 04cf5bc624553e833ffbee05ab863e5def062e0d57c28e71d758d6ffd3839504d7ed9d3b1a040bdce8e187ae0b4ca23aa565b01 +Qy = 0fc1a15b4f273737eb92a56928395f6518e05bf946afb65ebca3787f7f8bb3d946dfd26c4831cfd171b4c66c2237409ebf224d9 +k = 0a2cd205d957a20c79699e91684cd22746c476a79245f11e7cdf7e6b74f07cf2fd9eea65eda97e8994aaf51942e15695545abc3 +R = 0aa1da120fc19523e8162e6018e4ee053eb680ebc7e31d00db34f7b177c74c5e6ea344bba3c39ab7ebcd92996a1c156180b7dc9 +S = 071aa4588741208344b323642fe03f1cea73865ba645169df9c84bdbf7488829b83b8da172f1927de1c8cc318ede545c748c782 + +Msg = 3a1cb13438e3bac9ad4ab1d319e90e2c9f118dcf1eb54d6333c674a665d41451f93cd4a9334cd057a44c010edb668254517a63700a31eb0ca474c84873e486f2f8e158a1a7735362ea0cff8ef17d959ffd851b21a91412709b3c729474d2cb40f6ca0e397030eb2611b402916e4b656f0fd868247d80be3ce33d52054b7661f0 +d = 09be3dd3442e0330750f0a6252bf9cb317f32f942ae516a4038dea2c40ca6484fb33611bef016cc64baf166c122e87c15466fd8 +Qx = 0f05a6fdbe6f80c0f5ef3322d8accda4b9ae28c91b6198b888be713afa5e652e907e5ca9aff5fe77b6546115b4c732bbd4010fd +Qy = 00923d07aeb8c947688e7d3dcb16ca69440e2a89539a41b8fbb797523d3b766b46d257b87472f5084992422cebdc4e45556f5e4 +k = 094fe051a13ea8dbc89c4cc5511881a48ef5554de265f0badf8741ae5027eef25c617bb6a3f454a992fc68f5a548903809de09f +R = 0162687730f0ab2f57e348476d1fa4eaf13199ee44f44dad5807bbea4e5ba79e92556f287cacbbf1fdec9a8b78f37e78e52dc1c +S = 01acc734e2d0c81a56ee8c0465661c365edae56228ca43184ea1d7503da3d38e7607b1590f59f5190e5c7264cd0d7a39be71069 + +Msg = e58e7b881a563d54772125b2863718690a5276c93d9e1c5feabbdb5d6f7c7293ff0f89805b53663bb417fdd46874b8e6a466e7e3ff6737930a0662af1d5879b071b0dc4d014778dff26a2eca5992e763bf4c4698c382ac947215aa116515876008a56e5bf547857049c38a2d3737ed3393705fd346897c3beb80caab88e5b8cf +d = 0ed321fa283c662e87eaab99b7715e6cdc9b42e14fa5bbe2c56fdfb381369191a42da7e574839f90a85577485f19446fccaf6cd +Qx = 1bbb34e6bfb1c1335c48e8b44cddd8a46486fad4313581df216002b382db1d58adcae74af0d38445cac2f6cd9e2b439d106f595 +Qy = 084473a5da9f910b4807ec5ff450be353a187af6ace821b18e096c47752b6336dbedfc4b481e356e689fd9c03ffcdbf3e4ea39f +k = 06ae69e55ac1f7b0f844f5ee0b583e652e0e5bbfa4eae85c59eea1485148e34f4d33c9ddd7ac071a28ac0a6191d5ed03e88bb86 +R = 0c3509b6c0356e4a30a82fa7411d1fe17ed190b7eebf9310c44fd568494c894a4f4a1a09e58a4d030d47227e54f7220f3f79f4d +S = 0d44ccff47d9fe82627393c03f882d4b98633961a897381ce8b2cd18f38d69742802d18e6c988a23eb425b294f2c1b84cf42cd1 + +Msg = 8889ea1da1cbed98963941f6ac24f47253ff6af52de920765214f2024aeb04f7ad46936830a8eb04d95aba64ed7cda6ef242f454b67bc2de38a46b6524bd5c96739c4b580e89829a61a8249ec8dc27a50f43b8554cfb6f4fa4ca6875983d4b60a1c6b49f32ddff6fac0cafb64d55c6f594b195c207a9bd920dcf20e0080920bf +d = 0396b805073f3c3b552b1024dcf35559ac44f255b688871a3c6657f727a4b09f3806cbb75d26a00ae1728be632387e804775a8c +Qx = 09957f897a17241eec5b8415ed7ec1bde5df11583255e0a8136d076d72ef377ab3f553d6f56c054332a24098aed6d12878abbd3 +Qy = 1f58eee295765e8a55e388e235e833bc5cdc5d51a1d98e13429bcb7891b25487b7fd8ed804b1856cb6071cc28756bf00924bf1e +k = 021959970a6ad070d1ac518493e309289f3d9d6e2a8933bca715f53cee4ab9000ba2d0147282495e15e63f258dca87a5db7eaca +R = 0d1ca34413341c115f780e647519547602e0361ed4d70402f42d735353696eac6e4024ed2eacf9577252d40c27297e9389d1f7e +S = 08cd5bd43794b32d5bd2ccf7ae4deafffa0e0deb92b1eef9d3ef807d456e459f92e9f10627b7e7574ebe3c2faa858bd3e62e187 + +[B-409,SHA-384] + +Msg = 55053af9370901e38622734a5bc5589f6a20e258627f381fb0c366f3dbe58394e5997e978eb7ebbc530f6e6186f48294149b8594fb551c31c50521a8c4d67e5862921695604afb23977b6a69b21abe75966fdd11bfbdb6b51ab0a474c5fa07c4de7872a3bd81acc417655090558dfcd5af449b3347e61fa9e839bb9457de64c1 +d = 0a8fe323f6736bcabe971c7d964e75dece70cb54561da48a11c40027ebddb23e41c7b48600f569500fe8ea2abebdf480171dde4 +Qx = 020f2dfee967949643b6cb8a3810524044a4b873a4984e9795e4dd7976536a2d748b8cc636ef5c8fc92aba5677c4a0951a33327 +Qy = 0956ec5433d73162c9683558f0dfe8870cfe66575f2c34c765372c7c3bc3b291e95c4e3665e4ec5e72131975f0b1f5f30b0c844 +k = 013f26e13d43ba05e01f92457374fe2ad1ccf94ebf22334447f9360f7f9748bf3665ec3058ff6184fbfdbf7de9e1e2131cd3991 +R = 013c4c290cf89789bd6dc523deffa20c94e92e88a76eebe88457e30cddb066c7a43aadeb0493b264cdae67532db7dadf879d991 +S = 043bb7a8db3d79938beedcd6ce02f375e26ce807a2afd4fc446f372fb09a69fb34734df5dc8f6393f86577a8d29014494379624 + +Msg = c4264330534a6c2bbd8a3b757e0912558302ce302f835ad8c5474993832fd30036fdef40b10ee37293e871db5b0b149654f9e543e22111f9709ef45732125f713c031ccfbc9a2f3aba160c241d27be4dab87ab2fa9a795752ab2daf20f9d06a98d90d01c07133adfe83cb11d5176525e1bba6a9ba70ea48b224d46ddd8103f65 +d = 0105938ba9f25034da3e032dee121bdb192ac2128b50a2ed4bca042e96cfaf4660c9d35f3e67bafd4c99f9447e6dc408e0c4471 +Qx = 0f1a9243920d7cc26741eb828bb55e34c140b0e52837792ed6274a9aa6b5534cdc5c596a1141a746dee380c0d9c2f77094c36ef +Qy = 1393ed8c609751550ffd077347712f3b27a869cfb1b532c5b19c381365ae5dc8fbffcb2182777a17690616d71c66524017d861b +k = 0fc52aa8c590aa28c5353568c9dc69734adfae840f1e0642b57863dc7f4faa37bf3ca789a3d7afb32c57f66a61780e253f50af4 +R = 0c45b1629bbf3273c0e785a28cb8187ef387502ac4438a3372a5c72206a15d7c5ecf9203ecfd7e0ac910b6ceee3be50c6664f81 +S = 0a0c2d31a47ad5f9dc2d42dc36714cdce47666f6e2f05ce0e7136f166647540d1e5fbdc7c9fa0def8962f44f2f8bc9addc10057 + +Msg = 3236f1ad164e1b25d828f5202e3513c80c72a577aa9af56f041fd96cf5a3363f4b827723b1511a2f16360e32eac90ac55f4ee1146791420ef9e2af333c17d157b00e43992ef6f2be2d2f211361e468413dd93fb69232f0a0d110bc5fff361c0410344aa0636bf809062c73a7ac7c142063912b6ad7e1626fd2a384f35faffaad +d = 0ce11677ca818537dbaeb880fc967dc8bead203a2538a55e756679c4a9e7975b9b3e6aba4e6c6eab4152d0c0939027e9b0bd92a +Qx = 023c78eda396efa28c92b120c4ca1e19dc6c467234f9f73701d8966bd0826c20122af5f7c9ad5a5b855b6dc517c22131fb0b5af +Qy = 1ea47619f91ed4a010dd49ece7ec78c5e98297220b4c239ff4a8c29aaec008011acbf7e4f985c02311ca703bf4ce4ba43412ecd +k = 0dae763fced0e498e3efa1c6c412a25774c9bd6cd4bce25ab0a7266705cdd54040ec55bd7e6708e71b09ffe9c19af9a1ed9c878 +R = 0a70694fe5da7646184b23b4b434bca1b754257b8e7fa9994dce4a7a92b7ec8c7f8cc69f18d17915c6bbca24f6621f9563f7c35 +S = 009e6ba97ac2be8537afe7f8f8b9cde8841323b5cc63cf2ed46a7913096ff8d96040296a1bf9aad691b60e1f18233964a421fe1 + +Msg = 6c400ed098d8369dab6fde3553afbbd4d47836d0d12dd16015f15cb8d067a39391c85ca4e78c62b8b72c1592349ff8dc52db8ccb7fd80c085fae456dba6f4a2378e184dd59238c92cf04e40d43a66b342d2a1325a0bab12b1ac857f0564c27b35e6abed02ff5bbbdc3770ddbb2ee0513df48bcba925da6d61583076cd3129603 +d = 05a239ae0f40d76d8d3589f1662b5ca12176a4b2784faa8339b54e96a1e1294433a4d83bf904196f939bd8b33bdb4be340ec703 +Qx = 09d03b7985647027a17c06b30ce9fa1b43d0484195f584fc347f7003802613b524cb5641db3425ab4b3839e12c012853ea83843 +Qy = 0818f5e270baf5a771627b098a6f9ad8a8262e331c299fa0722a0df6ca09bdb9c92d22d72a73567cd5497d06639aa47349df207 +k = 0c22251c73998a3a49b3fc65acf01438941a8885d1c5072a5d41d779af70c044153fed4080151b524af402a4e8ede4448b717d4 +R = 02d3a7ebe5de23e0e601c6e41616bf2a9a7fb6193fef8e3f0a7fb8128a925f7bec3833669d1a304652b7bb1af5186b2f612da1e +S = 0b7bb17155068a8d9b3412d04d407556ee133e1a704ec5da87ed19dfde60517501af345e2e744d35d844f8ac8ad08b13b17c498 + +Msg = 039a149eaef2de30b0ae457b376ce6fbf88afd4cfdec02d3c5e00400d3b0484c1cd6ba74db5de65d6f2fe39871349b30fdf1ef29bcbb9e182eb3ec5629d07d98354a5dfa82d7f0db3dd10d1510c0dce086848a198893ca5ad24a663494f0596b4eee86199ea85e7e8f2f76e7a6bd4a052c54287f61b391f1e52f96b606151c34 +d = 0077390c62ac41aca995640fde0c79c76f4ea8a8dbb22323ed812bee837ab8798c5d0ba976c7aa634d4b1c2c155de2709e7352c +Qx = 1a9357770270c528f2af991c447bed86194d458f693a871ca38f271a9e6a566f5b9ba3ef3d2f9bde959e42934c95867b280e9d1 +Qy = 01f3a0516fed36d3622fae3f44d87c4bc67cee0a995cea242e530451d43781f2ebd163f6f521497fd7a1a6c7b93d33b77083a5c +k = 02555cc113c8516d741b47ca41f53ed07d509845f140dfe7dffbd01a3f751ea9f22e12c939a2ecb1827c0e56b1b1c5459b66aa2 +R = 0e88333875a507520d0b62b35146e37e7ce4e2f2478a61adfcbc6e1aa9fd0195a4960c633d9d6aa9a79323b7ee00ab802768436 +S = 094595255e8862d14980893c095608113737f42b05b561771f56ac1d54eb521bcefeb3928917c07c1bae74cb9aa80dbd34962d0 + +Msg = 08617d04fffd6644c40f7dd57919f7dcf3c888f4147535d12ca658302305bb8e220bb17ccdc480254004b9035b357120580882ef86aa5a061b2850100285b7d61588a664dd4f5394f5478e68a80f610c9204d056009c1c9e902161eda33ef61aa902e96b6f094a9f053135692182943d38b9763055a38739a2a2d133c5dbee89 +d = 08bf23b09fbbed1b55769907aafb97f4759cec98649b2c9da5157517d4f85bb70157076b5e4aaa7a940af042302f8be06a84ab6 +Qx = 0883c31c474333f74ab2b86f3eac865c4b2b54975ce19c5cfd23682d041ef3deaa43c9f9e2c194ccd3add6677de31fc9e07dfad +Qy = 0a5a36b54f4eea6b300491ca22054280b3f09b202b2a6b55df9e3271c763b6d8360a330c16f936d69fa463bc0c4071707c9cf95 +k = 0812c83aa9dc4139f8c3f7c55509f9e10e6cceed30e16afc028b1904b4d260ed0e77acc26e711a7a8e24c75fd780ed893c0bbca +R = 0fce07c6f791a05de29609b59d55b7062e82fb554341b2b2a8187baecb9c95b01ca5dbf8ac88c60babe10af2edf5985b35e10db +S = 02bd026a3e45ac439647a483261107829411c1b4a9ab603c080b92f605cf742754b654981460cf7aa72b5186b59d224dd015314 + +Msg = 34c959f549a307f21b850ae105f41299b8bc94fc292aefc61aefbe0a1bf57576ba8d9b80caac635e4edeb22530163fa9629665fcd43959f68eee32482f1845a78ed7278e6e43d09ed6fedf465001afc0d61f1d2e1d747623e82a762576b879c7024e34f43104593cdd691d53bccaeb8f212dc29bec6bc94cf69d0a8491db124a +d = 0082ad05d19b8e16f80e53a4cccf6869ab5128c5e622ed146fa8555985ccd2aa3b9957dd374586115d4d75b1c01cf98ecfc3646 +Qx = 04428d05366b0a46e6578fc7528d185a3f85da06c4179e9c9055dc0a7fb4afbc53c94954f268e36d2ba8731882bdd27d9684c81 +Qy = 136ba6048ec672601987e9b7402fea24f88c1a94717ed5a83794add0f31680592d6cafdec147dfbc400e73a6ba1d23d4cb0d707 +k = 0c00c897edea7bbfe1913e3da303d64d0d657a83c1eac9c111722b17c65391f2cf67b78219e748ceb269d6c65f01e92e6952979 +R = 0624c5bcfd8e0ef22ee6b34a8b26bc051912cabac102cbf56c364a743e8150195fc55a3fec90a8fabed5eacc1799b565745bfd1 +S = 0cddd4937da8176ddf0de7f52a4babb1f6fccf861533f796a487f35d060ad9ed4435e5a67166782b53c20bc06fd1b36c265c1b0 + +Msg = 514f4de08a6f49edbb6797c9dad6d33bfa367cc1a1b58a5becfe646c7f3352d5c5d95f7456e7112c4ddc746b9076b9756ae3916c07bbe6d3823895774a42d25d44b3309d18bfe7e3ccb1f85dacfec1654778c19e2981a853c1f40a7eafd16d331093110698c957fe9f1d86582706a6885543248b944bb70cdf9d2ea89190cb02 +d = 0af7e581aa4f9be5815f0c447e39de00da9194eee5e5f609668b9b69930b5b48a948614c2250260d1917f0ebcb00ebda4bb52f8 +Qx = 044703e0b49437315a64e397085ea2ba3f2e2c383b168f31a922e5916d590344906bd2a911074b7481aae7f3f8f4807b110f2e1 +Qy = 05a13607a3bb89a2a88e27d5eb5cac4eb498d34e6ea861c80271ed0c73e1fa893adce0c1982b8a8af6a0249796e5276d369c3f7 +k = 08e7fcadc844456f14ce9354b218d519d86c0c5211d62904c937d6fbe8cb16264d7d41d98a15e9f73a636ac3739770738d6b46d +R = 07aebfd1681bd5a2f995ad4a709e8681da742649c0530684fac251494263e98d67247e1e4fc174b409e7e24a7b055500920cc82 +S = 07b83b9b5133aec165316021472307b8b481e6381754a9d0b4f9d683c2ee7cac94ed4d8a72cef61fa1f6349b6c4a54ec38975cf + +Msg = 4e5d16cb1dcaa1abab1e371e1de02f31ef4e0944dfe1fdec45ab64326435b2af9aaf1a6ed8fdf1a6ab1182bb53a844c7cfd66da30aec0d41757f5988ada0017c4ca752597a9fd3637668bc1a92bb1556553f28d66805bb47f1ef91908ce098d452872da9800e77e1fbd43ffb0ed6fe6a62185d4be73ae96c9241b82cefb2da22 +d = 06d14107b08354e6a41d7d7d50c004419db8bdc50db43428df5e86084551237223c498bce71a17e25695bc438c5c09e009c60e2 +Qx = 088c1517355cd417a698b648508fd07a457ac13a49d1bad17dbfbc9735ee58343316e3eca570bca130c753e17a69fe5bd7baff3 +Qy = 1397a697d2113d94daefe6be491ed3edce9449c707a57af3a164d172cafece564d686fe0d25725c2919c60889af4d0354b05117 +k = 0f3bb2dd9eece25c56159f501af8b619a8c279d7ecbc08ee2af6b82ead80375e9c07227b73a10918d8c89d1a2b12cb76427a7b4 +R = 0407b224d8d9c0f11a8e09ac8d654dc6e1119e2c2804510a84ec61f9017899f9613e37d8166e0fcaae16c3cc11e9f739968c687 +S = 08c2bd7d02c4c537a308fa40db786ec64fbc2dd4c142b18cf9bcad66199afd4f44cbf221adb3837e84173d174e9c0d534720ad3 + +Msg = e29e75269754ec1194270f5c9e8267dfdd8c696008b5ebc92bb840981fd065672f07f6a0f1b19841adfc51b478371e1a0db9c3346a9f0a4ccbdecb7040191a00ddfd0a8faa0e69fcf544319c0155d02797eeef99fabbc55078f9d852927c23fd931685424249b87ed0c70a4a3e2d3b9a2f92830e7d8f7650c0bffa8f8986b7d5 +d = 099d96d2dc9c79549f031bd5346cf6a8544c312a3fbfc560dc8e378efdfe025b0e6e61e09c04c8bf4133396f993b0906c33dd30 +Qx = 0883e00d72c60f22ab085a90901ba3e8a510f19c3d62dcb3ee5066e0be094cceb30bfbed7068d0bfdf634a53e2fd002dc9e454d +Qy = 194baa5d7ae2399965fc4009ea83273676e66a56fd35a5939c26ccaf85633adf78b33dbed6da305979077418c625354c7fb6283 +k = 0c213540a452c4f2ef275dd844402dd5ea590f7df41ad35523edff09b7fbb096f8ae8a4baee95428fee03a9e6f6a14ceb90e289 +R = 071779b477245007ba1ef5f05446c4a08d1c2eab550db9c053e4588c9935f07ba87764f0fce14d4a7b982ebba89cb056aad8cec +S = 08174bb56cc85ebe7bca1de1f44cf93cf478d7fe59001c5947c66b837bd3a6d116f99dc4f9acb4f378b0321228518e1ba0057e2 + +Msg = 1a538eb447c18494ad5a5ad27be67fa60eb2c5cb2404eec1dbd7244cd802b17ca5497e779d5f779b981b165dab53ad19fd7bf2ea7dbb9b4baea782a43d758202f147e59d6b6b8ed54f4ea084bc18519943f6894d603e253ba3e8e339a6933bc3a0a47126087038e1c813c3f2997aae321b7c95a802b4b73fc7db95897b7c91e3 +d = 049f347dfd361a65910e97fcefbf60013a54837f2ae657d65e02397f59dc6bca27704fed3affdc3d833fdc621cc5e5f99b92a63 +Qx = 17942b58d42da750a366d7e4cf4cf465c856cd911e5352b50bc8a12704c1ac6ad54f9465e4fc5402b373d8bd4e4f8519341f133 +Qy = 10abcea49c66730ddad7734eb1311b2626b75ebbb299a28c9d60937e6833a9b3dda052379fbcf7875f18680924274fa1764158c +k = 0134c70f031648bf470ccca4ec19c837051bf700c851df564ef3ceb99d7d41439293bcea0c656c0e5361db92a03def51d7e4f26 +R = 06c0f9935abc5034a8b0a05e8d04de699b5916cb367e834f13642f0003510bfb68714be75c9e35b5e593eba45fe151d1df56d40 +S = 0930baf426b33eb4afbed64869a22712591db11acee7c4d3a221a1e98048f05900fe14816006854cb90631de5797f91176fdcd7 + +Msg = 7502c755bbd385079a4001b8cd653287dc3054f3b57de19d0ff8f63c0308c64c56f035117a8971d43654f89b52e923947e4760ac72be073136da70c5ad7ca1658cc0a2d2a880d3a0c0fe636fdb27b77ff260c4c1ef8a18da8e9fd777d732a37ae9906e6c4f381f0a3d941048d5a1f6f2cb8593873fa4bb1621a44bc2bebfbcd1 +d = 0dd226de602af4e9f8e25784bd1bbd4cadb0a8aef525d5e2d57b9f3555feb698765672c5099a7d6dd5faaded69d8d68b4804f26 +Qx = 07ee34cc7a24e2e693f9409f52796427ed86fa71bf88c923db305ebd5a83bf3b6f7612847f16d00f4a25614299a2df92bb693c3 +Qy = 1f63f177b54f8dd5c907ff318b66c2bfc1cee09348c035a4413fa3cf5acde0db1c8af4fb8deaaf8a3a6f8f06b0acfd20c6f0049 +k = 0e19c21b05c82dd8c873e5f30c1e3aa9348327f959a4dbd9c741e233c649a426cf7bd9d8e93232e496d0b93ce835f80fbcfdb2d +R = 042a3907a480329a6169b439a6945cdbe8e4572779c43fa6cd1f15062559dae9eda2712402ccbdf03d88a8a68b691f1f16f8f52 +S = 0d09fa4966d171a662a9ba6827fda830b5404f96f635edd8482ee009ec5c7b64a2a6c17793993610ae8297efa9fe4c35ceb5001 + +Msg = 95eca932d03f1df2e8bc90a27b9a1846963437cdafc49116ccf52e71e5a434cdb0aad5eccb2b692ca76e94f43a9f11fa2bdf94fe74af5c40e6bfd067a719523eea6b4e65730365ee498ac84c46e1588b9b954f1c218920cbf71b167fc977ee2a89429590f43bf637eecd91b0ce3be2d66bac5847205f76c06b914a970f543e59 +d = 0b6fdbc9c8c76cb2b822a940d8675889ca6f5132429da795462381ce29313a23bc132976fbeb346ed4c691e651028f873ce7971 +Qx = 147647d267afb4bdadf54baa3f5131e79dae8103f5b2ddf70e4652f9fc5495123be97215b811554241c53023a247936053288bd +Qy = 15205cd5bf0c5154b2dad8367e1b487689b898acbbf44f9ed67a37babbec739804dfe737b324ad663cd2cad79274344397099e7 +k = 07321d12d616dd2ee5f843d6ed7e92d18968b3a76c0e4ccc167790afabad1b7c0dd53d82aacac93d98679b203bad88d5ef0cd75 +R = 0672c5607acc646c67456ee77f2c02117cabd241f728ace5117626bdf91662323e7565438f46a3e25c048a8e2130e27fa1fa2d3 +S = 064aaebf9f2fcbc843ae1128eb6c7e7d1fce2b9901dae0f60afbcb08c7f2ea1b550e159947deb87dd8959921846e2923880db6c + +Msg = 8ff68cb00d03e730dddb05fe0b2344689529096c3da6eeecaf097f22c7fa340593106b1f6726f06b7ce7358edbcf801ead959438a42f94cdb467b3cd5b17fbbcf75739805f9eadc869c33c604cc58f81591b0b8bf4d42bd53a801f0f829a31af6c129fb4f20f1250f959754eff8c629b85a716b6a18465b6495798c0c5166c8c +d = 0203d77fac64591eb9a18de20a9d5eacaa1c3ec58a5ecdb3008c2d642e197141d16b3a9fdffe61429264f5b420f5e9926659a4c +Qx = 00f66ca09d15d0991b48ce7afde9a148565b73807e435ae0f16c14cd439454745f8ae153786d7c40cce3f43a8aa4f0564cdcbc3 +Qy = 00f4c919b7a97beba2559a8ad0f85dee40e8df28e23732d7de655262209a5170f94791e255e77e8c8cd64c8c9900092e0ff9d5c +k = 0859bc752300d4ba5014e302aa4cd2a979b3097dcfde5c59f4bafc5bc8a99411174d2ef3f7377df5a09269e3d9461be61801942 +R = 0691ea76acbd5e8137924bee13326ceac8231688af8595718e210bb857d6619c152e1fb46e03fa83bd6b5d81e2463f9260407eb +S = 054df52eb86c679d8f8514a09f5a3062d2424cdc19fbf6927f744aaa8c444223f1c28ddc84b1d135a886eb7ac7eab3c7b0a42e7 + +Msg = 01451c4f09720cd53377a5ed04c907a735477378ed960235a833049d6bad6e6e89958b4c4249bf0f6d4f043530c9e5426deb0ec3a12b7feb4860757b41bf602ca95655155356ec35a2db8e2657998f56529be4b714364f83a140846308a2973907ed7b08e935173ebbce5e29afe1444cd51c92824ede960056439555e7e74450 +d = 057a2e6a59d4871c3d547690237dd9846d6d5dc4ec0678aafc9c8669af8a641eed67bfea4b05fd6b3b5357ec4d0caf352691ea4 +Qx = 0351aaee4207bdac826ba17e3b08dd7f94c0c8ba0d9829d7bf0eeee7e6375458b5457bd787f0ff38564734b3a0412bbddd7c371 +Qy = 0e09c4dfbc33d61d69b5a8517baf5e4e1614920cbdd89bb05f0420be757253fb92308dfe1de8db822f57b67b393d8a70d989b26 +k = 0fbe560003dc220e4c966b21c874b828874a33a93bb69c49909376df67e5df1652fd91a1d73c7733f26c121e7a3b2d1246c9a61 +R = 08b85cf3a14fdfc69cd42750baf362286940994479f6ed7ce1d87af12c5ae075b311754f1d37d8ed10bea092bd3d9f7afd2f1e2 +S = 02360bc1f7a98cc87ee2a4feadb98554cce59aa0fbfc087747c7253e54c38815cf91c8517f5692f95bc7c3a713fb6ac43a34f7d + +[B-409,SHA-512] + +Msg = ccd494ca005ad706db03a3df6d5c6e876ef859ec77a54de11fe20d104377df1900b6b192126c598944d19a2364b2ae87ad7fd32265d59e1f22be5833f20767793677b628f18e9619f8ca32f3af3b41c31e87a98d1527e5e781bff33c1a8be3a82ea503e76afec5768d7f7dd1f17dc98a9e7f92fd8c96fca0db518bd143d82e6d +d = 00a3da7a6633608fcee9ce4253bbcec08d41ee6b00178ceb017de74e24d48fd89107c9f2db3556063abe3cb011938f4b4871795 +Qx = 0a6123b122d7d0d766897b15ba6b18b3a975d3d8058c9d359c6c6594cc0dc07d9ef6033224b4aed63d319cc2747c0660e38897b +Qy = 1ab5fad5e78f380aeffca8d15e60731720184ed456800967b2ca47d482957d38409ca07ea798bd892b529774e44080eb8510e6a +k = 0da042642b3117f30ea5f4b354047b164bd128696b8c00cc6fcc767246daf7483284e411009e05218246830940178cb4ebabf1b +R = 0e4ce613e6976e9e1c30c0c93214a0a37f0632de85eaa25464b69a251d592560b2039fc59b15ed7045c29c268693d7c9e06d8ce +S = 0ff3ad5ca70aac94facd842fecdf6a28afbceab80b549507954b7dea6da06d1facd11e0a88e9c2a549e6971a08d1af75aba8363 + +Msg = 5719e50d939a8d74efb444eb5a77cda48cbb59e7f976cdb2ea2848bfc558718b39ce27b893c229db94bf77992222d1746f8f52f858f85124a28193ae0da039c53d484681785f3367f6516fbb8a86560aea9e3428551facc98cdb1e9df8e2f37db823a7abc589f667b5c93c4c47061400220a2014197d514217fc252cef5a2433 +d = 0384723c8b4a316b450d1fce0b2645912b8acaeb3cad50860cca43bdc0206ed5b3b60ebdc29b3eda305d0d60eeaec261edc24d5 +Qx = 0fb89d87ca4282ccd048606e4d321e7ca73244b4d0c9d3df87d54e038a14939138bff33c81a9ddd64abdfd698bf103e45c96f97 +Qy = 04ff7e1706688a53a5544f4ed0f3f5e1f0fbd6f21174166d25a690f260766646cc6fb39020de9327199225e44f3d95c5984fda9 +k = 03a9f5f26eac81dc8ca0a17acc44322d43bfd18edcbafe24113f5e5fad0ef0a3db75ad1b2422c7321593e41e76eb2a767a14268 +R = 0c311000c27539247059e4a8d789ed4db93fbaea021272a90045bf6fdd70f4f32cd1e195b99ee6f03f4fb57c3a115ffeb459af1 +S = 00db8bb46fe0f99b4e6e1394a5db283e310b24d6006319986dd2c4cc169c775c89d4ad98d0fdbc3c0bef6b7fb6b43ef21049bd8 + +Msg = c84e5702a339259a61b5ba8ec1957f23ffc4f1eeef3a58f383d3731bbaabfcf49ce2ebb597960ac5115a2af1c62b193d4ab6c24433d5f168a1752e40145f19aeb6dee889a53a4fadd13eef60e28fcc7ed6a9b8b0ca286c1b3d66a4b2c327a629d15c148049e3a0ccdccf05cf22c31956014595e417060627c8125bd7c00f8850 +d = 0bd3136647572fef3de51b12e64b36460bd3a27dc660c164fc705417339cab21f9e1f9be0f3da926df459c5ba58b701d306e67a +Qx = 0f45e18834d1933a2a26e95467b6db85d8c3da372e607907798745cd9847bb8f8b51f996c7293b51550144f227933ba26722685 +Qy = 05d8b108eb3591b164745d116c80afdd4870187061c75af9b0c3e87dc8262586af14f4d6b1504d274c07c8e89247196d8ce8166 +k = 047a494645b99a3469369b72cc918708ebf453957b49ac4e209f2edd7a4861d014543754e37e1d1a0f477951a0ac2b5826a470a +R = 09de9e0147e1a268f80836d7db43779ce12e7947caa851d109273ba7e7dc7fc52c601f5bf69cffd5adf0695cd7db8de2a64781f +S = 0561aa76e1e9f2c1d4aaf6e2da143f67166f09199e1705b631d650528e94d643768cd611467284a9f543e50520e3e738e5d56b9 + +Msg = c90bf11d04a708e64b6f94d4cca64b92463eae878c377b188c82c1c5f05a038be20eca2e18034d46f00d9a6fc73c4084981748ee9d2915d87aee4e2321f4f9e11c176f01281913e324700d9cb474b7134fcc408fb4a7006acd9e63d4578ed4c2729d8e0d01b1e6174a43a024ad261eb644ae98979c3cdab75af357f6dbdf5db1 +d = 0495be0b0a9d357f6155fac008cec90442200bb842d89292fde38b7256e4117284a60249b3101b3f19f778b680c0d1d7422b84a +Qx = 11119cd910d4e962f54c9776c9180e7eac2f71cb9748ace4b7dfd2d2b3caef4964c7a55caa9763e008de600b727068eda9b9865 +Qy = 000b48246cfb7c86e9dff4ba77a3a53dbb1cefa168026b8929c42c3b0251fee5746897916e50f07dfe8b57baab7964447a2fea9 +k = 0ad4ab5ecb84118c33a4b06d1a9f5d2c4f1f3dd1cf71af596eea771f851d0371d2d72593c926d7b69b39cdf72931f6bb11d10cb +R = 0e959201622673d81ca16ed94e9e5be3f38bb8db48f9c09a585aa31ff39f14128d79d604a5f93c80aa961c85bbf99e276937f4d +S = 083099697856c780936ac01aea5e3a4d9b6e183639cd200464a5cc05232df30ff5220dce4e2af714c580d561b72dc4969166a6a + +Msg = e9b2a33906a1079280100039787377c2971c378b92e70a38ab41dc23979d6fb0c41e53a21b37632407adac6f212341cf6af8605b4978c85c9c16960e1674247f1795cd73b99ff28cdca024f5078490513c77114c2f52288f5376872c331151d7b2c08f7794f2c1f9e0d849d32d73636f0aa899988ca561a76f74543b37cbf3a3 +d = 079626354dfc4eeeb51fcf232ee9e6b0130c9bd40f15ed45606bb7faeca8f359e0c3e18bf12769254522fd4077eb24bd5454871 +Qx = 07ad047bb38bde6ae2593e1e41c36b7efbce1e0ad08def9b23d25b7ea9aa336eaf10217df16d32ada4af03dc193d44e6c77e677 +Qy = 0d2b9466ecf321605b9f4f9528124108007203ac32cfdc7cb87e1790ebf4bae497fb87011e0a81068e66a840d29583bb970e24c +k = 0074548d1a3df580e45babda6096f4c78cd70945ff190d9da463fbb03a511c45d45dd1c46dc0b9521579fb506bf015f8b835680 +R = 09e04e9ffc2cafdefb600cf61e803eb78cb416304210165fa7c93c1bfefb02cd4a255512622d524141de02c2cbd193991dcef67 +S = 01a7960232455f27768acd825b8ef91d4efacc38684d05a900a8512682ce19787033cd08c1f2412b481b88ad02dacc0ddaa0ec2 + +Msg = 672db3fb8cc8e5f831be700498d3ab3aef14b7548e8011b21351215fb6dfa09460d18f52c02c8815baf396d856a429bb9afd602a10c213af34db80447f4c06ab4bd28873c88eb9639b199042d4b2cb13cc364f734fd4ab7bebede7dd4da63decc0cc1f84e34d760013f66d71641073f16c08078880b67230f2d6c6bfe17d206b +d = 0ab42bc7d0e3c23f8bcf928e25f9f027b56f270398a1d37bea0ee5426b944a9c9ba6d0d7796899543feedb470f70b2ab148234f +Qx = 1415fe81100f208ec8afd5e882e5773a0c1d46e44627732900c7e1722cd77b3ae24438a8463bf571fd6bb422d7c583439c07cff +Qy = 19c3ef3688ed397640e873dcb20cee9755437d0023646d05612e8c360717a2e80e80f2b85860d71f9876f3a68548da7099f601d +k = 08b44ec25214602de46046b2c94a45f64e9d0903f6148dfedb76a80b8e6314e87bf7dce8e73b14bb274a88fa39136a00537779b +R = 00ec4c5bc88a959a1234413026700bf5d4287a0263fe75daa16693bf74cb5071a64eb18778da0a31210347aaa33130602f6b597 +S = 0b6c29b9177e89880f3eee3aff204b866020b3bf77d7c31204af383d9770804660711a8579a3f1ffe325f225fc7e7894ecc601f + +Msg = d7fd06b89226cfd66671ce5b4b656228c52d986afa7f6f30161680eb0c9cca177992a8a8c40167a64165c518c55f678702125709361b536bd928567c97737bd750d0e2e6e0c00296a6ca565f7c05cc8c54ae7a4e0c334c6a968fc18a959c18ebbd924457701316a4e999fb11084520dac68dc2d69187134c40891af0355ba89b +d = 07f7aa2216164ba689459ee5d5ca29e70ef75a5b2a4416ab588df1dcb9164330c0b405a9d80c3acc41c19f58e24e17ecbc0fa7b +Qx = 1decae837c7258ea9d90314ac87c57aa6d49828787054cc068edc1955245271acae72dce5c9cba422bee54f22e11810721c1ed5 +Qy = 024cdc9e1b27e5d4bd024654df000bc9a0181f7c0f4a90572c75e16b679f4362446993f9920e2244527801e8f6b1e9398bd8382 +k = 0463202dff25e6b9c633b60a3edcffc1a22031cff44dc1b0a5769214693ba02038fe5dcfb4a48db7ec49b33068061616daf2fa9 +R = 08c06b72b73dc2655645892447fc0c0f8055838b194e8fad99fc6bd50774e1ed08313eba4141018af33af95a3faa20b69bcc0bb +S = 0958f104326df6008135bfbaf5c2980cba2833af1b4f04b5918bb51ab0a0df637d6a4af902a5e07db3022c134c72315f25972c2 + +Msg = 83b7e9d3ec638fef51d2885fff5490c94e2509c126608f82660e5fc523032f3e85d69d9b76af145f6bd916dda35775abbb6d1902bf38880f8b9259822055c5b1bc726c51029972cf7474cf2a812f3251aa71813476bff55598d079f075a40c6c41498bd865ce960c518bef75a873b9d010965f342dc4b35ef5c5972efe6fdd18 +d = 021d84f070c6823a70f1a74225a472118c93ce9dc509aa6064051ca4574939dcfa96be862069424bdf1a23f62f2868326422e64 +Qx = 0f568f018b0dc4400bca3e9e4b0e5bd5245f15dc7acbcf4360b0be2ea5abbb87a3cd76aa653d32858438051cbefbcc4feee6f6b +Qy = 1fdf1e1bd7a2d3825df14f8bf8d5de825095663c3014f2eeedb9bed3c3416d56f805b623f40b847090d6b4b3bd5abc98ea55e48 +k = 03344dc1cd950a9c3d039b6fb6af8c5745395d2a3343d86dc6670580e331d59f6c0034367a6df52423a625d70292893961ceddc +R = 0fb010ba41d651fcc854762fa1437262eadfcabb95b9502a40b50f20cb34fa19ec570dad2e0521809ecdb2bff3f4e7055c02bec +S = 05a9c2dc0c1f946ce33f2f434c156c236b09098365a7f31e238b4685e7cd8c86a0b2455e5c83907167c1324bbb37e66e0b2768d + +Msg = c62c7bcc860f0e175128e1127dacf935ce62ae794cc4a0ce7966bceb023ac0498641d7281fbc86f9ef470bbc77f608f83f8d0dd6299cf08f2cdacc7a9642e4246df131820220e5c05d0dbfceda7f16b86add4793e9b6244d96b5c07cfa23574ceb43e8e8b5483192a92b301aa3b37702b8f94f0129d8af1617896b34990c9b02 +d = 0b6645344d17528968c719091b6e2072388881dc10bdb4c7fbf41906cadf3699b30f9c1dbfb4796d009480664e6276c0359e5db +Qx = 0b164b075b80fc8b8ec785d5c2ef84d49f2f4d276546c9cf2e17ea4d367828e9aaab985c5cd0882204e293dba0359d47d9bdc05 +Qy = 0a0c61f181d5d06ff20d0c41cf6d6cf7fea860075cdcbbab2efa0950e2276dafd4258a39c0fe4c45f3c04f76efa7d41392b4d34 +k = 0c497c621c5cd230fb1e4a4cb3af1cc9d8edf4af5c4af7f15c4ad0a8835b54de52d83bdb3433808a67628912a85c5d00aa222c9 +R = 00b22e5773aca4d97d2da846c3947bf9cf2474101a6f0d39d31629a6aa2a4c3a77076a671e37aeb4cee0a94e82e914c8c553e04 +S = 06ccd79ab93e344e6f112c1e4a39e8505a2aaf5cf85595cadc6ddd1afb0b1583d9334cf1c48f26e5baa38e05b6b52f9f12c141f + +Msg = b5bf38fd9e822925254418475a1ce762a94e336f12b156b1625a4574fee11ee472d537ef94b4a4b1c0a73b0140d0b818cd06636653e6c07f0f100118242a7703756f1cb1119b3477c4ced99cf45e07e83b7f2749c1a5f8d8c9272d221fe17f7c6a5fb0f8a16af46f232ce406aaf565c6b2766a2f6528c82e74fa1c0a7fcfd49e +d = 0f8c2f770cf5f8e1f900e996ecdcd84fcff5cd959777fd005d721a419123221a3237e39834b270d37752470deaa6cea023c5058 +Qx = 1f861984fa06f15b801216a1c33672cff43740f0f736b4f4abed5656a1bee33a2aec431680942f2b0b0dce9a9196b49263fe183 +Qy = 18633f4e057bb6d70a434f919b9ce4b7d9e61fbf46c1d9638100d77881755fe9829a69d696d555b1a26e25ac1a1c27b40f909a2 +k = 0bdd99022dd964306955c57b226aef036527eca481622618fa7395f53e60aa95a275f1f2d6e7354d8b55d3e83c85819e818199d +R = 02f1330f41a86c09205004215c24f42fe582da189906fb23fbcc52136fcb4970a33b896113eeabcec8151cf3b150eaf1ec2dd88 +S = 0439507edbd36ebe4fa5df34d220c1441e1a4175c9b0373fc85669facebb5bda7a4b415c269a7add207b461525c6cc94b7f7b22 + +Msg = 6d3474770933ec01b76be789304b6fda423b12a0ae8c87a5ea8d7ee9f71300f39440e1c7f5aa4b47c1a8628cfc3a490b15ef292a741344f40a8fcdd02cf3863bf3e32d53031f503703deab17fc52b3d4032f4e237dcc27231b85d3fd60b49ed7ee40c3344948d87c3f47564d20a11d50e4e520bd16c8701694fc70901a5da625 +d = 0144adae951fe897d5812ee4a16c0be4c86c5e57e615c398f5768a1223a9be20fa82ceccf8a16a31432bbfd17e594a4cd8a6a07 +Qx = 0bce072255f7cbaf565f82db122e9c582ffcfbefadab6d79680b2506792028b200ca7732a98322c290916c66c8a8ef77df6a2e5 +Qy = 1b4b6f65e678223bdbe5f8ecb68573ae3d7f111dac37d4fe3c0eb768c461187fc5859b13452381fe676257aa445bc7f38b4919d +k = 0128c12479b7f0630374880b214aa26e4e8626deca57148a6c6a0e37a97e89da8acbadbbfe7db28a0c5bd17303e1342af711f25 +R = 0a95124ec95e35747fb568e6659ff31867a4cb7c00985b36584201d1bac0775653e0a8b54cd9a9067ab3de434bc2cdf29ae287b +S = 0257e5410a6f0bd94fb3b5b10500fb45b501a3734f0c718035a9a1516d2f88e10d1e38b70c791028e262e0c3128cb84e6064ea3 + +Msg = 92ba7aaf71f625f7a2e024058dc8739da3567c306da4a812ed9e1542b7d1e982c16082166a59720203f4524c3bd463a662c26a82ec7b4376545206e650eed0d3dd7909dfe3810981393070d15c45dc4a75a8c5bdeba533cad1ec34fd20466a61e4cde3b25af9a80a9a54afdd7de1cf2a74ba32d4ea0082a037775413c61a8d1f +d = 0a51f065fb32c55bf4ff6f18ba9d488d35d9f8da593adb0ab1632533284e0adc43ccdbda9d9507b9862ac63b5ae7b0f78b479bb +Qx = 080e2f7ef17a11ae66172cf1c18eab12aca4c2ae06b8106aa1066677a93538e3dca0626e836249eb884a382c3b726736565c3c3 +Qy = 1e98d37a17ea736ae58eab093fa7dce3f10791ee9ef5ec00bfb27bf3c705dd633badc94642c385dcc276f9b1fd5e01dd76ce944 +k = 0d5cf7b3d28459db8dd69c314f6464f770c31f239a12656368c84c64693f23733661081d20dca9bec9c9659a8124b57a71ffd55 +R = 072ba8c1b4bfeca62e96a5649e851e9a311d7685603a11c1c299f5ed8605adaf27cae656cd31335a7ae363cbae5dc7a39512c1b +S = 01bb9819d25a211548461de4ff973ffbf475230baa161558d9cb7ee6f2e682dad21a465fc2ae058121224f8680296d30e3692cc + +Msg = b3fb9e48c333201324755a81f3ae5d4f0e2ae7cd24238fcc66d858e3aeb1ee03328660d6399676eb1b7d8285ba571e214d935bb45516fccfab57b8eb4c3d5f1d7357c768eb7b5e7b5710f599614bd4e92706eaba31f8a5e7e57af7ed13066af50b4540ccdc126b677789920cef8543907f0ba9dc92aae343d3425bd784ef483d +d = 095351c0bc07acfabe6477fe85f97eab520dc96bdd58b44b036328ceadaa56a1904d2217c5fd25155ff2aaf9005a3e2687fec81 +Qx = 1c1311230cfdf5824323448c68ead5e5885ba540a21ff90b951f85d84d78e26da035bfd99341b5901e1ebb18648a8dbb996fc9d +Qy = 017a037929496e560cd1c936d9eb15f79fbff737201dd880a69dfec31209faf5bd2846e3e664c668ad3d6500c5ed620f1bcc970 +k = 02234bafb54cad0d0d51f4b8508dbc8d014c303d90d21bc3f749ed7acc42f0335c5ab6d60002d3bb57cf07018e9c13b92c0a39f +R = 04d0609f06320d69870a3e66f19cd46a2e0e3e13fb8b7785163a7b567bf2c0f437b4e30cc67da288a3b34ce3110f6d87affe0f5 +S = 06c46d0248f7c309c1e5b80ac4b1459bf897e42f8f037031f5bbce0fde50af50cfdc4f60d5ad3d1af152298cfe77dcab287874d + +Msg = 9ec5f7d65082264b8a50be772c44277a73ed19199eb275fe5976f9799d8629fcb4a59a8d55074cd2eb2a0e02062d3f7cdeb05e62931a24fd1aaf14c257944d1b42eebd52726d6fe281211b39038e52baae077ea4df89675d860d6ba5a0f998d049614201b872e134367acc90066ac602e478ac3e43c3ddf4b0ca0aac1a68591a +d = 050245c1682344fef23bd549ac8d1e8e44b2840c43eec1cecd33daa4e9ef6b53f496104d7432e14248682cfd6f5b4853b65adac +Qx = 0d2f8fe524b2108e375c9603598b555d6c4c7724c7d11039178037b3a4dc82b66c3aeffcccd89cc34dc2b2f6695892323bdd805 +Qy = 1f98df95fc1837ec4d5239cf55e97d6b489b0a8d7bf12c1ccf95f689ad23e46dcf20dbb531f5179e754f0c29c8757a1dc67493b +k = 0c683f98253406c6587d87c57991fe5caa3f43b451875859feeb81176b732f1c1eed0ee44d1905d41922878617e03dac53562a7 +R = 00cdc9bc7d670a1b6794fd7da82d2ad1a0e92b82ae32656ddec3aca4de75f407f20fe782daa0004317fa3f12cefc48518298d5d +S = 03ee7c75810c2c05946b53e2f24feaa697af35174402c069b9fb03d89d73964c997eca4a5d6f9482cb23c8ce337a374ffc3e186 + +Msg = 61d657bf472676301503f6784b7286fb39fb4186bb88abf1edacb4a2693d0a1e2b77bbf2758c84f2cbfd1753e20841b1cd4b456400d53f4d686e666943f9b6ffcdb77f510be97536e9698fc84ae347d483bc8984548d1cf86b9b40d360f9c0dc5bd1c55868e26fce1460ba94ef5e94eb63c9f0776a0f446c0cfd4106d9f36352 +d = 08d3b0277f0e9fe54581d3a9499ccd7f015c08339591326859af969d2a26284e3b3beac4a0b74d324ce5cb5f38c7995e4e3a41f +Qx = 0ae18564ac04b54769e17df84aa54903df58decb870591dad73dbd712693d901f3f9ad43a71f23b77705de2b4ec1c3bc616356f +Qy = 19810f92e80560979ac6e72bee505dcdef15b4146185d2f8f5a955a4555523d982c34bbfc1326024410dbad3349e4c4e01c242d +k = 0e52dea77fc59298cb06fb1401d11c662a04500f0470965c4cfaded13b339bde52f4fa04c76a955faac16784f443b1ad9dfa0bc +R = 00c917d487d2aae1651d76147de2a706a01c8b3d223afde7d20c9dd77cc2329bd3e0e4fc01255b7c4ed1baae7d26667bc2e9ec6 +S = 0058c766fd514a405de91a4b9e99fc0b0146d954dc2e2decc2f3f066d0fe192832ad37a940949ca4e9abae0602248b3b56100ce + + +[B-571,SHA-224] + +Msg = 8e14f713a2c427b1f79491033994f76acbead614d12e73ac6f3f518f2052a10c1273aabe628ab38e0d3d5f8ff254802e9f44a51367bf80325b6fc39d907a37f731372864747b10749ea5cb3d3a83da39c21a7b02885a8c1770e4397cedc958e4baa21d5007569dc9dd1e45d2181709d900a394454090badbd0cd9c2cd2369aad +d = 0f42afce7f7b3d45f3f925ab29fc3882a89c9f585177887584703cf8bd8fc572e677adfa55b402446fe1e90dc855358d92c3267c35be9674b40c2ad5ce8dbe6a533c44b0ad8d2b2 +Qx = 63dbcfc2d9171a7cc1835c1f56ecadcb59aa6d5852fde264ab25603f06817a20f2787446445be8b2ba05c70fa25d9b9e34d5374febffeb536facd3da52d43d69fa7af4d4792c792 +Qy = 7686e0629de47916af19f9013f65fa3b5f9d196916cab2f765aff31adb5a959515e83fe3e00e91843c532041ba15f047e978bf2fc69627bb5cd7f3ecd74cdf1a8d623c1efd23fc0 +k = 3fae665eb7a54f51c522ad5721d9e2648f13f3d84e3d64c8148d59c662872b5cb7d911c27bf45884f2ef717d72bd0569d9901f2308d9a68d128c042effea148cc963a8252f1426e +R = 1df705ef13ce900ed61babed02e121dacd55a881ae32bd4f834fa8e362d059223b29ff3db835fa2b2db8fdb98c21dda5ef744cf24d0a798f501afa3a720a238ebd4fe3976a179b8 +S = 1b1e98db422fd48f1dfa049f38865f8bf9ec5618fdbfb50f21cc838051a1493e4b1e4f9ea81156481e5fd84124fbab740421173862c63920e3a833aebf0762e7b5b39a1591d27c8 + +Msg = 38b60d27ff08fb191811036dbfd5b39e1cc3427ff70efb67c851e9cb407f9fac6f348d289df98d055eec73299fcac068bd0fd9ffa3c5d244659e4f714a58d79f6727f323a7ee26369000e90e34e106f99f5ae2ae1b64ee89e5a1d304ef20c071a7773e9b977ed3d49f467d300a881c8371041394910f9c366942449045568f01 +d = 2f36613043cbf53ad36e2b38998bb867503359ae082d07d040e5a10a43e06ba9c91e7c73308e41e2391b65e634f83b162cbdf4e7a44ad818fb93a978af00f06be06731d8c5886c6 +Qx = 0fe1afd356670e1dc6bc195f9513f1dc6b03017416b5252c7b56153da538422e557d9918298ba6c78283efa0288c0ac61298846a6f8adf74df21747cbe7c18a2b825a330e843cd8 +Qy = 18b7659f0a7e8e7ae5d636ea4d1d5f3a1f846d4bf3dfbd96c6ae874354db6faedf02f75c4d1d8bd6a3b61e70ce58e38ea5de8cc16828f87a0667614f6640a3023b7f4aa93fba577 +k = 3fe351ff6ddf50752f7dfd8e5a72c9faad77dbea303fd97dc939eaad3aa7fed466fc8939a7a6bb7abee63455284a5338e59dc067236dd699bdeeae1424d993a9c76fb2fe9595423 +R = 04a0e13a9fde9f2fef417199f8584d0f60b2f04aa6b7524cd2a2826d63043b2188ca977c9567fc1ff292ed480dabc01589db8734c15aadb4ff54a552a7d9e66829fec1dc919dae6 +S = 01bc7d2c4ca9300d7a3001755ef25231d2852a7b9a3e91baf21f2a2bd2ff305be8a9de1d1bcd7bd9eac4ce12ecf8a91c0a409726085382fb8d2428adf1b42b37b50c9e8e0535d7e + +Msg = 21709eeaf9e1953822294a478dfacfb205fc25f447a73a76a32601c00784cbf2f9ebd41c22721d70cdb3842dcaff4a4f208d41c0816990e421cc4b8538ac2f347cdd0aa2a39f1aa26ace8cb6a606b23f6244894d4594a0f6a5b8f6a695fd66e1a41e2eb6a377017177fec56bb58c837e311cd04c5b50575faee32606b9636ec1 +d = 2e74948c46930cbcd9dbe2325539c7dfdd910f309fd610e6599d425aad9ae230a8d4681970a14f2a71fd08030d0a40ff40dade7de1b06a80441bbf7e2fcf1809cff39c7ef88bf9f +Qx = 1b75f2d281592c288fe6d5479a4e21ef626471819850cbbdf814593bae7e6ce2a35a978aea354649d979f161543fd4c12dae0efcdc2d95e82ae5874b9c04a2143535097b8a17c68 +Qy = 0c7160c2efa3aea1d18afc1a00b47209dfc750a5317ddebff04bc4d181f238d339a7690c24e55be2cb0c01719d34ec986a07727f2e412aa72434efef4d64ecf7c16e2e75ebd7ad8 +k = 0d3ae3d8e5e01ad838a7cc9a4d9b3e41eaf9894aed1d1ba597458391d4a2ae38c5d6efdb4d91761a415812d77fd9ceaebbf1ad49c282e693d71d89f0e2d1bbd94698a47f1f30890 +R = 1e2e9e2633885c85f70208de30ae9b7f72950e2de980607f6d0e73fc1fb2a4a8afc6388206c11b081540bb528a94e5386ce77a2d5c7830fca19223d57c1efe7ac488e69ae07e660 +S = 1250d1b920324919ef81865513db461409f6f8ad82f658dbfccfae4425906da306ba10cac84cf5379b6c1d8b252f3c6f86439413c617deadfad38a234bf2b0050fdabf7719bcc9e + +Msg = 3a131fabf3dc97334f212fce41c44300440d16de1d6060450875f7276f53c026e2a511681b5a8d75fc0d578546339542833145f7ee13c708df33e584445a75a5538829286480d339be7c777c03c998a6d3f037b25799ab2d541021502a0b02a9b9c337a8b176c4f30e5b186485a6103b1d1563ad4ae73ca806a5e4daa92e9100 +d = 1b5fab1d36f6f6d559f65d8b01edba610620fc3a38307b1fb1c5bd63e7ffbd4a9098cb8bdf50975a873f5d047ee2b627b090897a7fb5f56d3f4a0f3528179e7c969926fc0d3b0e5 +Qx = 5eb8c5a2bfc86aa9a82830d665296f74aeffa9c5b38750d0ff51d01c2dd0fb6f2209f8ba89ff07297ab9b1b06168757f48cb6eee618a7b44f1b3902187c33208288f35a06665920 +Qy = 5334c203f4ee44fdfd5f99686b18696b3433f203dd148324dcfaa03a0a250cf606486ef11ebcc1ed1839a76ad70909d835a4b30a014104a6ecbb284b33f50bfec33d8b5ede85ac5 +k = 243889e7ad32076a3ea436356eb572c1b4ae402d0218d3ee43927eca0b4fc21a19926eea35c37f09de4766f54e6079c34fb3c174afb953be1aac46d675bd300e717dfc2d0c3fae7 +R = 1d87b52dde9f502f02a502e7a331ca6dfc6204922fb94886efbe3013446d08240f6dba1210a76eaf804562aa92a14d220d59b6310d6caea0274a5e1e8aa3c6b57f239191a71fe3d +S = 2a5342df6908841b719f80ff905cee0ec3fd8be46396922c3f2f142393714b97128e083907a3a2343f0cf9aac73313279ed29eb44017e2a1cdd0fc86e4b7c536e9f7eb1bbd192a7 + +Msg = 679d85a762f2574b0b31b516270b7d33d5e166c83e91a0f48e0f3db20b52f42f9e6ee9648cf58267ffe3b713723cf3df52b5fab5c14db1e7189f7cb7170bc6ec7cc71946745e152b39180f828688a5b6c0b2957ab94283b90052a3c6e36843c391aa8810f9253b639a8d5a69aec10070603ad7a99dcedb544858d057a1d66b89 +d = 383e70c71b431eedd4574f65d01fb0304f7744d668408c847f7899eae44770a7f3243109740f177d7146a27748886b7b77ecf3792b512e8d8e37c3bf4ecef2b1253df7066498f01 +Qx = 769dd91fad550980225877d98f7c86963c88be141f91f7a3f1607e0cc6dab767aaa6ceabaf46b65a7c80b6a494b0dac1da5d2fc8c5b07ef7085ed1bbdf4273da3665a6517ea1e5a +Qy = 282fb94b4726472248f01ee43607f7ef969446313e849998fbf0058c8ad5e24457006b84fc0460b74d86ca281caa174e69fbb68673e1d28ccba17eae045eabc1839870831246a14 +k = 336909099a1540e6f69172d55e0c88a1afa99808005bf09cc803ae1e4e4fbeac2f77f984bddb482f1f13e4430e25e36962b1a4cae00f1fcd7f2c7a17372c91673d8286f9829bbdc +R = 290055d578012a5b7d88fe2f70581a0fff976756b4581875cf5db07e01f09c0bdf6ab70ffb5839567583d53c68e31a27c3fde12bd4f1e1315af2f742746277b1fb1349141ed3043 +S = 1480c63c8b90c7b51e092597fd8391a237b07f0ff7dbf615e6bdddd5aa880db29c9b9add5bde7e0e81d9a37f852c26f21d750cd2f95520d16da7404c2c3feee1489aff09f298d7f + +Msg = 236152ad31ce2ffc0dead3c142cf6c770672cd2e75af4a82fda1a72e1c775cec9b481c6f3e411644df7e7ee901c501405620af4b6e9667dfd46091788daa95ef2c6c9f5c240c06b15cb0df51f5f058d8a7934bd7845f007a35f99fa97200b20f3b5b14fbf1e372507f3b2f377e8d07d30fd3e222f398f26d8f428e320327f901 +d = 02261d4ead21f02fab19bbb0da8c272286704c8f0c6842ba47ded121e5cddef79fb34e6b9694f725ca502949faecfb21e3cc062a2b4c654bd542d9a1fe8d97bdd0905c510aa0999 +Qx = 3ef03980ea9b754b655948da63469fe526ff0ba2c0f572981d02f5693bff620b55b8e9e9f9d553a78a0138072369775c7976f028631e65887cbed62fb447c9f41da86022f4b41ef +Qy = 4446eed90f2716a7aedefa1385db9f5f803434517fcd80571adc9b7f086c9787b76306380a375668b05fbed30922746fecc0cc16f189dddab676516ed1fe4d02855a34a90975389 +k = 0b309f6c53dee8a8956358df45e72126ec76266d38babff185d4db1d449c8fa9baa4b0651af5f5b0aa70dee3dd55623060097e2f94ed12636961a7c0744b38f2f137bca239f974b +R = 2b42395206ae79bd9df1c729856101ec3c4a719616701f836c9d69b542b59ce973d91951853f89a0717abd4b929bc69e59cc379c941349dfb4f98d49f9dff572c614242fd370e56 +S = 1ecad482a8eadec6800a9d876a382125eafaa7bbd950fe5f0588126764126eb1b384424015c52ed6a335668506f25124aa78d98ec5739fe282af0c143c07da0fca53b9733e159b8 + +Msg = ba3f02c4847fae035d747db246fe4e82fb9224ff9cf568a6ae548f5dc2befb2079541d2cf9aaa6b18c281a05e7ddfcdbcefb25f41dd91cb3092b3343e16985e91c912215cd99ae4a099baf628e33a7b277e3c36a13aaef85418fca99f64d73b789f23ecbb76c3095ade0a5f7f34836a98c5be933b44a94a2eaa3f99b1d8e7937 +d = 316c78f289e1860bb623082be9d9238b88e38c5e978a868bb90f776235bdff4eff591877b7f350cf14c40356922b2b6aa51d64990360b2b0e44d6941b5dd9492b4f4e1f42ca163a +Qx = 6f4137a2c63b6b79138027464135021b034f97bcb2493943df6be844f1657a97632ac80541a3b43ccc828789517efdd9f86ba171c1262a07a6b337bdb0c8d5f018302a8046a1a8c +Qy = 425cf553554d18f6cc97f0caca2a7eebbf266d57030014273f701562d5b1444240b9d22060ac9bebb37deec393cebdad21ec7f13fe5c7f1752b4261cc2feddeb737284a6eec3663 +k = 1e0321344bf364f1ede39a49c8051f36875ad78e4b080ece9088111739041b121f3f334c6e923777fd716a52be669d6e45f381da11262fb4d09ad66dea74ca115838e19fe94b7f9 +R = 04f24ec978c52ffc7675a09334a895e044eb8eaf04d26c094d7607b77ac4168a02a972f577880a0d0c73f218815e3a7a70c91c50734c08d374a15fb42fd13367dbbe08fe9c2d4b5 +S = 060740270df0e1fdfb8e829c9601b9901223b19d07e9d7d422b9bade88a50fd6d4ec96842afc45900a0107ce85ea6d083d66ae202dba3a32e50c7c3af951cac7acdc6f4c406740b + +Msg = 6d0372b40559e075af56af853cbe18ba2d471b0fc8917764abcc69102b03d5bbe1fc12458215be66409c26c89f67c72a8933677a07f88993af6918acb074fa915fe883b24bc3d191ff1b08852f07eda98977e70eba072d8bf189cd545230f59559ac05f1fa3f4e65886d0bc274a6e02e2399812b2bf91abae81e21279c5de996 +d = 2c1bc13f8320d97a82f3d9354e195481902214e16a4fd89332a0499208e91d50e5cabeb4927ba030cb42f5bc53b10f500fa646a8c88508cb0d63ebfce5c4bd574c527d686c735ce +Qx = 2210791ca48aafed20de84ef9896a9c7584081f850b75884908c7b3dccc94e221401a6ffd982f292a9d5f9c1d066ed493da948ac7e93977dabd7b820bfc0fd21cd8d99c072bb69c +Qy = 33574c6ce7da749ceb480b4e00bb1a58203bbbca5c16923992cc9767aba5483e4d46ed39e71000a1fe920a4c1c211a14e63ace03635a2d77e72808e0664334890b819b3caff64a3 +k = 2e3db2d82c4b9de2bc0dd0a93c1c5b385f75ad03d0da527a034da2876b42e43cd88dc64833efef54af902d85c568bb8e71684bb16b28c32d80bb3e9911cb1b74be6ec520d99b381 +R = 065f4715e87ca3541ea695878ed5ccb7d2ea6eed5d6fc5ec29f9aa8deb4001cc7c06185d6ab2dde4347344d44f8300a1e92513af4690d713762336d2e6a94d3324a224f06eeadeb +S = 20104e0767530ce2f4351af4977b52339f34d13e458de0482bcd58ab38ee041c9adc7b05650260d919b2648e2f820407fd60a8d6b4b991b86eaf29c2c4d12d3b0b45cac2ab22c5a + +Msg = bbfe66c82bc060bd14fd0e40769d9b3a026eb447550dd9f118c30d8448f725f8366edef042447962ba7f7f833b9e9094d0ff600714697e632626e7d12a592e040bdcee166dcda93952323191021bd12f3b1647d0f25a41739994659dcbb19333ca30f46f539c6f0a5c354cda8969a1eda572a309950c84c7607eb8ac20163912 +d = 13bd80eafa67663e75d7ae139bf285d2b9f1e03d8e32153c73e26d06e86d7acad22bde9f121a3f1ea674dcc1fe67bc7f5398d5e92555056bc046a02b0ba86c2a0dfe32e91add5b6 +Qx = 4c01fef7f2fd8ee61726af1a2d046c7ac67716403b99e021082e96d733368c6c64d046986fb01a6b55cc930517762387eb2fa4a8eda23c700d88065bced8595188760170881a329 +Qy = 189bfdc8e7a710522ab5416182c9579ca255c5009e6ee6604ab033c1388639c0f7aad84642290954db9f4f7fbffd17481eabed38151160457d68ebdfd8695b5035e4e6e06532c0d +k = 3c5868345c5314aad5ed3a74488a85b2f049396022cdd1de855a0b33c2877f72e871805af3ed8fd7e7a392c4ff63acac6a6f0c431ce7af680984e8c81d0350abe491a01f0f9268f +R = 0c7e96b9e9a5935ccd51b901aadab6e01ebde44f57e6f0b84e7b58ab4f62ffc0f3f3f980665c581ee3de233ee49d11599529348f1ad3d362837c041cf98192bb324f577e973e1c7 +S = 2226922271fe8307bf597742618ea9c1c271c22c25b49aaa7c9292a81ecce2a55250415ea2ec8ffec54bf0508e64426cb9cd7177265fecc40e056e96cab661485e789f0c435b72b + +Msg = b35e9bf686717ce3b16a59963a32a2116130453b161a4e7ceb27b755856add836d779696edcaee3b5c986523891c8836109d431e55c23afbca022437ad19e6777efabb6da3bba1f5f44f905395b4cc7c9210590fd38da621582d059598e5e4569e904358e0dfc0dbfda4ce75538aa97480912852bccd433a9b96c9c66e9597d2 +d = 30834b0a4284097cdda2ada6947c6c281f7290a49b56becefea1e2788ea3ef78fb96807633c47c25138341768b241164ce0d42f7301728b928be2c047f2eb60fc2f844ab77306d2 +Qx = 03a21f0d8e01a64b235cc455c291e3fec8de12682f05544de207d910c7c24c4cd56f3354500d994380ebaa0b49a7604c6233a9aa24934c550c0e609f65fd4073cd6c1ee4170d77e +Qy = 67c83513e4acbdeb8343b3add40261edbf7c8fe0af7417264830edabfc40200283b92484630741378b997c3f8bed7285decc6ef8633aa804b3846d3b4517e5ad836dbb1df475818 +k = 0031afb24fbc52b01480754837cd84a5165d5f2ad1a1d572b92ab546c049413806f0f5239a77c751af4d57a84786ed1c11bc76123a82e7db3c0495b2fdc5fb9c8720eb7afb640c1 +R = 07a222cddfaea617f1190a0bd88af4d1983d2543dfba25c5036fe24529bbe2e382de89dc1e36c1f6df59c8291d1c4277198084902e5619b64128c265bcf03b7d8cd6b663c225f11 +S = 1ca84c146ebbd16300b813621d503d8c754e4b11446d5ee31cbebc71f4b85ed09c5c94bbdfc3570e8882ef790393234c5ee9e52f7d5b74ff4171d930af817eafc40ef203a1ce613 + +Msg = 57b5ae7e95c638b258d1e09b3fcb4341e203f5706862e199b103c8fdac72cbc5155e5cf8b300a0b3fb0ce1f897c45f7aefcc528182f73dd450cd84d5fe9eadff3f704dc2a01b4e847c22df430efd1c66b0199f3e5b59348af5386962a5ef25204fd230b54d58d7fae801c086f8f405d3d0aa7a9a9da15c22b868817cd897d853 +d = 0c81a79ced1eaaafc31b69a40d9939f4e484d625db6364a8e589b6b4d336d458b44287ea6c6aa7661113fc07806b147ff98216fa0c08708dc9d651821b922741deda522b4e436ad +Qx = 25f9b767b8796466c1cc8a1fe6286d591c04a0d115133fc7910640032b898a5c86547f57794e5aac0148996151d3ecbe0d5939dbff5722679ecff378e3f21bbf1354b1eb294d1a3 +Qy = 074c2b91ef3472e60426d2fe182ccc678aa0abb8dda15a428e4f6f1ac401b015b2b7d83535a0a92770cff7666659e1cd33941bea1168cffde82db0ea83668c2d387e6f4bdf28cc5 +k = 27b407a29553203b829a87eb25d6d140e41184634ae1c64c6ec38e9012d0b06a1f4ad9877d7ac4236a22145095990233e6c102a0052ba18cf6e47e289cce4f2ca21514d8868bd68 +R = 02416e11fe2f8e4738ecff1710dc827f4e03c8e7f04a4f52e755f0c1676abbd122eb9751ec1fdf6c7ba04b4e29f8dee52bff7e9e726e28cb3de6f9abf2dbf58c0519ccc7d70f076 +S = 0b96f107a26097a468c1d410bf90e223cd72c5ec98d4ee4ec2e32259d7670d7e7689e62d36549086139f6111884530e20f908d7be1edab75180c81a70ece341f7eda6e4a43a5ad3 + +Msg = daebfef74b452f039c999ba0528be3bd9e16deb5f46f6eae87b63db8b89952c949fd7db08311871eb2596865eed107aa065f030226ea675ee3256c31a3f85ddf4c21760582144e07af208f33c5f47cc026db5403186a65a47940691ea2d74ffb1245676260ef5717dd879d8b5b72d96f87fef5f762d4fd17454cb5ed83d8a11f +d = 2f24670c0f77d2ca0266a743023d2c7413d56d0b5ec77b454ac59087efc4ea4d46179e10278e4ba416ffd8c3f9786ed202faf8251c0ef5a9ea5371fbb35b7afe3d15a9cb4bad975 +Qx = 2da72b8ae64c5ee717c33758ec26153a342936f9d41dcbb136590e1303b0e220ee84c8a06b83d4d9fc924b8808de94dbd780cc8243bc4448efd27dfaa1572aae6abe574be664939 +Qy = 3b3a95d962c48a81c48713247801e4ee630ec7956c9989023ba16f02f5bd1ef2edcdd1c8d314be933225c64b7f8a80542b209b944e1f3fab95795ffa134e7e28e82307dc62c2962 +k = 2bbb9abd2732994011c8d294c5342e8b1f7f3c1f5718187e9f75832604b43bf75abad5ddc85e8d92cdc42656cc9f3349afad3f9022ccbb4937d9ffa9cf48314b604e82bda13475e +R = 3986059f2e096a3675215698e23b53f471c578891f6d721a34a0d231d16348d5bf9853c79c4f4aa94642ad06cb7bfd11f724800cb5477636b6fc0586fb6efb8eb9bbef62329a884 +S = 2beda064eb3ffa1c3b5336613704b3bc3d4ff7b0e977df16477c7e33d480d678804bbdc08088186fbc4764be398a26c13f88bdd23e844be0d7ce598bb87c1b3430da02ae96b3767 + +Msg = 62af0493ae79d71b552c4647d1fb7ab2f282a91cd44aebd8ef344dfd77b521b0c0a3f72e4513c8ecc0e4b84efef3df9482a07ccc1b740c571c5e69cb913740a792aa231b9dc87edfb72bac188293c6c6e788cb3dff32e8f483f8f34e21ee7efec71302cc3bdbfa47908a135f6ef3ff179dcef26d1a3987f7be967a6c0f799b0c +d = 20985f2c6fe3ea04bdbab66a8b6167e5969c073b9d53cf3c77cebbf73f4dbf75e601620ec9c3107bf3fbfc6c79f8f063409bf8fe1d14b19e323d857e23dc05157d270c7514137e4 +Qx = 010712d50ba7752962b140cfb943d9e8dc3bfa497bfe81c42606f4da5157656fe2ba5cfd33ddffa0f27fabef8e267688943514df45e642ee0454e05b49f7c00f5785777897d225b +Qy = 1a2c7db6595c6d4c55110210c564cf102739760e7f5a29706fcb2515d99ca00949d5b4f291716d0aa1e3a47efb9632410f60e2fee1ada47171f902f632bee85da75c7f3c895c24e +k = 2f26eaba6452e687af452d5e1208fa011e4c84ada92a38f0a204a254641c23ffe1c184fa8bfaff047db590ab40accda408717e4f30811b75cf3a5877ef99279476ab924d92565bf +R = 1280adcac1c79352635f4165f9c5c1b6e1e6e33bd74d781773f483f637462f80340f8d22cb24c9db5e49ace95a676df3dde53c8721f672006382ff806410bfcdbceda50e53285e6 +S = 07dd52973ef30dbd480047732622fb1b695fe3cfd080264d2aa30a6ff3dab4ab362518c4f3de4fae042fce78c0c8fa0e763eb187eae2ff8f2e79b3f38cc3c1aea897e1f28b71a19 + +Msg = 566f17851951777ebea3f8285610cd8ee5f882a68e7a4205e6fc9e2d66d210ee2505ee73d6503169f7b903012d43e7e99efa493a8e6ef926b16b9ad8f52156840ab561fc6b680120a88714fd66d1d0742189bf06c155e1138ee5314707173f7352e2cea0fc26e1553643f2490428718e44afd8372cbb7bf5b88234318ebf4355 +d = 2b3d641607b8a141f876f6d285ee46aea543880e772dadd5dd83d595b9643191d9597218e1d6adb081df133304037bcd2c05c24a54e6c4cca64fb2cc4569d6882315360059496d8 +Qx = 42f2bffe25142ac6c1af26643b0f1c317b34950a8a0f112a0cd4ea4131303674328e0bed5d9bc7ffcbb9712387cf67129365b4fa8a9e785b787c170463b24f6a7962c1e003c8732 +Qy = 070962ac4d3220f367f18caa7ceaadcb82fdba45cd2c034a97aab71f7f7546c09736cb080c10d9a95a5f984aa4a3ed32d22636a7b3d5ab29c86d85db59f6f17ba29eb220bb141b5 +k = 23d7021f5376e7b11be07288a0e47b4326c026df80d7e08c9a0fff11deccdadd479dad503ef2d4fa3f0ab2aada604b57fa7e09dbf5c8d493070b5faebb27cf68ad0b78bb6f3a9aa +R = 3059720e7a2dfff03789e7a514f75f2af5ed18cf1568fa2a5354dcddc9d3c7a90605e9b9a3d0d6fbfebddd615cdd52845ff922873079e06c4f349f7798410ee18e0c69045193668 +S = 1cc40209692cf5f8ed8b82372c95033e4199d378a28b9edcba516820ba21af1bcf5c5df2ef4146b91fd37dff89ec8f9962eecce5c5e285d76a5f03eaf99fa132e98cc40ad66c296 + +Msg = 25155825fc4f9a1c4dd1db837008e7e2594a879052431f5bfc76d0d2565b8fa726008befaeddceef73f3c60fa2cdf6d9a70e56d27210bd013034b38861ae49640ef208d3fe294ac4362f8eea44f58af3af8a9167a36b5acafb7ec95652d5885a0e08067ce1dfbb45a0c89ad1acb53eb404bf88fa5c3c463a0f912b5a2522a0d9 +d = 1afeb5ca87c81025ddf09c2b2c5ee22ba0105c0e619b67a324467485bd839030d149fee44d8bac6f5902a1245a50c3437046b7c89a84116b2147cddc645b6d2fd24d68e8d53bf5b +Qx = 119c46988a79e3ae8833ef096b0a1e2886c4b114ccfe881886859abc031df2b1e75818c82be8c5abafcbc5d7b3b8344e98e3f413d737938845e6eab5aec7e507f7baf0d339a362f +Qy = 3190912dfb5a1a31fbbbb50784b18051489a3cc0f44c42c71d3a54886ecf40507c3240395e8ced37b5253b915fdedd38f75bb26df2a0a8edba865f898a15f2d96f632f7f0638864 +k = 1facccc127c856db1994c4d9e9c76de6bffff81a88d7aa0ca1645e250e07674fba73447911c5b47a1aae815d5e96164854636d3168d0344b2d2d913127011b6434d5a5e545d3bcd +R = 21da49326f39577ee9f65cee64006525de88a834365a00f4f8cfb9a01dcfd6349a3d06bf95990a2c17b7e95cc0589714b7a795c7016b29bc844ae9031488ca354548976eed68415 +S = 3364def38a8ee3116cbd971794c859776107154234d8b198efb19655647bb9228c7c6be2e703672f795ed37481e994b6764d0b7c1bbeb2bd1db90b34f460278a54bd480bf4e9adf + +[B-571,SHA-256] + +Msg = 29acb0fca27e2a10d7b9e7e84a79af73e420abdb0f80dd2665696638951b52dd39ca028166b47a3b6a2eaeceb1a11c152383f0bec64e862db1c249672b3770909f775b794e0b9b28a5ec8635a996d912d837a5f22471b40ec2e84701a8804127a9f1a0b3c96ff654700bad3167240c2518fb5dedcc1be9f56a807083e587bc56 +d = 32c97639b69c7cdbf419286d0a1b406d9b1f2886521a8b979a36118d2a368aace5b02dd8c515f2041e6fb9f026d1e82e789dc826a56d2ef732b1bb0f49be2b696ab5d3d5694a2de +Qx = 0087ff1d8a4644edebd43c2d43d49e140940d215f272676fdfb72ccf58a12021de3d668f2766848044ac404fb45cf6e18fc6700f87aa53b4fac1e35e1731814f8a9d0233e2942d7 +Qy = 29fad3638177541d8392111064837bfa77b4455c21c5f7652e3fb302f4bff4a35b74de8aff3806538ef9ac86964cff755a81cb3002b6fb241ffcae8ac9621b8e034967d650836ee +k = 16a06e3d25873f6dae16bb2e569720ee9c6ae7b5ba36854c321a80be8b4be502b895e1a3d161b001f6cbcf53d164b5485d8a5efa0476f581f9c79b3a291025be01a435e2fc5ded3 +R = 347138a43f3ed1a1a26f5f11549eb8a41f64aad302b6383879886216ebb6d08a4ce270d07a5bec6018eb313430ff017c1bbf78556436d9255e97aba1481f0f16b85e7320df79d69 +S = 28f35e1aeae288122b043deff9ac87d39478607da60cc33d999b6add6209f452f631c6ce896afd92ab871387f5ea0eae5f6d5cf532e7a6ab44dcf44acb1fd1daafaf1ad5423d8e8 + +Msg = c92d67cf6536f5046e15b02158da698bcbba4ff1e4e9e9c882cda67f817210402ef917ae93682c9c3dd817b21b73c6c00b7bf92ea80ecbbef2e67f4f4379d078a2b0f297742b2bb9c3fa3297a7e8079f488555bd37715eec92b4b1cbf897640ae8a1d2a0fbcee5423ab31a37629f98630275e35094a896cc574be0a449bb1bc3 +d = 0f93672159276c5a293582b9f49607bbdb970112f6c63b2b3b5d32ad3c8240c86b1af13a8dff6502c6b6a17712cfd988f8cd23a60693d64104143b3f91adb37f852e9e11a0ef110 +Qx = 19dda59a839aa2ed28f69a62a3e3a753c6fc789fe0d8551bf59095f009d0327386e6df5437846c6803df2442e0359a367d04f117e3965397576d4287398b4b8c92ad278df4a447f +Qy = 4159ced60503f7cfcfcd587bb3608699f54693068101a838d575715de02fff81058d025dbdda430e176f60e423e6fcbba889914f6409ce51d51e89e4cd7bbde6d24404e5b043e79 +k = 10dd216d4b3da2fa6a75de60f722f1f128776741cba002c055d1445581242a175318291fae313eea11fd905b20d26cec845f57a3d5bf23ae4dc93d886c0594f1cf7be4f59f3e3eb +R = 128d5c00a48c7352eb980d9c80781f8abcfdc1ddae415b7ac94b4d85c3d7d4f7316e2b3344ca50c6ae82938bc728e640e59e2d733f0c7f7025e66c15c81e98a845c1ed4843b589d +S = 1ab59ce5e54bffc68fda96c920b839fe03d1976ab36978bedd973715ed631bfc8e3edd100043ac527aeb5ca121da848bce4ec9799f55b22454e9af32848943058b257e815b04056 + +Msg = 15413f614c4551e3b138b64f66d15f8964c40326a42b0afce820778eee4a88edb127fbf575da5263e5a2627b5461d311813ea868e6417615e7c4938313675009caac28bc7a2f4c0bc37572d9bf36a3b1794294e09c0121ceecaa4b916df45b0dd31225415e6c87cfeeb092a008fce2c543cd62365779ae28f29fa02a15d9dcd5 +d = 3db080bc99c5fe7e06d5032167af56783cb423fae59fb5b3c6bce5fbedf56b7b39b17810e48ea9a172881aa1f42f5e267349b60294d4a208b4437666b44abcfee5a1829e9467908 +Qx = 59d1b3f680da784b49dde3b361eee819d67339447d7bdf7965550264eb63bcc7674b0921f02e15d45466dee52b4c0a50c2bbbdf226af1662086476a9eb1236e3d4c2b6219af1bdb +Qy = 4e3466200dd6ecbc268cdc1937ac5123cbe33f32110cfdb8b7536987ddf5c9ef2464d2334f315b9b489cf227a6300b6e054fe40d36c057a692f2fd3e762624069e2adefb65d24d7 +k = 37fb32a902eae0c5d7cc9f9018a5d1a906a3d1b9adf5bfb696ff63f105cb2e736d9bc1961677fc897fd3a9e9bedd370be6f25a03fad425b5a293c66180df78db33aec4a188d3db6 +R = 3aa8ab9fc9073429e52469088aea91f00cfba271b9dbb84818460883effa0c51d6a48c1905d6f58d1312af073dc8735c29957f30324b467797acf86e028410de016338b972013ab +S = 198a746411333172daef76359e7ad23035a0f5d14c283cb268828bd876b96b5f767e0c1e2796def7a51429f39ab2332ac25d8e4f263f8dfb9c4c98da2ccc398fb3bb9a6b28ca28b + +Msg = 9f901557451ae2f8ec79b6d4adc794cbfd9b2e6d28f19409532d91682820205308b41498a4e1ca247a2baa8da93de95e3c0f7afd6ca46bafdbdcc6d3374a12684676a50988b86a960a82180648c8c1e38f8fd9af604c7be3be4b24799f4544ac96d6360cdb83d1d0847fda21642934fd6cf65385b50d86d4656987901fb88d0c +d = 06ee767f6f36bb8f364f324d8346455c899a49237d759003dd52cfa13b9baa4c71347b134b24ecaee32d247c34e3787a0c64bc5d299b55c86f64b47521d22f2c09db225b0c84cc6 +Qx = 3f971125860f4598fa310eb7a8c6b4e0c31bb721fdc17ce6df9af557beded6006b8eab10ebe7f3c4f3d759d4a87dcfc1fb767ef87beb1f5c845e3f41503a33b28b2b5aa1644dd1a +Qy = 3296062514d4e89d2105dda5bd65a315b9770c45afe4050d8c3d15001405b1e32be5867ee90cafbe4e239dd44d030b4fda855182f1fcf80963c1300cb842459aaa8c2827371876c +k = 2b247e2dd0024f534ed2797110df6ea4ba166c34d91c94e43b045c0ff80f124bfec1cf3be3da7c58389d352c8c5c1bc2a2e876a7e56301b1e688a085ea0222697fc63141564365c +R = 2858eadd14373aeca65ee5a2cbbaceae4b54a50e0941a696406dd86d05c07c5599379c066b2288d01b2a43c9ae34bcb8c36f59d490aa8d066fd3d7e539ebc620a7176507ccfb232 +S = 33c20d26dca20af2c56982fcfa6f085bc5c317d01f3b1dfe0ade1ef6e3e960b18b626d17d6696c936f04090ecd9606c2a6ecea1cd1883bbbca8b3dce3b0acb2688fb2834aaf922a + +Msg = 959fe5a19d7aea2ba611c7203e19f8e3f3cc101e03a98f91adfef602c424c580d5a868659368a930f9883d699fc633bd07f6cf8de474937db0bea86fa7cd140ec2f202663813033a757b93bd72afba15be5e47a4eb93e8a666aa1c72c241ca3922547d63fa3732fec54afea7ade84302e2f044275bb67433fb6b125b7913143c +d = 38e2571d9f22309a636586d62863ed67a70538287f3ef88b88c3c2fa1a2900d48c342b6f15c26b8e7fb4875cda4093b7de7ceda48fe1e2cc2975afe958040881de61f309931e48d +Qx = 5a221634ca85059543e2caf8bdf79c43bb78deb35e9c89e07d553bafb6b31750a1d85ffa7689e528c11d8a3dae442b4fb2a4a21238d636eb04ccc04c8b5d794b0a213fe0480b1d2 +Qy = 225ff457b6cbc12d152b08025cdb7e1e921ee553add9cbf83228d678d5a9f5d3d1fb4327a74c1dcb5d69a5b98f3ed1aebef0af09bd49d253a903636ef5a66844c500fa221470f2f +k = 3b4de49d57040141f3584ff596eda457e2835085d350b75391d90abe728723e1d1ac6413979d4fc3eba98d72a01248e6510c722df15df876da881ad50539e4248facafcf311b464 +R = 00f259038b4d3d036bde101aab29f4558e88e604c62f967bc7a35eeacc6a56294268f8ab00a34f9a0319b07754f502c98718e8b5c91093cdbff2c8496fd63d6fc2c50a35f87f423 +S = 2350d5406922e8822a91f7c95cfe8524f017a14cf7174ce534c60aeb351510d06ac20dc1249129247b21c72c14b02b710c26c10899bcf995143aee632e294176e903645b660e998 + +Msg = 97b9688d9ed5101b8cfb19e84b89cd644262ca1c7ee18944e29ddd3b4cca78e06338b270385b00a5e8b91ca5e628de3bba50e36ecc695b3ea737a9cf8b36871c473a54ba17819f49e730c0f253b0c769aefa6c16366fd2dd612f330e95fb119fcf3bf7f3e254438c0ab635ec04a8b2424a05b483ecf65b74a93636fbab7bf1d8 +d = 0c8f5736f1ae65592f3ca850f43d06441aaad8c03820f3b08d8a6db46488dcfb828459f8b3f34af73cce8dc7a5e3834e085a64523d890028e194214cef4003210e6eb530005b01a +Qx = 667ce3db45b8772f717ce20755ffaba968aa1314d75c84073042436823fb54bf8dda34a6bb45a61d610745b1fc10eb0eef71c4f55b26acceb442d822d6e2a27761c73b740f47289 +Qy = 56035da1adaae894e361f5283b3ea07b7d9f64a298be11de9fb487c2479b120381f1c60cefe5d32d37e4644ac86a170f82b1c4443eb71b940b21c7a016b559c6c79835532c276fd +k = 190468668989a607a3aa966cad071ca8e8eb152b0dfca9205bc9417a3d612ca1105c7b90340b04acd96a5223658adda16bf6b598ea9f32a2f8d1b61c2c2bdc08d6a49de246240b3 +R = 291e1fb18edb7a93badd6fab6f56ee0d390f3b6d298e97312d5277358511fc7621534ac035f3518cb140fa4ad5ef7d889c0d5f3f52a4e4d06bc9f647f99695531f85a4b76cb1184 +S = 2d916734e02b0a98406bb5a9723486a7ed40bdd0b39c4cb802af4bafd519803d23c6bed59a80c256a14eb878229942f67e0b8159d5cbf24b719043171b3958fd669adfc72eb7289 + +Msg = f08b250bf4a3980cb455338b3f4173723b3f44c97bacc9cf550149794a71426e398cb4a74bde141d8b7b4a72942f1c069676a9918e27792cb8f085ee037c78e3c468adea5123c4c64d8ca6a39f2f90140c5d2d80b669cbf0d1ccb466b18ded83a1d5f042c36188a04111c34ff769abba9aedda40a87be1e24b700225e2078056 +d = 1ee68c3994adaaa9e0d61bfcd3bc1cdf198d3fbfe28a44e5dd518867ea04b20e795eadacc48bfcf8e8216dceeaa069b756e8e99ed87b6b1d31154cc9310bc3b4555162a890b0c6c +Qx = 3efc83ad15d9bf889c9afbd769bdd1dc8925b0462c93868d85ca7554b540d8c3ef7b9a63becc85981972eee8a70b7f948098ac050ad594ef2ec249cc3b557844bae9cb2cacbf397 +Qy = 42a012b3a1d9e46cece4fc3460a2bedc9af4ce0289e95f69550eb3544f7c105b5769fa52234ac88f9045ea5cdd4937664846d26deecf511ba6996ce4072e763e8ebdfe709660888 +k = 031df03a6cec2346b92d9ae7d3d983edf577d9a1bb88098f886f38536d8d8cf25def57726790604e674d036cbcb864bdedf8475ba9c850d510ef93b844c037e04348d5f48098c20 +R = 112dcafb63bb125d9610e59883df481bfde43589e46656b5952cdd72238cfbcfee79e9165e3c9b89c9ffed12d303225ba2af19e00048e20e4edd3968807e4885003d148403321ef +S = 2ded1456df54a24214d8c1d3fb314db52b046ca31458bed69bb3aeb6a9ece509ee521fb8046ed43accc7e605440a09fd96db659c98a7dd606758c0c47e47acfa326b9ed73ba4b28 + +Msg = 1cabd16fc29d7d919622810dc8b23c770b790b98b119eeab1b20900fa94fc2ebaf76be4f5eea91fc5276c5621c8677d4d117c4a5a782ee2ca1d5b0db997fdc8a05b6b3fbb833d7a7b81c3c615c2a662929760a96feefcf89e46b563314c9b77c86bf34438458b43b694ceba741b97dfcdacc0ed57652ae62856ce10ed2690770 +d = 3a6fbf66ebc1365ea7699c72cdac2dd85907ec59cd26e2d18713354b619ccb83b7fc0db9193aa8493c1855f1a83fd987cbbb65de17c59fbe79256aa5392f4eba045346e9ba26592 +Qx = 559dd556241f9b11d0f91c5458ef6adb783f9f5051bc12cac9f0b214f836f7b149d00ba8218e873410a50445da9fbf68673f3282d783988981fb221d0579341892ba6824e0cf4a5 +Qy = 05dd0e594ce41122882538e51e9bf29d159fcbb8b29b97c5546582390ad5c59c975271c58ba1e75d70c3898fea929ef7316ee830eeefbdc69bd80d7b0e8133b977cd573a3b422ee +k = 1c5a193179ab859ec1166575007c3cacb30d31f341a0e82ed6d4ddb32da909dce08acfa10fb14183258caa743010fac6f7d0fb1f8c8f55c246e49a97f2bf571129144c23de8d68c +R = 2625d0bdf37396585d22811a12ae7e0c3f512ffdd0bf4d048379434af46c03c6067dbe7c271c417ac5307123bf58a9f2064bd2b3a2d4b4efa3027959bfe63e13a851f46a21da6e6 +S = 13f16b211b314a7e9918f3254da2f1aceb5340713985610f03ec1d0a33ecf9217d61076eb153d8f27aa31aed3c9b165be52f8d857de362b2c88db5dccfd708a996a46b76b4ebd09 + +Msg = 7bc8bbf5ebeacf40b3c82eb6eba5d994dcc6a3f2e12ef741f90f90e176d20c21e006ecdaf14cb5beef35bff46b2c374d9ee224516679b1a9e9255cd8ad8e60ed234f8ee7e0fc53c9021488158217d4b4369cc597d6053746efa1e73340bdd73c1bd2eed57b92426fd4d278d6a86e8be0f0a66ab3dfadefca8831b2f488636251 +d = 145748871a0b5c1cee628de04a12fd68ff2b154fda96e47afaa96389d66d22802968584f6753d36618d49ed205260f09d3f5ccc2b27a34390ce58179b9834ff92a86d66ea0a97ca +Qx = 6cc7ce2782dd67cf1fc16f1b24ae46fd085b969d936fefc409a9bde354cfd33a154a3113e837cfb88284d75a96f5fbe85274fdd0990af4a033a6c40b904a5e0f666e4d8b8bc3532 +Qy = 7adfea166087502657bf9e2c437beb2f62dab041553a06411f6c9dae83a2a2749a4e5a2a36fbe23d40816b1b8d206b9f5cea20ef200b9150061ca22fee2076e31c88d60a006ef4c +k = 26c820dc92f97dbf545f51db7d5ba649333dde38eaa47d8a7edad9a3cf3e6780442db234632458ff17e1d7b70019916708c128601ff547ac84dfb0173cf0a3c5d69ac96c3d7d395 +R = 338c88d1bbd0b93f3f1fe1ccfcbda65fa1667ec471730a40eda87f57b3eb63d979d8d6d819b974619799c90b09f33c051b8b522c3a1acede101857265ce1b58cc7eb5698049f494 +S = 3637bf89f9b66c7ebd8f91a8324eb70a510284b39f0f2e45578f26f5f1e4504ad70a389427f4d58960cbd918c2f8279de52096e25a1b0b0c3929fd5ef56bab6cde7c0d8e9d2fb30 + +Msg = 0cd2a45392871c0c262e7e6f036946354bb41f9c2187b8c4d399231280682f3e0a09731fbfd52c76ee63b9828c2d731f4cefee0a8c46419c398205b2ff80c67d7756db300a0a8385fa287dd37d9126f75998ae1cbab5136560592118db52fbf102b7ff0a1ed45b8a91a7d99d13a0f7fd4366392264aa1248d7324901467457ca +d = 3c71911d24ad19c20fc1d8a044d63c9bb417abc3778d7e6234c6af79b898cbfc2f2787244708d2fe203be786edbdc4c9b12b413156b7b0bab0be8af895d191d853cd58aafe1ccce +Qx = 6cc47aa586a73acddbc91398ff5782457e6da2b10e265153c678789d3d7fcfc485b03b089eb67e6d6955d5c8c7ed5f933d84853576e76fc60332e5f0a62c3ab23690317bf1b423e +Qy = 15604d94ab9f2ae1d74fe46b1a070160513709de2ba8e74fbf9922e9bbe7f6e743b25701a13f73eae0db0c98dc80c5f8528e16610fcf18f60eda3357ad5878add2554a6befc9d39 +k = 3681fcc5fc1f0d7d413abf2e44cb5cce9a4a252ec449ec4f550df4a172305eecc072454efe2040aabaf4fee58ed19c9090061d3c4835c5fec38996f013e5512c0147cb14a4f0fe7 +R = 0d3c26796bb86b1a20ed4935bc3824bcb9742513ce91a66dd523a3c0d8a5abe63488aabb806b5b113e90d3f3c80e3ffa01ad051e6b0d4edfc641689953ed65fafbaf3e554be31ff +S = 2e3129ff95b06c274f7ac08882dc1da6660269f3dbd21a3e48377a628f6d81326084bbb8d32b794fcbde8e574f853636fbbaba480fb36960b0994210bea319a99a46e29b79217b3 + +Msg = e97092625b09c9ae6e152e1cbee207d83361f34cb9b0e727c816a5ed851f12f91fbf88ad9d4c8f9d07350f5d828fd8574eafc768bc72a2b18aaf4d2b48fb10f7c3431137b51850154de9706487d69a40a8f4cb2c799f48c5d8f518aff752500de93cbb94ab04ae1e0c7183a32d79a27291dd07b5fb6e6a4fab76e85c3a8607e2 +d = 18bd74698bac36ef11add6b3e3fad227ecd868f370ec04569462565d2f0af2340bf793486953a7b79ab04f0ab1f0e4fd16bf6b576cce677d543e73aa8edb0e50372f24ddfbff966 +Qx = 231f891e63bc1c43377faa56c5799eb1c877954ca2cafdeb4883ae40bd78816ca5634f48f5ef5c22dc7d3d0df208bab4149815274d7b134cadb700d166a5e3fc73e9be1bab72522 +Qy = 469ea29ef860adf24afdd386347763008ef6fe2488d902c4d513bc0183fc52742782a6fe500d6b581902ccd4f9bf077f975bd5fa89bf240723b99f726c9fab4f953380745ff9e17 +k = 1590570de563ea96eddd900e4a0a7efa2e4a0b389854e96af32bb7555f098a8cb52d160abcfbde65998c34f91338a40d40cc03e4a9a241d3b16b0e893d3f7ffdbf8912f35c7f538 +R = 32402fbee4831b16d762ea2cb218279f4db5e20bc8b6e2e53e89a2ef3646cfb0abbac36116c8c708a1342db2fa0abd39d149e09db57aef65ad8092f37f7962f98c28331f0f20b64 +S = 2d1e38f40965e2697abc7df5896cf051ce5646f135d1ea0bb470a43250af8df0abf2a04ca1e0f1f31013025b4136a8a6bdaa474bf50752c571f883829bc3a5482ec20e2b4a72c90 + +Msg = ae6723b8df5d6ab5fcfaa22d32fdf106d211514cb1892c7c43ca6cd85c2532f85929c8a259ed251215063cf92e1502528d1e22d5cf67efa0b8ef21e8eb2f5dff881ba1433e8bcf2b6af8742ecb2bccde081e534615a305562cc22d3398f61f277d8ca785842bda85d8a40438d9bf1aceaedcfc22c85533794a69cfc320931d3f +d = 335699bfd058ee2e6163f55d1816bf3669acea8b73be9c4ddfe775230925e6093cff7a66813adf22222c8376faa106d85ac9f3c67929bc58d8986795b6d35d5b9fa546dceabbedc +Qx = 7995e02dd3d40f9bc2e6f4cb1c0d29923c9022169e64532d1b357f36264d18059c44a8617a6f1136e72648c9051a27714a0dc833428762275a1b5635a3ad91e65d2713236c20f50 +Qy = 6167d5839cd4476a638c50db218979a93da44dbf97281d90daa8b9b530960c689279fff6c342af97880db1e9c5ae57b91d7be727fd1c6210ec59416d1b675f4dd666e0b121d144b +k = 3f037ebe0e4c3910953e123becc09c0862490e7f590245c4cdf9ea5fce930a7d7ca5d17f5689edae1ce706b90efdf84cd82e06e4ab95e9e2368db91d50110eb91cf44e50cdce2cc +R = 2baaf025290897a5d68c5e63543256523fb086a6f1166ddfd3d50fb307e0f0cf78b5fa895f8b71944a7b67b8afe5f3e10f2d248aedf573860c42cd7aff258055ee7cce472e8efb1 +S = 0f4d239f5af023ff6c94ad7f66d43201c7e40262cd92467c4ab54be8d2b8e6577d14375064fbd00a6327da62f03f75262392add0ec119d820205065aa6238433fadc8d1734b8481 + +Msg = ee20c6b61886e02ed94359dff3559522ff550ca126fed4b2240ea7d999a182b7bb618c50528fcbd261d5e497a991fbac0cf4c105c0f664d6a00a9001c1ed522962fb44dd4159677ce8f1531019f86457c055c9cea6247086cdfe0442485cbbc4386ad002b4bd39a1a187752437f04569705cb7adc0c68f0fd059d946deb63f0b +d = 2c3eaf801330b3f1b0504f2399f1d24455db29911f750c246ba0a134c3b59da8b3562911197764699a92ea1d95a2aac587e24f743df1dad3e1cf7edf955203e24a0225717f8d2df +Qx = 703d69e2dfb13fb6e695b0b30b31d89c8789e8523a7eea15673aeb4f1909192c06c27558eb55f0315f395b1f3ce84d9c304905cfda1d119bec33af9ade4420de2edbe75cc5460e3 +Qy = 75e35b2d6a8550969d49ac5d656afacf68d3a1dc6d17666f46ce3413c855b627f0891912e373af2ba91211c20f067d66056e6bbc0814ff3921d944008b25d8772cc8d696bfe1d09 +k = 0a9ebaea478893aa0e3bbfd5d007bcec5ad787d9bb5a8e9b8b79865c584966f0bf040d36f62a8e97c123d2adb7f38eb49a86e9c2ce1294d04fef1b6fec7908c4ca1a70bd1699a9e +R = 2d495eb5f6fb187a0ee1fa772ccefbb969e854abb445ec19ac3860f40ee65f53b92f6a797003574bccf0b9de8014ad4e5745ed264eb3ae88040ef6518809b4c66f691d496a85d51 +S = 1840b2977ff137f2a8f2f7c25e347cf1262fd128e008e30e4752315deb5231098c65e9a585496a9d6b5b56cd0b6d7dcb7150a077fd199be2d2de0262aa84dad414e100ac6162346 + +Msg = 734a9eb8288e32f5a67cc1d88704523ca2c68b798d90e188d871d9f50d2da2063baf1ee6685c45832a1818aabc9afc0bc935e97969dc983a484f16d2bedb3c7c0b8221408be2480a5562d5d1e5d8763d1e474bf2826aa93a68c3b870e3bf34f4941cf590d88e1f5a8cd782a33992213f3f6b4b4f6dbfb3c3c8f21f5eaf4ef609 +d = 1c3ff067497e5d387f31f0ecc9c67b3c0dd6ec8c81318c492aad83c9dec6c99e4fa47447f6f7082d636c2591d0df940b947d0a4ae3778e2b7cc8fb92214638399def894ada276b8 +Qx = 2e56655e37b3e753f35eedca95f8ec07b7a3d3e14e365ec041cd9003bdb78a7a8b8ad277a67da5d63dcdeb0ee8d8efb68fe61aad9b1fbef4373ab13c44efacf68cc499faf5b5dbe +Qy = 47bbec643d74874b77f0fdbbd2df3f3ff0d35f4b3e1534b2c4d5c76b8cc51693a70e17d1d4cd64713c5c05966c826458fb5411ac840ab5998bf3cd64a0769c3e075259a70aaf94d +k = 149848f4534eeeb45fc38ddeace59e8f83f0bfb4cfcd2b8b7acd0bf19303051a6a8fe75d4cdec1be036645beb075c772aef4a58785c16d984eb43b9b0317446bc3b3abfe7ec2cb7 +R = 17eb68556224f995733077501ed295088cc1184fa3872f5f11e97cf67c7bc1febebd31206a406c4479b60246a517cada5859d4f1aeb98dfc108e96e9898c6e71e59e39b6284895e +S = 22904497dc7a98fbe117e4427d74f4ecfc4e14d4467c99227427e3abb8d3dcc406f3704a7783d822ec1118a1d91d5945d5b902a2ad325bcc9c17c68ddf8b5323df9c2bde392710d + +Msg = 68e27cc72fec8f3f1f3882c6efa08efdf21d74d13be5171da35ef2855666ad2ea6919d21dbc1cb6d296663dcbceeba2fe47a2c6507d3d4a67a61b55b0f81c93412d7e1fbe15a590e342a05f55daa55f8591171303154e615e81189a523b855829a5c96621ad118f522e397e2eea05c2603eeae6e3591215e29b2289bc384d8d4 +d = 04b4e04281b210fe78d516a5b69f878b7fa058941ee9ae8cc63b061d1eb9e12c3e0ecb8717ff4623ff5bbbcdb53c48adbd9c69636506ab929c5507d7ebafae5654aad65a263e48d +Qx = 538049d071158c62f0102fb664a47431afe320474a173463819d5f83f6737b43880ed378470d774d32ad59cd9d75e5bb06b118f1297af3f6fa910f40aaffe11e46cd56cbd29aa51 +Qy = 0a4a843af9841e2427357bdf26817656637bf4650e443ef303dd458ed092dca3cacf2857d10aa190c256467ff834bc804f8557f6c3bdde89927a5f2bd55bb9d9f1f08a044cbc208 +k = 1191110485f56335f0e65fe04b9ad8fac1c3573cb4690db3e9f62086312d394b0e354890c0f74e3df7c43e718ecf18caf6904e03bd6c0912f906de1d2bb4c49823bc6c0dbfe37f4 +R = 0dff371ac365cb7de248ddb2b2fdee624c527c6c1908dd287a294bb43a4be94c130bfa83710b0655f21695dd91703acca64fe2e7927eaf9c2b9b230de8002798224f9505379bf34 +S = 2f30f31c863bdd68fae16f97fba756e033eada18cb0a23d7d4b2c9ea3c832e61b52185fcd654d9eb281b92a9b102c3b17ebf02422a0e4a7a56a73974208371ef65434c38f4d7d1d + +[B-571,SHA-384] + +Msg = e67cecedf35058b80787589514a9c81c6b9f4bced4260411d2af75bc46b8b2c962dc9d260dc99ebbf8ee64950766efc0e394184bdc8e2891d66bd3300ecc880e9d6a3d0eb615322378afc3dba89938704e9a8d0c949d4bae9838805c00377e3fe5ec6a1a98ad7eaaba6b500973dac48b26b7fb2e1b9889f8c387de535d4b2363 +d = 30f2849a713aeac95fde5ce3af853e9d070ee60709eccf35a076567be2c43f0fa34420b0fc097ff577221275a3a56e759efc32183be2d76058a7d20e5dd59f00415114d73a15b8f +Qx = 6d4ed3cf180e0e307745faa49247f269c3fa0a69042b3b78ad645f43eaa50d479622e27429a6b6b1889944f85975fec8018d3321ed38f6c7d91f2efc98467a027ba4a02c7f231b4 +Qy = 5f2ebf6abf7d53fa32865a9b6ada9bee51c1fe26cad74dd6ef78f13872f340d64170031becb5073001fbca373be4e32ac3425d705ee942e6c4e639bf72379e34776680a387a0c6d +k = 0da9d8647d0950f558a3831b47858168b3379656e603f2bd44046ac7546892d1a7318c5a9873c6ff85683edd3881a0f1af5501d17939f0825ed37bfc9a2d95faf43d3be92b237ef +R = 0fc7eaeef74806606fe51882c6928a06bf552d18dcc4d326d44a540abb728146657048b20e5fe2868beb5f04f32d43e9ac23a7f22c6bf325bca24f5e3161c868911ee61baa8a3c6 +S = 33d63693268f3762635373fc901fd72e525965ac17e2cc009177f03bd3524107b30e4c6d80bbc4f87fb1f288ed56812994541fe063f1d91afa7213bed8be5693dc6c17ec9a0714f + +Msg = 2baa1ac3f07e34b67b6af087400f261e138b070c8475378063286c16fa73578303380236a4af2484ea01ba56c1c619f6ae4e5e6ac2594c8e5aae7e7f196f96fc5d0f507bebedd4d818e77b9120e5b4bc01c7ab6339e88b71d0886631cc7fd89659bf513faf149c61eb14d55060c8dfc7e6e4c2b4ec8edaaa6bc36eca50a6feef +d = 2ebb73d04e6e5361e20629e3ad119b33db5163ed91fd9a8aec4b774898784b6822a08992118a8fe6013094bad0be1e9bf01b27c069e4335bff7e0abd28a10443818f6b825e9cef1 +Qx = 01710eb0167e8c948d381e3a75aa1e036b70c414f69260aab434ee20b6724dd7393fc487b5b3822e5e8065b06d0785a4a7be7193352d5b9eee66755ba106ba6e40f98a08c730a0c +Qy = 6006f98fc25a641a7c6e67fedd37aaad77a9102be3e1e7d32dcb4c68029e623a42f4ca7d1ea725bfd475756b80e18904107c460fc03b9bd68aa46f9dfbd60618670c4d9a68a3287 +k = 1861e2a356a6fa8096418cde7fa17f1b893a7b63810f3fd807a82bf4c745aafdc4963eb7a0ad0488a776e915b64d2b684e46d244703eb63b77835167908f2d6b06a2ed7b53f0717 +R = 046688e12d26cd96bb05d3f418d8ec34f4426f594acd2bfd8e9abd79405e612d60737007440424bc4f546c54b7402d11880f68edd996f49277b729450f7dda5d05986b014b5244f +S = 341a80e74f3a69b966ef81ae95dbdd60ed5a0446416653c4df431ff7c4b4272665a523379d76725e9fbe196018f0e747100084c823b95d7c7b1785d3623e52e9adbe773b81b49d3 + +Msg = 0e640581f573068d8ebd2899a6aaeed0bf987ee11e22b05d25e88e9a1c3451f45ee3800d976f4603c18a041febef07a01086832a6f7ecd5d498d52e796a9d90758c87c36f4a5b704a39c456aaee2d5278183d5815d619c193da9fbc427d701bab0874bded848cb4bb066f56e119b637c78aeb6eaa387c41bec6cdd4bf7b2061a +d = 1bfab717d6f6e16d9bc6e89d2ffac7cbe0f808cc8ca2eb515af7ecce5f3b230303775710a21bd25c2cc4566bb53c78c78e3774a9f306c751cc6e149929e45eef60f56c1d2388c6d +Qx = 6935c3e8b58f7bacd045e745054c227687800ddd86d6e0c8b1e426f4df0e4b71feedefa9172c43becebbeee8ee382a75396fc5f29ef3d2cc55f8afa9232038609b5034513b222cf +Qy = 138463efe3b32259dd90b759062f848deda84f2bcc0d687c410f1ad2dd745517c96c3451432b1e490902208cabb68bb872ec493eabdf1f3b07595d23a54c53e512777abffb7fc65 +k = 00025bd48e2dbbf1ed8bd9c1514303dc503dd0799c7815870b902249cd1d7368380853d36f7fdefad973700ded1e0d66950181b0aeac73eb622c880571315f09504ed26e28e85a1 +R = 1b9d6ccb19b208022d3a579a66957429682517e84a71be42fd571fbbd0247609d0b5b33808189efb52d21e6421d3b08821d82900577791b1c54e239b0d908bfbcdc060cfedaefb2 +S = 3356320389ffde577496c5b46a0de6d53005f5ae3489c0d292c5f460a3b7adc5bd204bc50a3bcc8538e0f8319c79b9024b065223b7ed9b0f211c5c224d363f5bdfe04db97f99e19 + +Msg = 51a2a560ba226d629127ce1ea7e812219ceaddd23561256331458c9f11fe73990f21d0dcd974a3773040090cfdc8e0f01692d951a0cbb60f8448a016c67abf46a9c150466ac77e656ea827b0ea7d1e77ea32071ba8314fc8a2edf69008f498bd1c18061d7d00f3340a7e2cd73e9766862378d8702e804a1870b442beb2d0aa14 +d = 00cc53bf7f1cad5e3dede4b4f4b082831604c92dd2b147869cdf1107259305b1d50359647f9f3d7d4e1e608865c65dc7c9ea46bc324dcb8423b554dc369d621743cbfb592b70eb5 +Qx = 20187d7de90652caf1210703ef65cada3b88f978e14ce6055847be7127602ba7a5391cef0fc9b009134105da7b09b49beb7ba2f961b84e6d66bd818ea99ec106c6e8428b17394a6 +Qy = 197aef36e47b571ccc0b41f948392d6061060063137d8c3b999ae507b76132fea1563775be555616cb5816b9b19e42b34f9673aab833f4beb9d1a0848a4bbf2f6f44cd03982748c +k = 08acd0f8f9660d21d62f391112908be73a4342767328d3375a8806dffd2598b6d77fcb4793e69f2390389a78c2b11866cf0f03666a60ad088d2c77bbc49fff6efc5b7283d02bf36 +R = 1004bfb78dc0e4fc0f2624bec6893d717a476fc76bb5c1d94c1dbf157aab5d1dc80f98a3aeabaac94d9cf9e26e1dd172f5d8fcd5b2d48cb3b7f0a4863813357b5cf8eae84478e44 +S = 30b1c8857977181d12c53cc2efc53a427801cde2890cf2ea2c99c6958b6869d0ac78ee2c846c241362c885835af49c47d20c30f3cbfab27d9cfeaa6d858694bab059229e30bf845 + +Msg = 90eeecff0a2e37df318c441df220dfea013ef29774ee92a56b213e13a798858f31e52b6ccb7599e7314f12b48a89884b113c1ba0526a54f3e9a33c940944319e084bff320cf5f391c02c731c4c4f8b05afa273374a1705d6c85337782ba7d36b9c00767180cad6422c11c581672ff631fa4c49d41b02481568ec87ea97220400 +d = 2b009530cb9d586e35dd8951ccb686833afb7a37ec253e547e85b253ba999f0f186b6d4ba41091615fe57678e9801b4dc94fa683511da25637b2acc9fe60936be15af16234c4ee7 +Qx = 5913ab6a2287d946b5b6d1e6c3d64117e085da7cf6388e333cf58d22494f4b067c684dca770ddbcea5db73f048b296e9c17284a8912b3cb722d9eaa17b6b1209311fb8e8757cbf5 +Qy = 007124ac6c48ac56746563db247bcfe6b20215ccc5cfb1d43c923daa07d429c8f0513bd1ff1180ef0f7927fa23fda1af25d20b22c935c426f9ccb402c358b57b812516c43111779 +k = 27a80a19e9c320b57146845fcf97d6debcffbcae877c33c62aec62a3351ef40bd90ef4c2ca39f9e51086931d82eec4ee7870365cb14e9c54ae735069801ef12c571bf1c7c1cf6e6 +R = 1de22c8984c593a0948164e6cc8631489133972482f6a7fb1c3c13f97e4584604930d369224850a1d24f267f41bc6fca04ad79326aef61f0d429e0e1b9e9d9686ee10f2bc52b104 +S = 085c6b34687081e280a180cd0c4ffe95cebbb0ad6d3b20a7341e467812f88c23973701cbf3cd2bcd2811415d0bf0cd9df229a88754f4cb0c225a2d11f57369a29edfd7b04639055 + +Msg = d3740cad41e2e365d80ae81da97fdf06d8b6c278b505e34cb683fb55ddc5189da543540914c0accd405dbf0063f6222885fda4b316dad4a83fd03e8d7b7e936f87fc0a5b095defc8a4b22fa97f00b394e672d5efd3e0a230c7e44dfeebda88641143502a400ed62e2a51f9561e5d652a43d616f16699e875deb9610c77de8e1c +d = 2cc2d0d7189cc8fb3565a039aee7633ddc00ff427cafad32fd2010b10fe249c9724d91785e7080203626038109158e3a61a3970aa3e51688aa7f5184b22f63af63f80d3540ec023 +Qx = 5fe95a030efac2e5d9522680da58606e3e7544a317a3f24d726b69238367d30fa586864d8c143c3695126ce8dffbc7e7fb789f956dbf53aabbc38af988ce50f1fb30294ea3e2d48 +Qy = 193d1e745d82781ae5c3b3d2233e502959d6862fa7987c6416584504f65639ca765578378b75d3844df179cefdeccff3c4c43aeb8865063e176fd43a27c93e329f8d4f6fd5bad21 +k = 02df3920fe4d328315353ff11b0264045248b32f48e860dc59d931ad65f39e97e3a683c7b5c64b21c3fa50a9685fa11f49df9b14ddaae03eb02754b01e03f60fc6aef1e5d6d7d3c +R = 1b91c4217b1580cfab56812c16bb5aefc1534ee8d049aa2e1d52a5bfc11519ff89f0d36ea2bfdfce8b5d3cf1527dcf700c0208a70595e9ebe4feafd0eb597e05df54212fd6eca3e +S = 21ce52440267fb16e713eabb8bf2d502c81939799f9d09cf48a50dce5da999f3b457dcd73c212d5d070056b1f373b07ad06e90d96febb7f8cdb4c423ef946f0799c038a3ee68ff4 + +Msg = 5eb53b5f92121396c5ff30e0c92da48db4fbbdbf27297f9bc82614ab78f7fd863e34096c615a02e349d8bc7ae4b0700130704bedf32756b5ee6af10da1cd717d624fadc57a9aa6db4a6c5d6254c0e8f8c3c0d4d03c264eeeafd52cac2c1968d9d85b106167a49d0ccdbefb20bdc10a2555f8149203af52853169a02db94e5e2a +d = 3d8936c00c131e38c6566d2464c4e207c878070bbf681695a6cd98cab2c6e80fe98cda80c66a5cf584e90a071144dda59c07b8fc7bb42464dbee5b6f739b0f2ee5fdff7e5a4e7cf +Qx = 0fc3a8a320e816305772bd5116cec2795d58633a9f490be8a1a360f21d2aebed6038ca4a5081288b6bdb1066307c26897ce38c24f8ccc98a63e371ff6b54f6016917b430c267af7 +Qy = 69719c868d8fd25a38a7338811904e3330a7b2289a8384bf24f6dad5312160f0093bf556fa061ca5e52d6676a8f1a3e4656740c82d3cddf0ac4f903ea885d42610bf1b45d9e57a1 +k = 050da632cd7aa58340adeb20389a2cb9897b8ec944c47e7177da65d9386a9dec5d63be7bb2d0f5b4943932e1fd7d87d5d7a80bc50a63dfd101a6a28005c894c6a6fa4c652dc519c +R = 0e6152b9050127bf306662f6beee81d024492b91efe87a56e70596a4a72cd02dd2f10b970c9a69909f85bf4783dcd3c32505d7c148166ab43b503ab098b6d95ef09a7932359f60e +S = 1f7d68d53ba161b61eeb17139eeae1587a6bd148e288c1f73a6bfb3a0d1f6dd8f9cdc27fa9e8c7a681410500c097ad01f320303421f1239b4a9c4d5446562b5b3cb2fc45a6fe239 + +Msg = 5aced64f702a57ed7fabd045a40c967a485d2a70b0a5e82561d5141ef329469b2da5964a34df203a980111a77adca376c643b9030aa74516f054648c1534d912ea66582adf3c655dbd71ca55e47412315df5e2893e43b2e2dfe6e4dedf426f11846ebef34a99f5615460ce0475f7bc54b4a4fd99e83c982097c3136ac6188a5c +d = 3dc7de970bce28a943d7599f2a9010fc99435b93bc4ba884d42503ac2941aa63fd07db34bcbb1127d56d6a4e277d6ca32051ea3467e376f74f98c3999d2f276b282ef8a28cf0cbc +Qx = 2066a50b9f961a58620f473fcf7d5eb635da47f4ce362f428669ea578d50d1c1513c145adcc03ba98f3d67bb422141c73e2f94ef9559ccfdc0be20eb206d3d114a5db302bd0751f +Qy = 4437e655bd255e7f013d197210bed70c5c1a6cc1daccb96145c9c438c8a44b4074629830d8df9914166c9378b33040d71918cdd0f47fa64b7c69f43eee0f34414b8f64882f90ac3 +k = 3b2e20f4e258b7f0cf69a460fece9b4794a12a37c0f8e7aa6f4f51dbfaf508f6f1e0160ab4388891efb09f0ca1f73178f0e8598750c9debd3ff856cb3a2872762ef9e16487a9513 +R = 2f265aa99ff806ffeacbf9ef7be575ce5300d3cfd4225b1835774ee075d7e530c9fdcd681584223f84a497119b4eb1fe34cd31d654c2fa262d7549acc251cece9530b26cfa3ab35 +S = 2c05ce4b35544bd1f20a68eae7f3483e0a0628dbb53f0466166257f69a7a110d2838a76d204e7a955a8977508e65f2ef6d7deee13e4e2ec0f2b9a8b4bedc26b3502813b0334a1b0 + +Msg = 43c24aea343d4e088bea25be69a332c631275c36677093e057de69cc83a4c5e70ab270e5a8930f55846f1a22ec10e03007dcf0942c6761e89c65c6a4f032eed97dc3a2c7f7ed1e82552fe48828a132ba16c41f6bd82a49335428a24fa1679522000e6a1d12c646e0e4b4c584398577ea9493bb334fa3cee8bfdb6c2e66f46436 +d = 2de6ee12eefa7a4a736484b19b42a513dfc059a060976edc3b0aa4b50e98d72df6506fed0499ff8480986748e938289e54a5e86c0c29733a9bcf5985aa63d8a2b57933a04a8e8e0 +Qx = 073fa1b62d469f2991d54f1472b60da87ba51be0a9dea361d417b91a4a75373695e9f27b3c672322315d7b566b1f22b96c54adce3e958080fa8a02836955f6264dad3a87fd11f06 +Qy = 452c0a07ff65fff741c96851657a5afc7eeca239622e1260414ed736a04e487157c52da98a7845bcf6f311e0f2e59bb92248b6d47dcb93da6f7e0af644b7aec7603a01950293d8c +k = 1c87653066057636f9a98a7c69a84e103df480a92739abc4d5ba53891591e3aaaef6ef3ef5e89213abbf71af9c84d3b30898580e782f557a03694446492afb05ab801d7dd631c8c +R = 086d539546c61e82d74319f0180411172acaf08b5296dc6435d4ed7bd50cf23d3a071deb3be01f74408e64ad244f069cd41227ba127145df5a357489f944b61606ec75e8377db81 +S = 0a34d9975fbd601614d04aa41506b03fc15189ee8102c0431272d691a322f3e77bcfd19d8bddd19b307012b6c6349f5ecf88b5a69e83588b0e18096117f207304b38c16a9a8592b + +Msg = e89210565959d93b483659e62cf41f0a0147ea23890c2f1a694c377a826165e363860e4b084016cda878a43eb68465f81f397ecd50087a25215ce7c4ededa3552218071fa3acd7ae380655fc8fa884998209ffc8a2c26f1ca19dfcfee455dad35a4e72caecd8da47eb9ee21b889162f5d3032724abfd1a31e68612e18bfa9006 +d = 05468f0df2c9854f5f655743e79c750fd8812db28b096d97207bae7f5aafc6b6090c9c636ead9e0fde32a1ff8d539b53813733ca812b41b58ff85a941abe4f128d59fdf9847baa4 +Qx = 6591750fbc104f82c213fe88aa620e8a960fd6140598e2e6282e0d5c5ecffd09d22ed94166109561a7f4f694e171189056d8b300b54c8134485500effc7123aaa23862e89791242 +Qy = 05bf8ec10a9ac6a92c54e7fb2135e2aa4f84da571d33227bde0aa2e6c1532074882235f3103d9a51e80b7a9a19067f35047ddc52462db7c634c291e8fc5eb2154f6913bd0846b88 +k = 242308c430de514be1b9084a7e6c96894cd5615a7c71ea22316e539986e9702080ff6ceef2980144c55d9749830c20c9ea90b93dfcdd28fd862b6a15748dbb3d982e4a275129c75 +R = 361e1b7a0f981bcc65480b370c5e09b1c2e2a67cf41646f6a3d829f663c09115892237400317601fcee78a04269411d267dad3e8fc6f069529fbdf0bcf9b5f13c9c6de1681e8b0a +S = 2620c29f86cbf698cca5f79de364ae131345a802c0cccfaefdd7375dcc9ba6ccac91f70943eb606506e51e2ced50491eb8f48769810b6dc178d56702838f1c2f0930f2a9e4f1db6 + +Msg = 48629ec97f56273599cd9903f8a84ac2ba74275b40e1e42fa47649568babe05cf63c8417d828251acc2eec525b56dc9082b68d51b0c2bbaa7389fbee15d058cf482993b2bedc5a9101f1afdc79989a812478245d191550109fc17215679553c508c84e3d4cfdea377088d09eb214e6f92410facee4790beeecafe72b2e3ed192 +d = 3d3c6a7ab9450c94aa3b8a1ffb678e5b647af24cbfd66ee3944e6f264f406295b803767471fc67936fdfed1714b4b8761a07eec86543b7c4da6bd2fcb33fa8cda4077737f398e18 +Qx = 42d536f1b15a22f4ba80066798d8d1c2704988eeb9423319c1850a1ae6bba4097307b515640ed3112e93f1f6ae67c60a4b0d2b6634aa7038a60b52b2b447fd1651857b71711c975 +Qy = 79eb18cc7493a1c7f2f9b621969b9ce9ee37fc0701f6cf56f5d5dc6efb13a384517a387f253aae1e93bb0a919b0c22e4d6cbc79b449b268a068b7eb2853324b96715d75b8c26f27 +k = 23ce112d60a2f7c29d77d64acd9f587e0eb75ef8e739b8548e154681efc24243594eef5e33d845b1e4e89bac56f2e9586e042e0fff38bcf79c73fc9aa5fc908261df5cd2c6cb821 +R = 3a770df8a2bc35e122c1bd551c38400be47f2499ff57618ccd01e14a2e35e87a67b0e40f9a10eee7efcc3d37b474f2840fb8c24a9adf93734680ae6b25818369c8608a2f8f338f1 +S = 0728a4eae5f5638a51579e224a24ecd4c997001bb8681e23a7476fbf78b4fab84497000f20c1e67e8a4e4116498bcee49ff00026009af31c1037172188aacd264fde8db15c97167 + +Msg = aa3a9fe467b1ca638dd0622c9ea235a418b39b2e15ad81fee01b6892b240783d8db3c72e16c13df8016dac6addbfb85232158325bd7432fca3b8bf5db3abd0b4c5ccd0999609dc42199ca4680692a0805cdd68108bcb493a558ab507cec0a2782a9e976928985352edb2abc0c07078b59d2fd86fda7fc76cfe573181d934c46c +d = 01ce010ea8e6e1a0c26ab22eb90f0700dc73b232c429d36371e68e429792afb7223f10327708bcff779ea55fb5f22ad87aa054e84d10f5450f1bc9a89279062ea2173f55ab0f76c +Qx = 4b2b5acef5921e691f10ade81b91ba8e68e73b33a2494cf4ca6617707861f334eb07ca96dfd681dd63f78102f8d792d66102117b739d477e431d9a3efd79bfcc18cea156db58a0e +Qy = 7e421337d4cb7a98cf9c9c6fdf9fa242904d9906d8a6759ef64a82cbf923b2a57073ea0eabd14aa4295bec84d50a1722fecad3e5f064bd3171facdfff45b170e49f185a3c193f2a +k = 326b62065b7c779dc398ee03a8332cfb940b0f24a7d3de4a90323d9e390ad3fb1f0036abf6f525d8d88ab6641302d10db447b78780d366f32ce36ae571e323124b21984c48aea7d +R = 3d2b207b428829ed5100a92f7276e16978e374c734834b0d627cddf6aff5cab72dafefc6c038a91426e35ee0f2c1acc11c55a34a89874100b89588aba7b02e19490e66eb49ef6ed +S = 3259fef5c2a0779ae408b26e6c7d581fa973156cdb07c329dde0c12b6c498e7a94577719865b7fcc0db078ba72a27bf338ec6b8aa41c15963538c329c55dee67833faebe3b643ad + +Msg = 6c3937014361799f1461f652841b5137eb0dcaf01dd293298d002f27e9a770b9e1a30367e35c04603881f0c814cf8ecfbe1619cc49cd516b1d60d27de37ed52a5e1cc300e2face4669f308ebe6747255a3d386f16778e494a7cdd10b45171b2bfcdabd91b805bf24857708c1b75e368edb2874321324f83a19154d3a1578c767 +d = 1e7410d012aeef02b3723346d24ebafd684c99087ecccaea1cf3735d52c4c81dda41812c09f1e874dc964d858ca240a19963d5dc89451f5dd6764426ae41cb23f19cbfdca0fc562 +Qx = 400a3bb3ff07a339ff98f7c45fe032cf42c0e25de8dee2934ce42dfb0c9894f4fce27fef299b41beb8579270efc7b01c0663c3f72d7bdd9f6ff5186eca9c42d15faaef8784211a5 +Qy = 06fe998f7a0db06efed050d178865a2b7de6ca7c789cedff7f2158a5e07ac1d335ec0dbd213fc9465399028fad8b7f4d2cd16fb8ceae4d3d53abefd2b4037efd7f7245296bfdf9d +k = 2bb0fb9c428e42482d5dbdb35157ad0fa713fe732dac8604c0194e3f9738fac5cf3874bd863718712a3da45b7c4612c8685465ecaec0930d9fec32ab25818d2f25fad580009b698 +R = 1062386d3e77043298eb88be46bd4e6f33c83a7358926b30ca06a6b7139815f6e1630f73d352a2cb9bc0619d08a89d4bde1636c74b6580543ed743073eec2ae0037bea2b3c9228e +S = 1ceef759d804ff7de526559636d0bc7930c096c7b959f04f8fec5d7e96129fba14c8341b0ed84a64c6cce7cd5b058fab7f44dcf3e714544c9b6f9c1d46ce512870deb51856e9dec + +Msg = 12fea55ffda15db902aa6a4388b9807c89c193cbf75b5d2a4c95206fa43dedc45974c80079933451bdc5b3ea015ed3ca2c54156dc61afb1bc82adefed1491302a48b9d3d2f474ab45343c611677d360515b93fb36da7a1c1b2341c9cce185c881c0beef33d43967134a190c09034ae3261f3295b79aebd3fe123616f73cf2089 +d = 2139839ce38eb879d266065dde5e5ea227244323b330e3ad5a0bc690f3c210f794cf18f0d730693887548bfbc434f48ee10ed34cb41d52172b06e448df938170a5e17311cab8e88 +Qx = 2ecf46b90616b534ea25cc9993942fd7576a1c4f2f443d3b1f56d4490bf0af669c9eb9d110fe2a65609875e1a924bc4b9ed2ed2315047bbaeadaa1029b38a7a87dd8751d4128e80 +Qy = 2aec3a2f2557c7152a4907af68aa39485274f20927b2da70823440fbd09cbc308d46e30bd6b705f615b7074fe5421ca36b4aa53861983eceae9a69649495952e75b0f060b5d26e4 +k = 2e3412b61eb23d33ca2910dc25dd14c04d2c8b403d8077a72b9511d71ee9da6d7e1db093b92287f8fb00aea0576f6712c56d80cc4e3554e0faa9c7d911e3d17682de831bf649bd9 +R = 06a3075efec81a86175cd1dc2bfe82e83aff1db640184a6a3ed7a0dcdef51aa0be0005c54ac05f9b65af265af7f2ec3d1d7c137184b0d695d701ff1aed194faf2efa98ce6c5e502 +S = 237d7ff92480fa7d6d1f5a0564a2608afe5e95ce2c29dd88853d1ad9d4d2beb8d1f0423edb883faadd592394f52048bf2dc26d2dc19279477ed86621c7a5960ee3c3e2d345fda29 + +Msg = c8395546842ddb545d8ea3db4efe970453dcb06025ac3b7a25aa5ef62070f3021b9a1fea91ff7055b6c398073e7886a6f71afe53c82c47b71377dfe291972503bbeb25bd477bf0e7adc8a5d3f8b34ccd0080d61e121214e1b29802b711cdd8a6bb2275a2395c467ec2c1571952992e448d736d8bd70ee629c75b5e32b8323a00 +d = 274f70fe69e4dbb55c5d404e39f5196335047113087f8711f2f67f2be4964e4fbcb865680758df1c401cd677b0971654b7a6aeb7bee0d6d80ac0de14d4f46f356b2d5545c185aa6 +Qx = 2b2321e0a1df083919628dd8b4c318b9ded8a3e660ce5585b21e46843228b4d32da765a3776c181654aad0ce90724bf85b01b051d236342b48d41a1dbda1e9904d659c98a039a97 +Qy = 20227182fcf099d46d9882c0b0f26b0595a2a3166248898df2f3fd27c78e7c0b8b59ef0ed6745660c0dea1acb567f9d943928864dd1e94f8eb6b5b8473c0c91485643189cf679d2 +k = 2f234066c936625fca10dd080cbbb1228c4d2054cbdeafc8a0a248c0d22807fc92c661b4f69586ecf9469bc4c22895cc73ecf492fb2165a12b027194d409677e7185de24f6870a3 +R = 3a48daa8e379b3b2f377049a4d462530c9ea67019752f4af4b4192b02d6e028386dcb9ef95c8019e90e09dfc8dff5e6f6812df491906ced39befedf16caef614d8c174e7ea95fc1 +S = 33f18738cb26d88c8c048c58a210c7be70c71636dc62c022df1bd7747d8c67bfcf5ff2fb3990ed35becf6c77755ac62aed480df55efea578671bd8d50536a10e2c0192bd42d78e2 + +[B-571,SHA-512] + +Msg = 10d2e00ae57176c79cdfc746c0c887abe799ee445b151b008e3d9f81eb69be40298ddf37b5c45a9b6e5ff83785d8c140cf11e6a4c3879a2845796872363da24b10f1f8d9cc48f8af20681dceb60dd62095d6d3b1779a4a805de3d74e38983b24c0748618e2f92ef7cac257ff4bd1f41113f2891eb13c47930e69ddbe91f270fb +d = 03e1b03ffca4399d5b439fac8f87a5cb06930f00d304193d7daf83d5947d0c1e293f74aef8e56849f16147133c37a6b3d1b1883e5d61d6b871ea036c5291d9a74541f28878cb986 +Qx = 3b236fc135d849d50140fdaae1045e6ae35ef61091e98f5059b30eb16acdd0deb2bc0d3544bc3a666e0014e50030134fe5466a9e4d3911ed580e28851f3747c0010888e819d3d1f +Qy = 3a8b6627a587d289032bd76374d16771188d7ff281c39542c8977f6872fa932e5daa14e13792dea9ffe8e9f68d6b525ec99b81a5a60cfb0590cc6f297cfff8d7ba1a8bb81fe2e16 +k = 2e56a94cfbbcd293e242f0c2a2e9df289a9480e6ba52e0f00fa19bcf2a7769bd155e6b79ddbd6a8646b0e69c8baea27f8034a18796e8eb4fe6e0e2358c383521d9375d2b6b437f9 +R = 2eb1c5c1fc93cf3c8babed12c031cf1504e094174fd335104cbe4a2abd210b5a14b1c3a455579f1ed0517c31822340e4dd3c1f967e1b4b9d071a1072afc1a199f8c548cd449a634 +S = 22f97bb48641235826cf4e597fa8de849402d6bd6114ad2d7fbcf53a08247e5ee921f1bd5994dffee36eedff5592bb93b8bb148214da3b7baebffbd96b4f86c55b3f6bbac142442 + +Msg = b61a0849a28672cb536fcf61ea2eb389d02ff7a09aa391744cae6597bd56703c40c50ca2dee5f7ee796acfd47322f03d8dbe4d99dc8eec588b4e5467f123075b2d74b2a0b0bbfd3ac5487a905fad6d6ac1421c2e564c0cf15e1f0f10bc31c249b7b46edd2462a55f85560d99bde9d5b06b97817d1dbe0a67c701d6e6e7878272 +d = 2e09ffd8b434bb7f67d1d3ccf482164f1653c6e4ec64dec2517aa21b7a93b2b21ea1eebb54734882f29303e489f02e3b741a87287e2dcdf3858eb6d2ec668f8b5b26f442ce513a2 +Qx = 36f1be8738dd7dae4486b86a08fe90424f3673e76b10e739442e15f3bfafaf841842ac98e490521b7e7bb94c127529f6ec6a42cc6f06fc80606f1210fe020ff508148f93301c9d3 +Qy = 4d39666ebe99fe214336ad440d776c88eb916f2f4a3433548b87d2aebed840b424d15c8341b4a0a657bf6a234d4fe78631c8e07ac1f4dc7474cd6b4545d536b7b17c160db4562d9 +k = 378e7801566d7b77db7a474717ab2195b02957cc264a9449d4126a7cc574728ed5a4769abd5dde987ca66cfe3d45b5fc52ffd266acb8a8bb3fcb4b60f7febbf48aebe33bd3efbdd +R = 3d8105f87fe3166046c08e80a28acc98a80b8b7a729623053c2a9e80afd06756edfe09bdcf3035f6829ede041b745955d219dc5d30ddd8b37f6ba0f6d2857504cdc68a1ed812a10 +S = 34db9998dc53527114518a7ce3783d674ca8cced823fa05e2942e7a0a20b3cc583dcd930c43f9b93079c5ee18a1f5a66e7c3527c18610f9b47a4da7e245ef803e0662e4d2ad721c + +Msg = ba6be551bc60653192401ed8ff9e1acd9013d8811a7a1389528bf07438366f5772cd7aedad010c19c47622cec03a4d35b8003b39ed901b720629ab59de55a03c1ca50a62987f8da159e356245df58d5ae1936e65f3cd3acbe03ad1d0fcab4aaf2a7a947549ae776772201efbc6fab1aebfa1d99994d4f43dc28f39c0f279b992 +d = 2a69bc1df069c6e89722521a63675f318252be629e7558f3716917998e660ac960b0b750562846fe6c12ef492951e51e224754bab84a6eacd4147a5f26ae85ee4381bb14ec2a8c7 +Qx = 4685c0358ca31883cdfd7d609afa8b1e47540a97f473e0ebe98b0aaaab9418877aeead3a26fb01a4725fda20e7223a4fe7de0df6891c0812555b8b146918d3b80edd11615d95b77 +Qy = 67c92736447946c7577965b613e18950d813a4df049a6000895f9dac34d73ea46a83c6a4e7c83831af0d33026825664c44090953521175b9da2a7ac563a0fc5e13c85d34aaf49f2 +k = 1700d9ac00a987ff3a1d0be4290979317fe60f4f8ce1e0e72a026fc89e28c0070b76ada14f7a1a66ac2e8aef17eec18b568ada4fd59c05414e55356fc17d9e5079e6cabfc1f220d +R = 23a279662efec48f6cf8c7334862525b52ac37a9b03da6a063da2849f87801563242783434fca02fa23e32249666ddc6f596e07750ed21de303f4f10de56f1d37101cb0826bb8bf +S = 3b449467b150cba0d7c2b44280c5ac452f1217384ce121c979625d313394f6cef501b81980a02567ca55da2bc313dc0754b5256b08d8e3b63ea033253b205cc5dcb014574b8e9a0 + +Msg = 295720a79ac8201f40a66b06ae5d970afb15f36582897eed25cd92edcd00f70ac8e31c556eed4375ea044c2e8b227a8e02c0a3e996c9272d52ac7b3ad43b80f217295dddc84b177cf1e800ad08bf7fdd021fb2f49b54162092f8d628679c4ee335abbc90c027264c8b288c6e16eca3172eaa297ba50626b00fe0a0ad3a9dbeeb +d = 0d11ed1b78b22b3420df4ddc4acc7c2286d9569dd6dd88e0fa3ecae69bcced68bb81bbb4ca6e9b54e67856e7fdf39155aa27aecb9cc827ccb9cdcf9ac633561b27d8eebfc261aee +Qx = 1868a1335058a69e3ce24ea4e6e8dc25851777bb28d3a5da67b741ec9c46e26f2d2ae70a48c3e4feabb3b15b3c3ebd561f667ef3b95a587621de6073b9c8a904755566c5f7a3b42 +Qy = 6365a03c3f3066eca1af17bbbd08cd52e89f8095075b415cd4b82f3364cbff008fe3642fe71e8a8c634ad0e5d9979251e6cedd42cb97c2203f743210051f5ee1b70c861d2a72c00 +k = 075e49d2ff6f2aa8b44fad90446474ee0e72323a3c39e731b6c2b075cce0cb9d193bc3356f8fdae0e0143603a57028836ee6451cab101a6eb550042cb41b5c4233d3ad3e87034d1 +R = 207a8eed0b87efe65ec558a0ccbecb13b9215e176abd93c1a4803fcae713927ece70ec6c41c621357d78a13a950958871a52621f1de7ab74befd964a0e8f4820b84af3e0811bc67 +S = 2f02017714f54089652e02af36ac5165e44ac4a83747c805a9e003fde4bdb29561dcead2c76b02c195074396a2dcc1b93a256c721716f8eeda8dae443c3eea446118fec3cebc4dc + +Msg = a9cff41c6dfdc4a12f31dc375a5455950077ae323d0b7a3d9a8dde73b76e9d7b94ddf9c88ae8e6c262d704052ac47681fc35adfc56c904baaa6e146eb653984369d76a85596cb744941aa7b558c945ff2e81bd5ef7f00ecb4f43af23b4cea3bd4ba7b1899f1868a0c0ecfc62ccb1d588955597ffbbaf34cab2838efc2b866669 +d = 2c36ef754b5bd065e9eadde684750acc52795be80f54dd3d7a7d743d968a18f7e404bd71f8a76eb0395f396df5a7c2ff7e0ab6de35df34282fda6ee01fe5b9b68ecb4e378dbe32e +Qx = 4805e1a23b6eadcf91647b40903bc1fd3b9921861c942fc24d2c03d0544e7c01f004caeed04b5c4ebbce366a098a878c322cbebe7910bfb0f91b284ac1aef344152fc5831669b79 +Qy = 4f589ddb4da482ba1e9a59241b1dfbc7e9b9b69e8f69f8e90460ad58fdecc48a56842ea6aa0537abec0a605ebfb713e588685a98f62e05a7d52082bfd57e3d68fb7851b37ec5567 +k = 2f2002bdde0c0b0fd92e96abe76c0858e42fd7d94a181c711fc6753572539e18effa8155cde7b1e9ceab2394f9eba874b7ea257d7c308c8ac08500f4944af5f33057650608db8fe +R = 27f9109799bced42730faecdeea68259383a45033c6d5dc8d87adf994b46beb34177e013700b13f1253cf756a8866218e9c8adc180f3c242c56b3de28405b36940d53c2aab24f1a +S = 20a762ffb2f5a88b0e1356964fb558b555c424946109d16c7548f41a33cfe41da1f483276a27b188faf948a56670716ddf3b187570c9f514869c4492d7773d6ce453a075f9bc64f + +Msg = efa6c582d7fcf5e431aa89b3b00180c0e78efd7ccb0384d90b80e59a115a13e55001d951528c42860132531c9b8ab29dda7a657c53c2ce96fd85549f6f1810e121eb89961295335eaa0e40532d85814a4206e6fffdf9bff76599da9b2e71a22ed572910b0e3bae38ad72c7042579f106739a8628dea5a745168bd918736e488a +d = 19ffee50be5496507e3ef5c40ee88a49625e46d1dd1686a52b09ad4a8e3ee9ef364f953bfcd97c52104eecb6138067192997cd4ebadaccb73c7b2560879289a46353a756b73cc43 +Qx = 77dca410e722009ef11b37742c2c003ab3015d0ca0328a70d9d41aae04cb64f7746f1c348b08458eb3bb1788f9ffe7d0570a9b689a9b7aca43e05400bace7630d598f5b484d13c4 +Qy = 7291f74cddd9ff69470cf0d92afaaddcc4c8c274d4a7a64fd94292ddc8bf080606795376bb725ab4d32c72ef77dff34cfedd34aff2f463d635bfcd7e1fd002d84383dc5bf8d5d23 +k = 2ea37750fc3bbdeec100694068d55f92fdf35bff9ed49251c4b8bbfb2dec2dd4446999af8848e05c7b819aeb1864430ab4e8c1d684e1cf78947a71b04d5ab8ad61cc7e3e4e24205 +R = 12ff1852eaff37fee997531039adb1fb2f9b4f4199670c022e8534625fff1fa93390ee9bc7204ad2ba3efc2233260943f1d2381a3cc025b78c6d1f660a7bd6f42e5ed3c123055a9 +S = 1b4d8abb28ef1a9d77066921ed50eba64b8433cf00c66b8467269a4a914f568cdb86c766a7a6a52437c5d98cfc9a2130dfaba20f3c2001f31bba7071647d51fb9fbd5fc67ee120f + +Msg = 211acebfaf13bba33a9dd16722ec53baab92a140127d61372cbf1850f2fc894e942e25d780778235f880743953d04eca7a9205602e388172aec2abf35412b483490751f93b51239b6701cb0aab14e5179b0d7f55d8586358381dd83e3e436bf69a6820317d1701750cb1fea1293467ba589eec5f5779c2dbf2a9b8f28c4dc239 +d = 3129e96fd28c4198cc5242c1e3531a3979fae643d527044e98d7721aa56b5b4b45dfddfa17a4115e10a2b4f46d92f81cbdd7e86e588a4c6d8c2b3a83f54cebcee1d1dd33e85d81a +Qx = 73a92abcc991e3f89d82c47fa0fec48e3e7c4d97e2525f8dc2d24da39f616af4a5a804d2603703f6db7cc9324c5b56a21009373f6605f561c8503394e7746e51273b5722ffbc23d +Qy = 0684c842f03a53a60cce087f4fcdbf23b7a28c48b6b6544f583342a65d97dd87037c6fef176a1f00513713468273494a5be683b68c5e75bc08995fde763bb6f965da1acb7e894f1 +k = 0165e52640fcaf8cbdbfe73cb8058c53045e7670aafb2def28d2c9eceb5ed1634b5339cc47ba981eb6eb03ba714c7717e9ed5acc15c8f304702a0409bd4508015d4626cfc5484b1 +R = 27dcdf16b7156a7a05a752da28b5bd6b233e8a7c16eb7f9030f29c4352e6508f8424d1b5ba789dac4152ac4812ff7975cce69908371a81a4d7d9dd70a8dabebdc4e3af27234f0d0 +S = 32a654a31f09a9803e502a1440c2bcf122780f4f47aa37e15991d9a548583fdca48800804712816b212cd3c657e6bd4cb7443a0288592541473c5086e1277250612c21346538374 + +Msg = ee592e20e0a45c18089c2e41460e65a7d22ed9714379f095d43a308bdd383128aaa6fb24e9d35fd28fc95c5b792ad75c980d2cdf0f460ac60b12c5919d3cb28dac4d488196be6c2dfe462b1b0ce59f8501692255840f5215c0fd8b74b1996a267a5e3b22d2841cf0a0b6315ef4ec7180f1c8494f4c07d5869c01fa2711739efc +d = 3d723d2697cd07dd8444f992f2ab4a063db334034c25ea9be99fd7a1f495e3a644e5ea033a41264e0d24a911e55741d0cab80a0bd678eaec2bd1e60424d4491eb86d664900d907e +Qx = 0c7a229b5fb9fc774c1b6250f3bba2f0972d1aada7080641c014d012db0637a0656a43024ec0ea25ff70012646dc19eeb1033aebcc96a001ba876b2f5def6e198b8d4a53f7c7f4a +Qy = 09228a68eafaac214fdfa19923a0c19629de31ac0967c9d02c53dbf221f9affb735d3bad732f381f1ca414d70920231a78f742254d895a33ffab492f8e6094a542e77962a324ba4 +k = 3b3724a5933353bb9ff5f742f59385e780caa517a963590b7fc89882bed95cf90ca6365ce8b882f2d96e56bd866a5c437733b681308c570c51ec893ea95fede66c7aaf4561173f7 +R = 2a487c1fc29426e8e85f0a35c177cd168a444959b2f5cd4519b9edd52af3ea829cfe964ac2b59198af8e2d3859ebdf9885ebf57bdf5767da1611d3958de286f91ef397230d65599 +S = 10fc01efcb22b982f992efb71887bc79c3f32a9088bc2011c269924cee0f47c36452399d499f2933587081b872e9fd2191c20cd5cd94927839228ebcf22cf7acdf4608a2fa66310 + +Msg = fffca41927debbd53455821441d9115db99fb31bfc69752a382f57bc7abe021f148346ee29e17512c64b4918ab2391d12d6e5643bee6b5682885dc28177b292e23a37ff99b359b9cf7578432af56e0ad1028a6cce7428980654c145af8daf09addbb3be11228d3c742defca9d3b1667f48c63091fe3307ecf72667b02e008f24 +d = 1999ab45d66cd1d3a0fe6aa43bf5ef1e2a67637d53674f6fbbfb9b582be91fc42a12cdcad94b50b0fc7ac55030de24a0b99fbc4314fa743ef4b5198bcc5f54d8b669fbed78e2e91 +Qx = 0cbf3b0bb4a2e6c225aa922bea3b233da4661df5da7e0a1cd343a9b6655ee87fc60cd763dee21eaa2b81c4dd5af6f4fadc3ceea643b37a6b17a6501e1b9b689fb0c4716911c1f10 +Qy = 14b5a9ae025f09066fffa6797ddf95f27eeade06b8ca5be5738f770362d5213c46ecfca58e3c60cb2bae1f8ab1bf0577c80b4fdad02819fc174cafb33df64fc0ec79713f7b25209 +k = 253b533d3ad1c7095363e3fc80cb32471061e44dab3f9ae0ea6252f6ef169cee8badd3eccb77096ae9224f89baeee7e183058579680661655fb689419e36a61e8573de5ecb4cd09 +R = 3ba94f7682fb61de725a35caf1d4d799c4b05a1d1c44eb1c251dd8efab6b7d713c3fb917776902a1bb202f9226558f4c1e75964349717e6dff938d0befea07a9ca1bbd429dd6318 +S = 226f43be8e24062180c726b5cb721cc04ffd3acd82183925523ff9e8631aecbec2c224d5a291bb225f0da726d256aa822ee7cc2c7d69df3f2a5beb21132d91bea22e4c5db900cec + +Msg = a2f71619ea04f7057e6943c2cece8594b341ec3b96c3915d924f94ba13fd7aaeed41ffa0e842ade414784f1ef825fcf2dbcf7bd8263b802def45f94de596aec0c121fc06558c7bb06b9f27a9bf56c42090b5dc344e82b69c4f528d33be166764a593483f6fda0cf56e6000ff363ba220f5ea0ea2c3191615c7ae3bb4fa575324 +d = 2ce1cae0716205330d730e6bc6dbfb6b951dc83ee3b4a7dae75d057e32e8a46e22be75b5f09135452b29c34dfe81a9be2e8dcd243fbd946a0ed14a832a7802e20cfe1abfd3d6e4b +Qx = 75971399fa621ce535144ec1d57f544d798a0a59207166c3d657e5a80ac00e8f5b643448e3546064d68ae624aaabf36face3016561a248256ff9131950ab8b04710551e12222d0c +Qy = 224a50f321647f47de3db4fbe1bf1e3a3dce8a834312779f66037315e3326721e3fd63d4d6ef92b7ba1fa9aeb70f92e2a6701458ac8da49ac386491f2306adcd8dd781fe75e99e1 +k = 0ad95aa69cf9f40e13f8a72ed6d93388168abc8001670ee4d95fb4b726b1f958205ab2f458df8bb9ccf2405680d0e6951abbb922cc11d47cfded93c0efdb70caf0c54e7ae96d7e5 +R = 09ce019161bf29eeaf323933045f59d2efc372904ba50c4a6602b8305234a851d95f06a5b56193ad5d28488102ec25e3f421a5f5c4626b435b423d612e6ab60e0a4fe5d4952e2c5 +S = 04f7b7ac787b361c2bdfa767da9c22152e402184a7ac133f651fdcd928239215dc917401122a6d41e78299b4235e085399e594465b7f8dbfaae9bf302d83470b4295ea06bb9bd1e + +Msg = b60415a831eca2cf60c79a334ef2f327a76d290846ee588d5d33d0a826bb0c7ec3e11dbb384a7f89c8d180425dfae7463e0ea6497d2eec1dde112f1c1efccb532a2e2b66a28e2d36d4252a4c3b12850d465fe21bddc441b92e6a7b0f67744f7f6e7812a0603211a26518b311a5b190ed890ad852bed4f6ed13377cab3eebedf4 +d = 2c9d0fcfcee7e75c3245ba955ae04188b1033c55ec9c821d8de7685276bda3e9a93c3ae1b003e5ea722913e7b169d67b1aa2dc8cd42adbd9368672a3f81a6817bf3e5529dcb0c8b +Qx = 19cba4c8ddadb596d7303331f2a22461849ebfbc78ea69277f72dcfe23d08397025ff6691c61ed9958d68a9c5dd8a32048a89a2553afb9077ec43358763756b1473ab2cd8f25b53 +Qy = 319eeaa78444b7cc5d8cff4e9199ddd2c6dc7bd935a1be1d8b1c657dd5ac49bc92b0cd91304ef44ddb7ecac05518301bfa0e533402043533f99549621e31dcc282a52186478df2b +k = 385e12170ed0b23c9c65ff7edd413145fd343dd841e85c498fae5f36e57764168899902817d4dc39127010faa1da68000a511ac69f80708be5afe1631432f3bab7aaec2bdeb11b4 +R = 231ef400c6a3a0c7b26ba1b92341b72e138ca62d04ea2172854631c40c48081a18a57e9f055748245d3e83d10d21af39935b0e50c9c86956ac46c1ea03ac4ae023d84b24f830973 +S = 24d37d67afafb0676cd7b5da2960cabfc804b0b3244b5e6739f8fe43d0841693d28c61b8e76181f8aa24940d76fc5ea8ef3a95f72f67303e1ed85ad6e83cd2c44fd0e0f3f2f44f4 + +Msg = 5d15a08226cc74cf495be681b795d0bde26b19f29aca1a8c6ef77d50271ebdcb4e5fa2df23961fe11620b1c6580183f6ebdceb2c09516c8127be576496fb71449bbbf0a9d3d1c48a25024619b97c3e0d8b165897db96ae9758d13ac28441d7cbfb75b23cb423e0002046358bb6d64779974a5995dfe54b398f95f7d64fc52d96 +d = 10c057bbaa44ef0f565edc288bfe66d4f6acd8686899359bca418ba89fb690429489a37bd3c6c9f3a8714b2ca225868c6a45fee360e378a676f7ea39321790f32a4b005b81dce43 +Qx = 43b1e7d7b2aee3563813a6692f0b4b61ba82b801697c3e23724a2fbab2af80a2c56be55af41def0a90cbfce7a45ec61629906055a8b2a5013740e96859e580c444ae9f0ddf73afe +Qy = 6742f13244f1bf156d321eab2c3095ca548c3182c405187c3de2fbcb01d0e16e1fef246012c87d4d32378629a75b694572ec8583ae0cc813ac64f10bb05a9e52e4805590482f289 +k = 2b8076102a6448bd4c4e192e93cdb96ea9a6c7f6753818267ee9e67644df1a4a6c9ff64bbe9f64904648cc640fb7f0cce69f9e02878ee950b91ad559a9ec0ae15b676d933f1620f +R = 1ad97f4997037adfe306f3859d550f9fd89bce8b566e657d5742feb17466b6b8d507d5810a8cbba44d671b043ddb557df084bf5d1de74ef8bbd6a93690459fc16a17b80dd6c0f28 +S = 3262ef6e4175e7afe095d18157f67b3d12564d54954e9964e991c31bcfe1dee7e86b35491ce818400cc0f83b819f478f2f2c2d21c6c7a6be43938841559e09bce70b0d61fe51245 + +Msg = 9eca4bd88200baf61b901fca53dc1f1e7e3f83b94d58a6cc6a2adbc9b1a35fe3f8ec61787c76ed9a0d696167cd4fe46e1a0883fda564666131753c576a720125e0b712db1da0278067cb899bdb14eec08737e864544663abb1d62f34a2114be07e8e3cf56e2d17099299ce6b6d83b1a34e6153d7c6a32a72c7b1bf4583fcbcf7 +d = 2c182df7976ea93d996f3ba5d2221f3cb755cc7847bc3fe9e022fa4285046f5bfb426bafa3580beea206de36f87593ae561b4b74a03fcd61fbd0e8d6fd5668f2148819a88a650aa +Qx = 6004b26a184ed710a5fb67e9d042f7fb9c8f5584b1f70a91b0b3be41c3fd2cd1a537e962fdac8756df33f80fce2bb1bc7241d325bfc36dbaef7cf625918d589b6352fa744718910 +Qy = 36a29b04a494abfe809d956c3cd6f84ea51a7fa28cb39a52f16137a13f72f0726a84f6ae53ae24f5b468733f4cbfa0ce5bbbc1cc7b348fb996d33a45ff656a6a7557619f598a6b7 +k = 2ab349232bcb4f4816b26bd0049e130fffc90ca0b9308edd50fb9055358a87fe798d00140b0ae01ed8b1f6bb9bfb726b253c3d4949ce9eecaa6c7fa84d1ef812669fa929f26be0f +R = 0bbf2f9765b12742224ba7d064358c0305fb63e9b54a831e302a4546aa02cace798d82a188d2f536d78544c1571f481289d6ec69d117648026490e781f1eb9fca59bee05234ba7e +S = 27e07ee0a1a99c90753cdc8c0291da25a82c116e62ec58b93f91086ac1cc039b35ce7d8b53cdaa92a5ade65a7684b6e7ab79873dce33dcd467c39d0c764ee390b7fb25ca18912c3 + +Msg = 707450bd84141f3b61beb12ffa5ae89d812dd11badcdf6a88a2d50fc70e23f6d822ff4477047abc58cdfa28f97ad7f4911ae0773c04ebed1f51bb2308cf6e5712c4aaed461edd6987fdd1796aab70198276b601241f6a14225dce575830ff60f935fd9f567d1d210652e4710922fa793da78c8fdc30c273cb08365c9fc887f50 +d = 2d3a65bbe133cc98cf0eb56ee1362195968b4eab960a1d55d8b762f1361fc21348d6f275d4bea1de7158fb97c995e20b92a9c887a3e332d154667ad167acc632eb88a0ead6113a2 +Qx = 34355b54d00c3df7c2762ee2982cb777491aaf78e550c4d2ff5d5a893416eb3517671dbe522b8c553fd71edfe0306cd7628324f4f748091fc5d84ad8af33b896985674649a6f4e5 +Qy = 7e322a04eb600a3faf3e045959f1e9f798e1c965ced40fd4c0383c0d4e79a96bf693a91d7662780990d0c9dfca77a9bc0e13551d2ab35af8a153fa34ea903961fe66996ca053b64 +k = 0a59ac1240bcefc52456486ce23b780cc92c8b89314b8442a6898c373bd0adc3725e3ebac580546d1ec82ebfb2e04c608441d962d759ab5f5af1596c6623487e1347537a3c35bf4 +R = 0c47ef55d93ac36cee537160bbe39c3d4504184188533edfe589a5ab6e5a3e06ef413aa48710d304f0b2bc380fd69a34aa0b8e2e9466fd8a131cb056dffe4b809a59fd83e594483 +S = 2d8de1e8e2a52dd1be08435cda69e673b328573edeb1767849536e6f2d5fc8f18f7bfde936d8c32ecbfa97bf976133d65641320ca1c41e81c388fd6088884bbd89274b1976470fc + +Msg = d5ce9d59391cdc47ef942dd2a818d024ae3917deea8a5a4214e4db6a0c5e6b0936f3e632fdb68a3f0006e05c44b7232013e1da5f877cd197f44fd6f60c1fd2378995e9a47534948c5a09e33750f07a7165072ab38095373b07a50bc1391eb6b650ee13acd63d0352e7d9c31695ea1ec6323f9b5f57b426ace56aa7fdbf419be0 +d = 2a920e8dc928acdd56e3655b2340d4371c793e66f67405fb7a90f31e9c4ef466cc44331d1d2fe3ff7391d2576dc6640772166ef8c154a5ff1808f5dab2f03061070ec8b3f786c36 +Qx = 5edc0fb974314e21ad40d73524d5620b7279084e3ecb9e58b06340ae53d2383efd206b8b1eb3dd60c38f593efc05e2ba5fb8989472bac7db60fcada2d18d4108ab36e8c20cc710d +Qy = 0444cf65175f6bbaf647739cfd8407e7036fc6cc6208ccb9d776eb13e13b377136c683e108775d85b6bc5638926432a17344de965d45e042a0a8e0b63c7fc3a36fc15cf718f3baf +k = 35a0215892d0c52ece29559ebfa061011da8d597af6b3d1ee988ea4819be194c79a42681476140738b1b5dc191485bd20c96c282ab38ddbc3987343155366b6a5d1ce7053efcd83 +R = 1a69a9a51f6b0dc196b2a8db2e8bf61764d4c65b038f43b5ed6b5dc2673971c32928606f92b7caafb4dab3cd61ee724bba71a0d5c788cde4b96ef6b453f2a69126dafc20dbc7c82 +S = 13b5463636b8462cd9f479de8d114e29e7011489bcb9735ffe9ca0707a07df3c0aba05043eab387bfedd9fe982fbf04968f2be200e9e052cb4b02223b8579913d713acf94e7dc80 + + From 2d4185f4f1def7c32d1a556521e26ec656234220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20=C3=96sterlund?= Date: Thu, 20 Jun 2024 05:23:08 +0000 Subject: [PATCH 046/102] 8332717: ZGC: Division by zero in heuristics Reviewed-by: aboldtch, shade --- src/hotspot/share/gc/z/zDirector.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/hotspot/share/gc/z/zDirector.cpp b/src/hotspot/share/gc/z/zDirector.cpp index 47e24063ead75..162e05f2c0763 100644 --- a/src/hotspot/share/gc/z/zDirector.cpp +++ b/src/hotspot/share/gc/z/zDirector.cpp @@ -524,6 +524,10 @@ static bool rule_major_allocation_rate(const ZDirectorStats& stats) { } static double calculate_young_to_old_worker_ratio(const ZDirectorStats& stats) { + if (!stats._old_stats._cycle._is_time_trustable) { + return 1.0; + } + const double young_gc_time = gc_time(stats._young_stats); const double old_gc_time = gc_time(stats._old_stats); const size_t reclaimed_per_young_gc = stats._young_stats._stat_heap._reclaimed_avg; From ff30240926224b2f98e173bcd606c157af788919 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Thu, 20 Jun 2024 06:15:19 +0000 Subject: [PATCH 047/102] 8334239: Introduce macro for ubsan method/function exclusions Reviewed-by: stefank, stuefe, kbarrett --- src/hotspot/share/cds/archiveHeapLoader.cpp | 5 +-- src/hotspot/share/prims/unsafe.cpp | 5 +-- src/hotspot/share/sanitizers/ub.hpp | 43 +++++++++++++++++++++ src/hotspot/share/utilities/vmError.cpp | 5 +-- 4 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 src/hotspot/share/sanitizers/ub.hpp diff --git a/src/hotspot/share/cds/archiveHeapLoader.cpp b/src/hotspot/share/cds/archiveHeapLoader.cpp index 57a96a8c4e03e..feaf245d22c6b 100644 --- a/src/hotspot/share/cds/archiveHeapLoader.cpp +++ b/src/hotspot/share/cds/archiveHeapLoader.cpp @@ -34,6 +34,7 @@ #include "memory/iterator.inline.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" +#include "sanitizers/ub.hpp" #include "utilities/bitMap.inline.hpp" #include "utilities/copy.hpp" @@ -61,9 +62,7 @@ ptrdiff_t ArchiveHeapLoader::_mapped_heap_delta = 0; // Every mapped region is offset by _mapped_heap_delta from its requested address. // See FileMapInfo::heap_region_requested_address(). -#if defined(__clang__) || defined(__GNUC__) -__attribute__((no_sanitize("undefined"))) -#endif +ATTRIBUTE_NO_UBSAN void ArchiveHeapLoader::init_mapped_heap_info(address mapped_heap_bottom, ptrdiff_t delta, int dumptime_oop_shift) { assert(!_mapped_heap_relocation_initialized, "only once"); if (!UseCompressedOops) { diff --git a/src/hotspot/share/prims/unsafe.cpp b/src/hotspot/share/prims/unsafe.cpp index d290627c1972d..942d9100c29ea 100644 --- a/src/hotspot/share/prims/unsafe.cpp +++ b/src/hotspot/share/prims/unsafe.cpp @@ -55,6 +55,7 @@ #include "runtime/threadSMR.hpp" #include "runtime/vmOperations.hpp" #include "runtime/vm_version.hpp" +#include "sanitizers/ub.hpp" #include "services/threadService.hpp" #include "utilities/align.hpp" #include "utilities/copy.hpp" @@ -244,9 +245,7 @@ class MemoryAccess : StackObj { // we use this method at some places for writing to 0 e.g. to cause a crash; // ubsan does not know that this is the desired behavior -#if defined(__clang__) || defined(__GNUC__) -__attribute__((no_sanitize("undefined"))) -#endif + ATTRIBUTE_NO_UBSAN void put(T x) { GuardUnsafeAccess guard(_thread); *addr() = normalize_for_write(x); diff --git a/src/hotspot/share/sanitizers/ub.hpp b/src/hotspot/share/sanitizers/ub.hpp new file mode 100644 index 0000000000000..23e8ef4576c9f --- /dev/null +++ b/src/hotspot/share/sanitizers/ub.hpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024 SAP SE. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_SANITIZERS_UB_HPP +#define SHARE_SANITIZERS_UB_HPP + +// ATTRIBUTE_NO_UBSAN +// +// Function attribute which informs the compiler to disable UBSan checks in the +// following function or method. +// Useful if the function or method is known to do something special or even 'dangerous', for +// example causing desired signals/crashes. +#if defined(__clang__) || defined(__GNUC__) +#define ATTRIBUTE_NO_UBSAN __attribute__((no_sanitize("undefined"))) +#endif + +#ifndef ATTRIBUTE_NO_UBSAN +#define ATTRIBUTE_NO_UBSAN +#endif + +#endif // SHARE_SANITIZERS_UB_HPP diff --git a/src/hotspot/share/utilities/vmError.cpp b/src/hotspot/share/utilities/vmError.cpp index 656fe9403fec7..0b3ccf9c747aa 100644 --- a/src/hotspot/share/utilities/vmError.cpp +++ b/src/hotspot/share/utilities/vmError.cpp @@ -60,6 +60,7 @@ #include "runtime/vmOperations.hpp" #include "runtime/vmThread.hpp" #include "runtime/vm_version.hpp" +#include "sanitizers/ub.hpp" #include "utilities/debug.hpp" #include "utilities/decoder.hpp" #include "utilities/defaultStream.hpp" @@ -2086,9 +2087,7 @@ typedef void (*voidfun_t)(); // compared to one generated with raise (asynchronous vs synchronous). See JDK-8065895. volatile int sigfpe_int = 0; -#if defined(__clang__) || defined(__GNUC__) -__attribute__((no_sanitize("undefined"))) -#endif +ATTRIBUTE_NO_UBSAN static void ALWAYSINLINE crash_with_sigfpe() { // generate a native synchronous SIGFPE where possible; From d7dad50af5df356089101ca440fca5232fadb81e Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Thu, 20 Jun 2024 07:14:01 +0000 Subject: [PATCH 048/102] 8334544: C2: wrong control assigned in PhaseIdealLoop::clone_assertion_predicate_for_unswitched_loops() Reviewed-by: chagedorn, thartmann --- src/hotspot/share/opto/loopPredicate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/opto/loopPredicate.cpp b/src/hotspot/share/opto/loopPredicate.cpp index e23da54f765e3..bccc01a86ddb0 100644 --- a/src/hotspot/share/opto/loopPredicate.cpp +++ b/src/hotspot/share/opto/loopPredicate.cpp @@ -373,7 +373,7 @@ IfProjNode* PhaseIdealLoop::clone_assertion_predicate_for_unswitched_loops(IfNod ParsePredicateSuccessProj* parse_predicate_proj) { TemplateAssertionPredicateExpression template_assertion_predicate_expression( template_assertion_predicate->in(1)->as_Opaque4()); - Opaque4Node* cloned_opaque4_node = template_assertion_predicate_expression.clone(parse_predicate_proj, this); + Opaque4Node* cloned_opaque4_node = template_assertion_predicate_expression.clone(parse_predicate_proj->in(0)->in(0), this); IfProjNode* if_proj = create_new_if_for_predicate(parse_predicate_proj, nullptr, reason, template_assertion_predicate->Opcode(), false); _igvn.replace_input_of(if_proj->in(0), 1, cloned_opaque4_node); _igvn.replace_input_of(parse_predicate_proj->in(0), 0, if_proj); From cabd1046d08865f122663d18708d40e5c885c1c3 Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles Date: Thu, 20 Jun 2024 08:28:06 +0000 Subject: [PATCH 049/102] 8334164: The fix for JDK-8322811 should use _filename.is_set() rather than strcmp() Reviewed-by: dholmes, cjplummer --- src/hotspot/share/services/diagnosticCommand.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/services/diagnosticCommand.cpp b/src/hotspot/share/services/diagnosticCommand.cpp index 6a7e4d1bd20ce..faabe74a2ff0b 100644 --- a/src/hotspot/share/services/diagnosticCommand.cpp +++ b/src/hotspot/share/services/diagnosticCommand.cpp @@ -1203,11 +1203,11 @@ SystemDumpMapDCmd::SystemDumpMapDCmd(outputStream* output, bool heap) : void SystemDumpMapDCmd::execute(DCmdSource source, TRAPS) { stringStream defaultname; const char* name = nullptr; - if (::strcmp(default_filename, _filename.value()) == 0) { + if (_filename.is_set()) { + name = _filename.value(); + } else { defaultname.print("vm_memory_map_%d.txt", os::current_process_id()); name = defaultname.base(); - } else { - name = _filename.value(); } fileStream fs(name); if (fs.is_open()) { From c6f3bf4bd61405c2ed374b15ef82cc987f52cd52 Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Thu, 20 Jun 2024 08:30:52 +0000 Subject: [PATCH 050/102] 8334026: Provide a diagnostic PrintMemoryMapAtExit switch on Linux Reviewed-by: dholmes, mbaesken --- src/hotspot/os/linux/globals_linux.hpp | 4 +- src/hotspot/share/nmt/memMapPrinter.cpp | 11 ++-- src/hotspot/share/runtime/java.cpp | 4 ++ .../runtime/NMT/PrintMemoryMapAtExitTest.java | 51 +++++++++++++++++++ 4 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 test/hotspot/jtreg/runtime/NMT/PrintMemoryMapAtExitTest.java diff --git a/src/hotspot/os/linux/globals_linux.hpp b/src/hotspot/os/linux/globals_linux.hpp index 8539eab9e9703..1cb0b553c5273 100644 --- a/src/hotspot/os/linux/globals_linux.hpp +++ b/src/hotspot/os/linux/globals_linux.hpp @@ -94,7 +94,9 @@ product(bool, UseMadvPopulateWrite, true, DIAGNOSTIC, \ "Use MADV_POPULATE_WRITE in os::pd_pretouch_memory.") \ \ - + product(bool, PrintMemoryMapAtExit, false, DIAGNOSTIC, \ + "Print an annotated memory map at exit") \ + \ // end of RUNTIME_OS_FLAGS // diff --git a/src/hotspot/share/nmt/memMapPrinter.cpp b/src/hotspot/share/nmt/memMapPrinter.cpp index ec5003c562e55..5480904d57c40 100644 --- a/src/hotspot/share/nmt/memMapPrinter.cpp +++ b/src/hotspot/share/nmt/memMapPrinter.cpp @@ -30,16 +30,17 @@ #include "logging/logAsyncWriter.hpp" #include "gc/shared/collectedHeap.hpp" #include "memory/universe.hpp" +#include "memory/resourceArea.hpp" #include "nmt/memflags.hpp" +#include "nmt/memFlagBitmap.hpp" +#include "nmt/memMapPrinter.hpp" +#include "nmt/memTracker.hpp" +#include "nmt/virtualMemoryTracker.hpp" #include "runtime/nonJavaThread.hpp" #include "runtime/osThread.hpp" #include "runtime/thread.hpp" #include "runtime/threadSMR.hpp" #include "runtime/vmThread.hpp" -#include "nmt/memFlagBitmap.hpp" -#include "nmt/memMapPrinter.hpp" -#include "nmt/memTracker.hpp" -#include "nmt/virtualMemoryTracker.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/growableArray.hpp" #include "utilities/ostream.hpp" @@ -203,6 +204,8 @@ static void print_thread_details(uintx thread_id, const char* name, outputStream // Given a region [from, to), if it intersects a known thread stack, print detail infos about that thread. static void print_thread_details_for_supposed_stack_address(const void* from, const void* to, outputStream* st) { + ResourceMark rm; + #define HANDLE_THREAD(T) \ if (T != nullptr && vma_touches_thread_stack(from, to, T)) { \ print_thread_details((uintx)(T->osthread()->thread_id()), T->name(), st); \ diff --git a/src/hotspot/share/runtime/java.cpp b/src/hotspot/share/runtime/java.cpp index d3e76364a03e0..674716a859852 100644 --- a/src/hotspot/share/runtime/java.cpp +++ b/src/hotspot/share/runtime/java.cpp @@ -48,6 +48,7 @@ #include "memory/oopFactory.hpp" #include "memory/resourceArea.hpp" #include "memory/universe.hpp" +#include "nmt/memMapPrinter.hpp" #include "nmt/memTracker.hpp" #include "oops/constantPool.hpp" #include "oops/generateOopMap.hpp" @@ -485,6 +486,9 @@ void before_exit(JavaThread* thread, bool halt) { if (DumpPerfMapAtExit) { CodeCache::write_perf_map(); } + if (PrintMemoryMapAtExit) { + MemMapPrinter::print_all_mappings(tty, false); + } #endif if (JvmtiExport::should_post_thread_life()) { diff --git a/test/hotspot/jtreg/runtime/NMT/PrintMemoryMapAtExitTest.java b/test/hotspot/jtreg/runtime/NMT/PrintMemoryMapAtExitTest.java new file mode 100644 index 0000000000000..2c51c079c737c --- /dev/null +++ b/test/hotspot/jtreg/runtime/NMT/PrintMemoryMapAtExitTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Verify PrintMemoryMapAtExit on normal JVM exit for summary tracking level + * @requires os.family == "linux" + * @modules java.base/jdk.internal.misc + * @library /test/lib + * @run driver PrintMemoryMapAtExitTest + */ + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class PrintMemoryMapAtExitTest { + + public static void main(String args[]) throws Exception { + + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintMemoryMapAtExit", + "-XX:NativeMemoryTracking=summary", "-version"); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + output.shouldContain("Memory mappings"); + output.shouldContain("JAVAHEAP"); + output.shouldHaveExitValue(0); + } +} From 642084629a9a793a055cba8a950fdb61b7450093 Mon Sep 17 00:00:00 2001 From: Hamlin Li Date: Thu, 20 Jun 2024 10:10:54 +0000 Subject: [PATCH 051/102] 8334396: RISC-V: verify perf of ReverseBytesI/L Reviewed-by: fyang, rehn --- src/hotspot/cpu/riscv/riscv.ad | 31 +++---------------------------- src/hotspot/cpu/riscv/riscv_b.ad | 4 ++-- 2 files changed, 5 insertions(+), 30 deletions(-) diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 5405314875898..2368a280bf2df 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -1914,6 +1914,8 @@ bool Matcher::match_rule_supported(int opcode) { case Op_PopCountL: return UsePopCountInstruction; + case Op_ReverseBytesI: + case Op_ReverseBytesL: case Op_RotateRight: case Op_RotateLeft: case Op_CountLeadingZerosI: @@ -1921,6 +1923,7 @@ bool Matcher::match_rule_supported(int opcode) { case Op_CountTrailingZerosI: case Op_CountTrailingZerosL: return UseZbb; + case Op_FmaF: case Op_FmaD: case Op_FmaVF: @@ -7856,34 +7859,6 @@ instruct xorL_reg_imm(iRegLNoSp dst, iRegL src1, immLAdd src2) %{ // ============================================================================ // BSWAP Instructions -instruct bytes_reverse_int(iRegINoSp dst, iRegIorL2I src, rFlagsReg cr) %{ - match(Set dst (ReverseBytesI src)); - effect(KILL cr); - - ins_cost(ALU_COST * 13); - format %{ "revb_w_w $dst, $src\t#@bytes_reverse_int" %} - - ins_encode %{ - __ revb_w_w(as_Register($dst$$reg), as_Register($src$$reg)); - %} - - ins_pipe(pipe_class_default); -%} - -instruct bytes_reverse_long(iRegLNoSp dst, iRegL src, rFlagsReg cr) %{ - match(Set dst (ReverseBytesL src)); - effect(KILL cr); - - ins_cost(ALU_COST * 29); - format %{ "revb $dst, $src\t#@bytes_reverse_long" %} - - ins_encode %{ - __ revb(as_Register($dst$$reg), as_Register($src$$reg)); - %} - - ins_pipe(pipe_class_default); -%} - instruct bytes_reverse_unsigned_short(iRegINoSp dst, iRegIorL2I src) %{ match(Set dst (ReverseBytesUS src)); diff --git a/src/hotspot/cpu/riscv/riscv_b.ad b/src/hotspot/cpu/riscv/riscv_b.ad index b8960e5e9fd0c..9e78159d24fce 100644 --- a/src/hotspot/cpu/riscv/riscv_b.ad +++ b/src/hotspot/cpu/riscv/riscv_b.ad @@ -178,13 +178,13 @@ instruct convI2UL_reg_reg_b(iRegLNoSp dst, iRegIorL2I src, immL_32bits mask) %{ // BSWAP instructions instruct bytes_reverse_int_b(iRegINoSp dst, iRegIorL2I src) %{ - predicate(UseZbb); match(Set dst (ReverseBytesI src)); ins_cost(ALU_COST * 2); format %{ "revb_w_w $dst, $src\t#@bytes_reverse_int_b" %} ins_encode %{ + assert(UseZbb, "must be"); __ revb_w_w(as_Register($dst$$reg), as_Register($src$$reg)); %} @@ -192,13 +192,13 @@ instruct bytes_reverse_int_b(iRegINoSp dst, iRegIorL2I src) %{ %} instruct bytes_reverse_long_b(iRegLNoSp dst, iRegL src) %{ - predicate(UseZbb); match(Set dst (ReverseBytesL src)); ins_cost(ALU_COST); format %{ "rev8 $dst, $src\t#@bytes_reverse_long_b" %} ins_encode %{ + assert(UseZbb, "must be"); __ rev8(as_Register($dst$$reg), as_Register($src$$reg)); %} From 5cad0b4df7f5ccb6d462dc948c2ea5ad5da6e2ed Mon Sep 17 00:00:00 2001 From: Nizar Benalla Date: Thu, 20 Jun 2024 11:53:02 +0000 Subject: [PATCH 052/102] 8322708: Global HTML attributes are not allowed Reviewed-by: jjg --- .../jdk/javadoc/internal/doclint/Checker.java | 4 +- .../jdk/javadoc/internal/doclint/HtmlTag.java | 85 ++++++++++---- .../doclet/TestGlobalHtml/TestGlobalHtml.java | 90 +++++++++++++++ .../doclet/TestGlobalHtml/pkg1/C1.java | 105 ++++++++++++++++++ 4 files changed, 260 insertions(+), 24 deletions(-) create mode 100644 test/langtools/jdk/javadoc/doclet/TestGlobalHtml/TestGlobalHtml.java create mode 100644 test/langtools/jdk/javadoc/doclet/TestGlobalHtml/pkg1/C1.java diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java index 8fbdce922fe69..d33e4874c008a 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java @@ -690,7 +690,9 @@ public Void visitAttribute(AttributeTree tree, Void ignore) { } // for now, doclint allows all attribute names beginning with "on" as event handler names, // without checking the validity or applicability of the name - if (!name.toString().startsWith("on")) { + // custom "data-*" attributes are also accepted + var attrName = name.toString(); + if (!attrName.startsWith("on") && !attrName.startsWith("data-")) { AttrKind k = currTag.getAttrKind(name); switch (k) { case OK -> { } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/HtmlTag.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/HtmlTag.java index 68495019c16ce..0c820dae91392 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/HtmlTag.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/HtmlTag.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -434,57 +434,76 @@ public enum Flag { public enum Attr { ABBR, + ACCESSKEY(true), ALIGN, ALINK, ALT, - ARIA_ACTIVEDESCENDANT, - ARIA_CONTROLS, - ARIA_DESCRIBEDBY, - ARIA_EXPANDED, - ARIA_LABEL, - ARIA_LABELLEDBY, - ARIA_LEVEL, - ARIA_MULTISELECTABLE, - ARIA_OWNS, - ARIA_POSINSET, - ARIA_SETSIZE, - ARIA_READONLY, - ARIA_REQUIRED, - ARIA_SELECTED, - ARIA_SORT, + ARIA_ACTIVEDESCENDANT(true), + ARIA_CONTROLS(true), + ARIA_DESCRIBEDBY(true), + ARIA_EXPANDED(true), + ARIA_LABEL(true), + ARIA_LABELLEDBY(true), + ARIA_LEVEL(true), + ARIA_MULTISELECTABLE(true), + ARIA_OWNS(true), + ARIA_POSINSET(true), + ARIA_READONLY(true), + ARIA_REQUIRED(true), + ARIA_SELECTED(true), + ARIA_SETSIZE(true), + ARIA_SORT(true), + AUTOCAPITALIZE(true), + AUTOFOCUS(true), AXIS, BACKGROUND, BGCOLOR, BORDER, - CELLSPACING, CELLPADDING, + CELLSPACING, CHAR, CHAROFF, CHARSET, CITE, + CLASS(true), CLEAR, - CLASS, COLOR, COLSPAN, COMPACT, + CONTENTEDITABLE(true), COORDS, CROSSORIGIN, DATETIME, + DIR(true), + DRAGGABLE(true), + ENTERKEYHINT(true), FACE, FRAME, FRAMEBORDER, HEADERS, HEIGHT, + HIDDEN(true), HREF, HSPACE, - ID, + ID(true), + INERT(true), + INPUTMODE(true), + IS(true), + ITEMID(true), + ITEMPROP(true), + ITEMREF(true), + ITEMSCOPE(true), + ITEMTYPE(true), + LANG(true), LINK, LONGDESC, MARGINHEIGHT, MARGINWIDTH, NAME, + NONCE(true), NOSHADE, NOWRAP, + POPOVER(true), PROFILE, REV, REVERSED, @@ -497,24 +516,39 @@ public enum Attr { SHAPE, SIZE, SPACE, + SPELLCHECK(true), SRC, START, - STYLE, + STYLE(true), SUMMARY, + TABINDEX(true), TARGET, TEXT, + TITLE(true), + TRANSLATE(true), TYPE, VALIGN, VALUE, VERSION, VLINK, VSPACE, - WIDTH; + WIDTH, + WRITINGSUGGESTIONS(true); private final String name; + private final boolean isGlobal; Attr() { + this(false); + } + + Attr(boolean flag) { name = StringUtils.toLowerCase(name().replace("_", "-")); + isGlobal = flag; + } + + public boolean isGlobal() { + return isGlobal; } public String getText() { @@ -632,8 +666,13 @@ public Attr getAttr(Name attrName) { } public AttrKind getAttrKind(Name attrName) { - AttrKind k = attrs.get(getAttr(attrName)); // null-safe - return (k == null) ? AttrKind.INVALID : k; + Attr attr = getAttr(attrName); + if (attr == null) { + return AttrKind.INVALID; + } + return attr.isGlobal() ? + AttrKind.OK : + attrs.getOrDefault(attr, AttrKind.INVALID); } private static AttrMap attrs(AttrKind k, Attr... attrs) { diff --git a/test/langtools/jdk/javadoc/doclet/TestGlobalHtml/TestGlobalHtml.java b/test/langtools/jdk/javadoc/doclet/TestGlobalHtml/TestGlobalHtml.java new file mode 100644 index 0000000000000..8d2d8e7dd786c --- /dev/null +++ b/test/langtools/jdk/javadoc/doclet/TestGlobalHtml/TestGlobalHtml.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8322708 + * @summary Test to make sure global tags work properly + * @library /tools/lib ../../lib + * @modules jdk.javadoc/jdk.javadoc.internal.tool + * @build toolbox.ToolBox javadoc.tester.* + * @run main TestGlobalHtml + */ + +import javadoc.tester.JavadocTester; +import toolbox.ToolBox; + +import java.nio.file.Path; + +public class TestGlobalHtml extends JavadocTester { + ToolBox tb = new ToolBox(); + + public static void main(String... args) throws Exception { + var tester = new TestGlobalHtml(); + tester.runTests(); + } + + @Test + public void testGlobalTags() { + javadoc("--allow-script-in-comments", + "-d", + "out-global", + "-sourcepath", + testSrc, + "pkg1"); + checkExit(Exit.OK); + } + + @Test + public void testNegative(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, + """ + package p; + /** + * class comment + * Hyperlink to the OpenJDK website + */ + public class C { + /** + *

+ *
+ *
+ *
+ * + *
+ */ + public C() { + } + } + """); + + javadoc("--allow-script-in-comments", + "-d", + "out-negative", + "-sourcepath", + src.toString(), + "p"); + checkExit(Exit.ERROR); + } +} diff --git a/test/langtools/jdk/javadoc/doclet/TestGlobalHtml/pkg1/C1.java b/test/langtools/jdk/javadoc/doclet/TestGlobalHtml/pkg1/C1.java new file mode 100644 index 0000000000000..9f823fbad0501 --- /dev/null +++ b/test/langtools/jdk/javadoc/doclet/TestGlobalHtml/pkg1/C1.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package pkg1; + + +/** + *
+ *

This content is inert and not interactable.

+ * + * Visit OpenJDK's Website! + * + *
+ * + *
+ *

This content is interactable.

+ * + * Visit OpenJDK's Website! + * + *
+ * + * + *
+ *

This is used in a jtreg test to check that global HTML tags are allowed

+ *
    + *
  • Class C
  • + *
  • Has a default constructor
  • + *
+ *
+ * + *

Here is a description of the class and methods:

+ * + *
    + *
  1. Has a default constructor

  2. + *
  3. Overrides toString method

  4. + *
  5. Is used for testing

  6. + *
+ * + *
+ *

C1

+ *

C1

+ *
+ */ +public class C1 { + + /** + *

+ * Default constructor for the {@code C1} class. (this content is draggable!)

+ *
+ *

Author: try editing this content!

+ *

Created on: June 14 2024

+ *
+ */ + public C1() { + } + + /** + * A method in C1 + * + *

simple method.

+ * + *
+ *

method m

+ *

the method m does nothing

+ *
+ */ + public void m() { + } + + /** + * A toString Override. + * + *

returns a String Object.

+ * + *
+ *

toString

+ *
+ * + * @return a string. + */ + @Override + public String toString() { + return "C1"; + } +} From 001d6860199436c5fb14bd681d640d462b472015 Mon Sep 17 00:00:00 2001 From: Gui Cao Date: Thu, 20 Jun 2024 13:45:31 +0000 Subject: [PATCH 053/102] 8332587: RISC-V: secondary_super_cache does not scale well Reviewed-by: mli, fyang --- .../cpu/riscv/macroAssembler_riscv.cpp | 272 ++++++++++++++++++ .../cpu/riscv/macroAssembler_riscv.hpp | 28 ++ src/hotspot/cpu/riscv/riscv.ad | 44 ++- src/hotspot/cpu/riscv/stubGenerator_riscv.cpp | 56 ++++ src/hotspot/cpu/riscv/vm_version_riscv.hpp | 2 + 5 files changed, 400 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 9961ce8e6dd39..e889c26e5f419 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -3611,6 +3611,278 @@ void MacroAssembler::check_klass_subtype_slow_path(Register sub_klass, bind(L_fallthrough); } +// population_count variant for running without the CPOP +// instruction, which was introduced with Zbb extension. +void MacroAssembler::population_count(Register dst, Register src, + Register tmp1, Register tmp2) { + if (UsePopCountInstruction) { + cpop(dst, src); + } else { + assert_different_registers(src, tmp1, tmp2); + assert_different_registers(dst, tmp1, tmp2); + Label loop, done; + + mv(tmp1, src); + // dst = 0; + // while(tmp1 != 0) { + // dst++; + // tmp1 &= (tmp1 - 1); + // } + mv(dst, zr); + beqz(tmp1, done); + { + bind(loop); + addi(dst, dst, 1); + addi(tmp2, tmp1, -1); + andr(tmp1, tmp1, tmp2); + bnez(tmp1, loop); + } + bind(done); + } +} + +// Ensure that the inline code and the stub are using the same registers +// as we need to call the stub from inline code when there is a collision +// in the hashed lookup in the secondary supers array. +#define LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS(r_super_klass, r_array_base, r_array_length, \ + r_array_index, r_sub_klass, result, r_bitmap) \ +do { \ + assert(r_super_klass == x10 && \ + r_array_base == x11 && \ + r_array_length == x12 && \ + (r_array_index == x13 || r_array_index == noreg) && \ + (r_sub_klass == x14 || r_sub_klass == noreg) && \ + (result == x15 || result == noreg) && \ + (r_bitmap == x16 || r_bitmap == noreg), "registers must match riscv.ad"); \ +} while(0) + +// Return true: we succeeded in generating this code +bool MacroAssembler::lookup_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register result, + Register tmp1, + Register tmp2, + Register tmp3, + Register tmp4, + u1 super_klass_slot, + bool stub_is_near) { + assert_different_registers(r_sub_klass, r_super_klass, result, tmp1, tmp2, tmp3, tmp4, t0); + + Label L_fallthrough; + + BLOCK_COMMENT("lookup_secondary_supers_table {"); + + const Register + r_array_base = tmp1, // x11 + r_array_length = tmp2, // x12 + r_array_index = tmp3, // x13 + r_bitmap = tmp4; // x16 + + LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS(r_super_klass, r_array_base, r_array_length, + r_array_index, r_sub_klass, result, r_bitmap); + + u1 bit = super_klass_slot; + + // Initialize result value to 1 which means mismatch. + mv(result, 1); + + ld(r_bitmap, Address(r_sub_klass, Klass::bitmap_offset())); + + // First check the bitmap to see if super_klass might be present. If + // the bit is zero, we are certain that super_klass is not one of + // the secondary supers. + test_bit(t0, r_bitmap, bit); + beqz(t0, L_fallthrough); + + // Get the first array index that can contain super_klass into r_array_index. + if (bit != 0) { + slli(r_array_index, r_bitmap, (Klass::SECONDARY_SUPERS_TABLE_MASK - bit)); + population_count(r_array_index, r_array_index, tmp1, tmp2); + } else { + mv(r_array_index, (u1)1); + } + + // We will consult the secondary-super array. + ld(r_array_base, Address(r_sub_klass, in_bytes(Klass::secondary_supers_offset()))); + + // The value i in r_array_index is >= 1, so even though r_array_base + // points to the length, we don't need to adjust it to point to the data. + assert(Array::base_offset_in_bytes() == wordSize, "Adjust this code"); + assert(Array::length_offset_in_bytes() == 0, "Adjust this code"); + + shadd(result, r_array_index, r_array_base, result, LogBytesPerWord); + ld(result, Address(result)); + xorr(result, result, r_super_klass); + beqz(result, L_fallthrough); // Found a match + + // Is there another entry to check? Consult the bitmap. + test_bit(t0, r_bitmap, (bit + 1) & Klass::SECONDARY_SUPERS_TABLE_MASK); + beqz(t0, L_fallthrough); + + // Linear probe. + if (bit != 0) { + ror_imm(r_bitmap, r_bitmap, bit); + } + + // The slot we just inspected is at secondary_supers[r_array_index - 1]. + // The next slot to be inspected, by the stub we're about to call, + // is secondary_supers[r_array_index]. Bits 0 and 1 in the bitmap + // have been checked. + Address stub = RuntimeAddress(StubRoutines::lookup_secondary_supers_table_slow_path_stub()); + if (stub_is_near) { + jump_link(stub, t0); + } else { + address call = trampoline_call(stub); + if (call == nullptr) { + return false; // trampoline allocation failed + } + } + + BLOCK_COMMENT("} lookup_secondary_supers_table"); + + bind(L_fallthrough); + + if (VerifySecondarySupers) { + verify_secondary_supers_table(r_sub_klass, r_super_klass, // x14, x10 + result, tmp1, tmp2, tmp3); // x15, x11, x12, x13 + } + return true; +} + +// Called by code generated by check_klass_subtype_slow_path +// above. This is called when there is a collision in the hashed +// lookup in the secondary supers array. +void MacroAssembler::lookup_secondary_supers_table_slow_path(Register r_super_klass, + Register r_array_base, + Register r_array_index, + Register r_bitmap, + Register result, + Register tmp1) { + assert_different_registers(r_super_klass, r_array_base, r_array_index, r_bitmap, tmp1, result, t0); + + const Register + r_array_length = tmp1, + r_sub_klass = noreg; // unused + + LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS(r_super_klass, r_array_base, r_array_length, + r_array_index, r_sub_klass, result, r_bitmap); + + Label L_matched, L_fallthrough, L_bitmap_full; + + // Initialize result value to 1 which means mismatch. + mv(result, 1); + + // Load the array length. + lwu(r_array_length, Address(r_array_base, Array::length_offset_in_bytes())); + // And adjust the array base to point to the data. + // NB! Effectively increments current slot index by 1. + assert(Array::base_offset_in_bytes() == wordSize, ""); + addi(r_array_base, r_array_base, Array::base_offset_in_bytes()); + + // Check if bitmap is SECONDARY_SUPERS_BITMAP_FULL + assert(Klass::SECONDARY_SUPERS_BITMAP_FULL == ~uintx(0), "Adjust this code"); + addi(t0, r_bitmap, (u1)1); + beqz(t0, L_bitmap_full); + + // NB! Our caller has checked bits 0 and 1 in the bitmap. The + // current slot (at secondary_supers[r_array_index]) has not yet + // been inspected, and r_array_index may be out of bounds if we + // wrapped around the end of the array. + + { // This is conventional linear probing, but instead of terminating + // when a null entry is found in the table, we maintain a bitmap + // in which a 0 indicates missing entries. + // The check above guarantees there are 0s in the bitmap, so the loop + // eventually terminates. + Label L_loop; + bind(L_loop); + + // Check for wraparound. + Label skip; + bge(r_array_length, r_array_index, skip); + mv(r_array_index, zr); + bind(skip); + + shadd(t0, r_array_index, r_array_base, t0, LogBytesPerWord); + ld(t0, Address(t0)); + beq(t0, r_super_klass, L_matched); + + test_bit(t0, r_bitmap, 2); // look-ahead check (Bit 2); result is non-zero + beqz(t0, L_fallthrough); + + ror_imm(r_bitmap, r_bitmap, 1); + addi(r_array_index, r_array_index, 1); + j(L_loop); + } + + { // Degenerate case: more than 64 secondary supers. + // FIXME: We could do something smarter here, maybe a vectorized + // comparison or a binary search, but is that worth any added + // complexity? + bind(L_bitmap_full); + repne_scan(r_array_base, r_super_klass, r_array_length, t0); + bne(r_super_klass, t0, L_fallthrough); + } + + bind(L_matched); + mv(result, zr); + + bind(L_fallthrough); +} + +// Make sure that the hashed lookup and a linear scan agree. +void MacroAssembler::verify_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register result, + Register tmp1, + Register tmp2, + Register tmp3) { + assert_different_registers(r_sub_klass, r_super_klass, tmp1, tmp2, tmp3, result, t0); + + const Register + r_array_base = tmp1, // X11 + r_array_length = tmp2, // X12 + r_array_index = noreg, // unused + r_bitmap = noreg; // unused + + LOOKUP_SECONDARY_SUPERS_TABLE_REGISTERS(r_super_klass, r_array_base, r_array_length, + r_array_index, r_sub_klass, result, r_bitmap); + + BLOCK_COMMENT("verify_secondary_supers_table {"); + + // We will consult the secondary-super array. + ld(r_array_base, Address(r_sub_klass, in_bytes(Klass::secondary_supers_offset()))); + + // Load the array length. + lwu(r_array_length, Address(r_array_base, Array::length_offset_in_bytes())); + // And adjust the array base to point to the data. + addi(r_array_base, r_array_base, Array::base_offset_in_bytes()); + + repne_scan(r_array_base, r_super_klass, r_array_length, t0); + Label failed; + mv(tmp3, 1); + bne(r_super_klass, t0, failed); + mv(tmp3, zr); + bind(failed); + + snez(result, result); // normalize result to 0/1 for comparison + + Label passed; + beq(tmp3, result, passed); + { + mv(x10, r_super_klass); + mv(x11, r_sub_klass); + mv(x12, tmp3); + mv(x13, result); + mv(x14, (address)("mismatch")); + rt_call(CAST_FROM_FN_PTR(address, Klass::on_secondary_supers_verification_failure)); + should_not_reach_here(); + } + bind(passed); + + BLOCK_COMMENT("} verify_secondary_supers_table"); +} + // Defines obj, preserves var_size_in_bytes, okay for tmp2 == var_size_in_bytes. void MacroAssembler::tlab_allocate(Register obj, Register var_size_in_bytes, diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 4e9a41625ad46..4373ebada146a 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -322,6 +322,34 @@ class MacroAssembler: public Assembler { Label* L_success, Label* L_failure); + void population_count(Register dst, Register src, Register tmp1, Register tmp2); + + // As above, but with a constant super_klass. + // The result is in Register result, not the condition codes. + bool lookup_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register result, + Register tmp1, + Register tmp2, + Register tmp3, + Register tmp4, + u1 super_klass_slot, + bool stub_is_near = false); + + void verify_secondary_supers_table(Register r_sub_klass, + Register r_super_klass, + Register result, + Register tmp1, + Register tmp2, + Register tmp3); + + void lookup_secondary_supers_table_slow_path(Register r_super_klass, + Register r_array_base, + Register r_array_index, + Register r_bitmap, + Register result, + Register tmp1); + void check_klass_subtype(Register sub_klass, Register super_klass, Register tmp_reg, diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 2368a280bf2df..533b548c88109 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -3313,6 +3313,16 @@ operand iRegP_R15() interface(REG_INTER); %} +operand iRegP_R16() +%{ + constraint(ALLOC_IN_RC(r16_reg)); + match(RegP); + match(iRegPNoSp); + op_cost(0); + format %{ %} + interface(REG_INTER); +%} + // Pointer 64 bit Register R28 only operand iRegP_R28() %{ @@ -10075,7 +10085,7 @@ instruct partialSubtypeCheck(iRegP_R15 result, iRegP_R14 sub, iRegP_R10 super, i match(Set result (PartialSubtypeCheck sub super)); effect(KILL tmp, KILL cr); - ins_cost(2 * STORE_COST + 3 * LOAD_COST + 4 * ALU_COST + BRANCH_COST * 4); + ins_cost(11 * DEFAULT_COST); format %{ "partialSubtypeCheck $result, $sub, $super\t#@partialSubtypeCheck" %} ins_encode(riscv_enc_partial_subtype_check(sub, super, tmp, result)); @@ -10085,13 +10095,43 @@ instruct partialSubtypeCheck(iRegP_R15 result, iRegP_R14 sub, iRegP_R10 super, i ins_pipe(pipe_class_memory); %} +instruct partialSubtypeCheckConstSuper(iRegP_R14 sub, iRegP_R10 super_reg, immP super_con, iRegP_R15 result, + iRegP_R11 tmpR11, iRegP_R12 tmpR12, iRegP_R13 tmpR13, iRegP_R16 tmpR16) +%{ + predicate(UseSecondarySupersTable); + match(Set result (PartialSubtypeCheck sub (Binary super_reg super_con))); + effect(TEMP tmpR11, TEMP tmpR12, TEMP tmpR13, TEMP tmpR16); + + ins_cost(7 * DEFAULT_COST); // needs to be less than competing nodes + format %{ "partialSubtypeCheck $result, $sub, $super_reg, $super_con" %} + + ins_encode %{ + bool success = false; + u1 super_klass_slot = ((Klass*)$super_con$$constant)->hash_slot(); + if (InlineSecondarySupersTest) { + success = __ lookup_secondary_supers_table($sub$$Register, $super_reg$$Register, $result$$Register, + $tmpR11$$Register, $tmpR12$$Register, $tmpR13$$Register, + $tmpR16$$Register, super_klass_slot); + } else { + address call = __ trampoline_call(RuntimeAddress(StubRoutines::lookup_secondary_supers_table_stub(super_klass_slot))); + success = (call != nullptr); + } + if (!success) { + ciEnv::current()->record_failure("CodeCache is full"); + return; + } + %} + + ins_pipe(pipe_class_memory); +%} + instruct partialSubtypeCheckVsZero(iRegP_R15 result, iRegP_R14 sub, iRegP_R10 super, iRegP_R12 tmp, immP0 zero, rFlagsReg cr) %{ match(Set cr (CmpP (PartialSubtypeCheck sub super) zero)); effect(KILL tmp, KILL result); - ins_cost(2 * STORE_COST + 3 * LOAD_COST + 4 * ALU_COST + BRANCH_COST * 4); + ins_cost(11 * DEFAULT_COST); format %{ "partialSubtypeCheck $result, $sub, $super == 0\t#@partialSubtypeCheckVsZero" %} ins_encode(riscv_enc_partial_subtype_check(sub, super, tmp, result)); diff --git a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp index c292f671325da..3a34e87c14006 100644 --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -2808,6 +2808,50 @@ class StubGenerator: public StubCodeGenerator { } #ifdef COMPILER2 + address generate_lookup_secondary_supers_table_stub(u1 super_klass_index) { + StubCodeMark mark(this, "StubRoutines", "lookup_secondary_supers_table"); + + address start = __ pc(); + const Register + r_super_klass = x10, + r_array_base = x11, + r_array_length = x12, + r_array_index = x13, + r_sub_klass = x14, + result = x15, + r_bitmap = x16; + + Label L_success; + __ enter(); + __ lookup_secondary_supers_table(r_sub_klass, r_super_klass, result, + r_array_base, r_array_length, r_array_index, + r_bitmap, super_klass_index, /*stub_is_near*/true); + __ leave(); + __ ret(); + + return start; + } + + // Slow path implementation for UseSecondarySupersTable. + address generate_lookup_secondary_supers_table_slow_path_stub() { + StubCodeMark mark(this, "StubRoutines", "lookup_secondary_supers_table_slow_path"); + + address start = __ pc(); + const Register + r_super_klass = x10, // argument + r_array_base = x11, // argument + temp1 = x12, // tmp + r_array_index = x13, // argument + result = x15, // argument + r_bitmap = x16; // argument + + + __ lookup_secondary_supers_table_slow_path(r_super_klass, r_array_base, r_array_index, r_bitmap, result, temp1); + __ ret(); + + return start; + } + address generate_mulAdd() { __ align(CodeEntryAlignment); @@ -5566,6 +5610,18 @@ static const int64_t right_3_bits = right_n_bits(3); StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } +#ifdef COMPILER2 + if (UseSecondarySupersTable) { + StubRoutines::_lookup_secondary_supers_table_slow_path_stub = generate_lookup_secondary_supers_table_slow_path_stub(); + if (!InlineSecondarySupersTest) { + for (int slot = 0; slot < Klass::SECONDARY_SUPERS_TABLE_SIZE; slot++) { + StubRoutines::_lookup_secondary_supers_table_stubs[slot] + = generate_lookup_secondary_supers_table_stub(slot); + } + } + } +#endif // COMPILER2 + StubRoutines::_upcall_stub_exception_handler = generate_upcall_stub_exception_handler(); StubRoutines::riscv::set_completed(); diff --git a/src/hotspot/cpu/riscv/vm_version_riscv.hpp b/src/hotspot/cpu/riscv/vm_version_riscv.hpp index f3a834b72379c..9556e2dc9ad5d 100644 --- a/src/hotspot/cpu/riscv/vm_version_riscv.hpp +++ b/src/hotspot/cpu/riscv/vm_version_riscv.hpp @@ -277,6 +277,8 @@ class VM_Version : public Abstract_VM_Version { constexpr static bool supports_recursive_lightweight_locking() { return true; } + constexpr static bool supports_secondary_supers_table() { return true; } + static bool supports_on_spin_wait() { return UseZihintpause; } // RISCV64 supports fast class initialization checks From 9ef86da5f8e2579fa1fdf40b4a6f556882e1177d Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 20 Jun 2024 15:42:17 +0000 Subject: [PATCH 054/102] 8334170: bug6492108.java test failed with exception Image comparison failed at (0, 0) for image 4 Reviewed-by: aivanov, azvegint --- test/jdk/com/sun/java/swing/plaf/gtk/bug6492108.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jdk/com/sun/java/swing/plaf/gtk/bug6492108.java b/test/jdk/com/sun/java/swing/plaf/gtk/bug6492108.java index ac411bab7d21e..0e2c6ce51c0db 100644 --- a/test/jdk/com/sun/java/swing/plaf/gtk/bug6492108.java +++ b/test/jdk/com/sun/java/swing/plaf/gtk/bug6492108.java @@ -109,6 +109,7 @@ protected Component createContentPane() { } catch (Throwable t) { fail("Problem creating text components"); } + setDelay(50); return panel; } From 99e4d77aac72cdddb4973805d28c225f17ea965f Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Thu, 20 Jun 2024 15:43:44 +0000 Subject: [PATCH 055/102] 8333117: Remove support of remote and manual debuggee launchers Reviewed-by: cjplummer --- .../vmTestbase/nsk/share/jdb/Debuggee.java | 115 +--- .../vmTestbase/nsk/share/jdb/Launcher.java | 116 +--- .../nsk/share/jdi/ArgumentHandler.java | 14 +- .../vmTestbase/nsk/share/jdi/Binder.java | 558 +----------------- .../vmTestbase/nsk/share/jdi/Debugee.java | 11 +- .../vmTestbase/nsk/share/jdwp/Binder.java | 343 +---------- .../vmTestbase/nsk/share/jdwp/Debugee.java | 10 +- .../share/jpda/DebugeeArgumentHandler.java | 73 +-- .../nsk/share/jpda/DebugeeBinder.java | 355 ----------- .../nsk/share/jpda/DebugeeProcess.java | 44 +- 10 files changed, 105 insertions(+), 1534 deletions(-) diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Debuggee.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Debuggee.java index b0467a7e73ce7..f7472e2db035c 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Debuggee.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Debuggee.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,55 +30,15 @@ import java.io.*; /** - * Interface defining methods to control mirror of debuggee (i.e. debugged VM). + * Class defining methods to control mirror of debuggee (i.e. debugged VM). */ -public interface Debuggee { +public class Debuggee extends LocalProcess { /** Default prefix for log messages. */ public static final String LOG_PREFIX = "debuggee> "; public static final String DEBUGEE_STDOUT_LOG_PREFIX = "debuggee.stdout> "; public static final String DEBUGEE_STDERR_LOG_PREFIX = "debuggee.stderr> "; - /** - * Launch debuggee. - * - * @throws IOException - */ - public void launch (String[] args) throws IOException; - - /** Return exit status. */ - public int getStatus (); - - /** Check whether the process has been terminated. */ - public boolean terminated(); - - /** Kill the debuggee VM. */ - public void killDebuggee (); - - /** Wait until the debuggee VM shutdown or crash. */ - public int waitForDebuggee () throws InterruptedException; - - /** Get a pipe to write to the debuggee's stdin stream. */ - public OutputStream getInPipe (); - - /** Get a pipe to read the debuggee's stdout stream. */ - public InputStream getOutPipe (); - - /** Get a pipe to read the debuggee's stderr stream. */ - public InputStream getErrPipe (); - - /** Redirect stdout stream to Log */ - public void redirectStdout(Log log, String prefix); - - /** Redirect stderr stream to Log */ - public void redirectStderr(Log log, String prefix); -} - -/** - * Mirror of locally launched debuggee. - */ -final class LocalLaunchedDebuggee extends LocalProcess implements Debuggee { - private IORedirector stdoutRedirector = null; private IORedirector stderrRedirector = null; private IORedirector stdinRedirector = null; @@ -90,7 +50,7 @@ final class LocalLaunchedDebuggee extends LocalProcess implements Debuggee { private Launcher launcher = null; /** Enwrap the existing VM mirror. */ - LocalLaunchedDebuggee (Launcher launcher) { + Debuggee(Launcher launcher) { super(); this.launcher = launcher; } @@ -235,70 +195,3 @@ public void redirectStderr(Log log, String prefix) { } -/** - * Mirror of remotely launched debuggee. - */ -final class RemoteLaunchedDebuggee implements Debuggee { - - /** Launcher that creates this debuggee. */ - private Launcher launcher = null; - - /** Enwrap the existing VM mirror. */ - RemoteLaunchedDebuggee (Launcher launcher) { - super(); - this.launcher = launcher; - } - - /** - * Launch debugee on remote host via Launcher object. - */ - public void launch(String[] args) throws IOException { - String cmdLine = ArgumentHandler.joinArguments(args, "\""); - launcher.display("Starting remote java process:\n" + cmdLine); - launcher.launchRemoteProcess(args); - } - - /** Return exit status of the debuggee VM. */ - public int getStatus () { - return launcher.getRemoteProcessStatus(); - } - - /** Check whether the debuggee VM has been terminated. */ - public boolean terminated () { - return launcher.isRemoteProcessTerminated(); - } - - // ---------------------------------------------- // - - /** Kill the debuggee VM. */ - public void killDebuggee () { - launcher.killRemoteProcess(); - } - - /** Wait until the debuggee VM shutdown or crash. */ - public int waitForDebuggee () { - return launcher.waitForRemoteProcess(); - } - - /** Get a pipe to write to the debuggee's stdin stream. */ - public OutputStream getInPipe () { - return null; - } - - /** Get a pipe to read the debuggee's stdout stream. */ - public InputStream getOutPipe () { - return null; - } - - /** Get a pipe to read the debuggee's stderr stream. */ - public InputStream getErrPipe () { - return null; - } - - public void redirectStdout(Log log, String prefix) { - } - - public void redirectStderr(Log log, String prefix) { - } - -} diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Launcher.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Launcher.java index 0db3a6f718eab..35df95b2d6f8a 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Launcher.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdb/Launcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -103,52 +103,21 @@ public void launchJdbAndDebuggee (String classToExecute) throws IOException { String[] jdbCmdArgs = makeJdbCmdLine(classToExecute); - if (argumentHandler.isLaunchedLocally()) { - - if (argumentHandler.isDefaultConnector()) { - - localDefaultLaunch(jdbCmdArgs, classToExecute); - - } else if (argumentHandler.isRawLaunchingConnector()) { - - localRawLaunch(jdbCmdArgs, classToExecute); - - } else if (argumentHandler.isLaunchingConnector()) { - - localLaunch(jdbCmdArgs, classToExecute); - - } else if (argumentHandler.isAttachingConnector()) { - - localLaunchAndAttach(jdbCmdArgs, classToExecute); - - } else if (argumentHandler.isListeningConnector()) { - - localLaunchAndListen(jdbCmdArgs, classToExecute); - - } else { - throw new TestBug("Unexpected connector type for local launch mode" - + argumentHandler.getConnectorType()); - } - - } else if (argumentHandler.isLaunchedRemotely()) { - - connectToBindServer(classToExecute); - - if (argumentHandler.isAttachingConnector()) { - - remoteLaunchAndAttach(jdbCmdArgs, classToExecute); - - } else if (argumentHandler.isListeningConnector()) { - - remoteLaunchAndListen(jdbCmdArgs, classToExecute); - - } else { - throw new TestBug("Unexpected connector type for remote launch mode" - + argumentHandler.getConnectorType()); - } + if (argumentHandler.isDefaultConnector()) { + localDefaultLaunch(jdbCmdArgs, classToExecute); + } else if (argumentHandler.isRawLaunchingConnector()) { + localRawLaunch(jdbCmdArgs, classToExecute); + } else if (argumentHandler.isLaunchingConnector()) { + localLaunch(jdbCmdArgs, classToExecute); + } else if (argumentHandler.isAttachingConnector()) { + localLaunchAndAttach(jdbCmdArgs, classToExecute); + } else if (argumentHandler.isListeningConnector()) { + localLaunchAndListen(jdbCmdArgs, classToExecute); } else { - throw new Failure("Unexpected launching mode: " + argumentHandler.getLaunchMode()); + throw new TestBug("Unexpected connector type for local launch mode" + + argumentHandler.getConnectorType()); } + } /** @@ -198,11 +167,7 @@ private String[] makeJdbCmdLine (String classToExecute) { if (argumentHandler.isRawLaunchingConnector()) { if (argumentHandler.isSocketTransport()) { - if (argumentHandler.isLaunchedLocally()) { - connectorAddress = argumentHandler.getTransportPort(); - } else { - connectorAddress = argumentHandler.getDebugeeHost() + ":" + argumentHandler.getTransportPort(); - } + connectorAddress = argumentHandler.getTransportPort(); } else if (argumentHandler.isShmemTransport() ) { connectorAddress = argumentHandler.getTransportSharedName(); } else { @@ -247,8 +212,6 @@ private String[] makeJdbCmdLine (String classToExecute) { if (argumentHandler.isSocketTransport()) { connect.append("port=" + argumentHandler.getTransportPort().trim()); - if (argumentHandler.isLaunchedRemotely()) - connect.append(",hostname=" + argumentHandler.getDebugeeHost().trim()); } else if (argumentHandler.isShmemTransport()) { connect.append("name=" + argumentHandler.getTransportSharedName().trim()); } else { @@ -324,7 +287,7 @@ private String[] makeJdbCmdLine (String classToExecute) { private void localLaunchAndAttach (String[] jdbCmdArgs, String classToExecute) throws IOException { - debuggee = new LocalLaunchedDebuggee(this); + debuggee = new Debuggee(this); String address = makeTransportAddress(); String[] javaCmdArgs = makeCommandLineArgs(classToExecute, address); debuggee.launch(javaCmdArgs); @@ -346,57 +309,12 @@ private String[] makeJdbCmdLine (String classToExecute) { String address = jdb.waitForListeningJdb(); display("Listening address found: " + address); - debuggee = new LocalLaunchedDebuggee(this); + debuggee = new Debuggee(this); String[] javaCmdArgs = makeCommandLineArgs(classToExecute, address); debuggee.launch(javaCmdArgs); // jdb.waitForPrompt(0, false); } - /** - * Run test in remote mode using attaching connector. - */ - private void remoteLaunchAndAttach - (String[] jdbCmdArgs, String classToExecute) throws IOException { - - debuggee = new RemoteLaunchedDebuggee(this); - String address = makeTransportAddress(); - String[] javaCmdArgs = makeCommandLineArgs(classToExecute, address); - try { - debuggee.launch(javaCmdArgs); - } catch (IOException e) { - throw new Failure("Caught exception while launching debuggee VM process:\n\t" - + e); - }; - - display("Start jdb attaching to remote debuggee"); - jdb = Jdb.startAttachingJdb (this, jdbCmdArgs, JDB_STARTED); -// jdb.waitForPrompt(0, false); - } - - /** - * Run test in remote mode using listening connector. - */ - private void remoteLaunchAndListen - (String[] jdbCmdArgs, String classToExecute) throws IOException { - - jdb = new Jdb(this); - display("Starting jdb listening to remote debuggee"); - jdb.launch(jdbCmdArgs); - String address = jdb.waitForListeningJdb(); - display("Listening address found: " + address); - - debuggee = new RemoteLaunchedDebuggee(this); - String[] javaCmdArgs = makeCommandLineArgs(classToExecute); - try { - debuggee.launch(javaCmdArgs); - } catch (IOException e) { - throw new Failure("Caught exception while launching debuggee VM process:\n\t" - + e); - }; - - jdb.waitForMessage(0, JDB_STARTED); -// jdb.waitForPrompt(0, false); - } } // End of Launcher diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/ArgumentHandler.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/ArgumentHandler.java index 1686318950027..3f924c6ac47b8 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/ArgumentHandler.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/ArgumentHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -457,18 +457,6 @@ protected void checkOptions() { } */ - if (! isLaunchedLocally() && ! isDefaultDebugeeSuspendMode()) { - throw new BadOption("inconsistent options: " - + "-debugee.launch=" + getLaunchMode() - + " and -debugee.suspend=" + getDebugeeSuspendMode()); - } - - if (! isLaunchedLocally() && isLaunchingConnector()) { - throw new BadOption("inconsistent options: " - + "-debugee.launch=" + getLaunchMode() - + " and -connector=" + getConnectorType()); - } - if (isLaunchingConnector() && ! isDefaultTransport()) { throw new BadOption("inconsistent options: " + "-connector=" + getConnectorType() diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Binder.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Binder.java index b983ac998f5a2..9879b68775fa8 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Binder.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Binder.java @@ -127,8 +127,7 @@ public Binder (ArgumentHandler argumentHandler, Log log) { * started with launching connector. */ public Debugee makeLocalDebugee(Process process) { - LocalLaunchedDebugee debugee = new LocalLaunchedDebugee(process, this); - return debugee; + return new Debugee(process, this); } /** @@ -189,51 +188,22 @@ public Debugee bindToDebugeeNoWait(String classToExecute) { prepareForPipeConnection(argumentHandler); - if (argumentHandler.isLaunchedLocally()) { - - if (argumentHandler.isDefaultConnector()) { - debugee = localDefaultLaunchDebugee(vmm, classToExecute, classPath); - } else if (argumentHandler.isRawLaunchingConnector()) { - debugee = localRawLaunchDebugee(vmm, classToExecute, classPath); - } else if (argumentHandler.isLaunchingConnector()) { - debugee = localLaunchDebugee(vmm, classToExecute, classPath); - } else if (argumentHandler.isAttachingConnector()) { - debugee = localLaunchAndAttachDebugee(vmm, classToExecute, classPath); - } else if (argumentHandler.isListeningConnector()) { - debugee = localLaunchAndListenDebugee(vmm, classToExecute, classPath); - } else { - throw new TestBug("Unexpected connector type for local debugee launch mode" - + argumentHandler.getConnectorType()); - } - - } else if (argumentHandler.isLaunchedRemotely()) { - - connectToBindServer(classToExecute); - - if (argumentHandler.isAttachingConnector()) { - debugee = remoteLaunchAndAttachDebugee(vmm, classToExecute, classPath); - } else if (argumentHandler.isListeningConnector()) { - debugee = remoteLaunchAndListenDebugee(vmm, classToExecute, classPath); - } else { - throw new TestBug("Unexpected connector type for remote debugee launch mode" - + argumentHandler.getConnectorType()); - } - - } else if (argumentHandler.isLaunchedManually()) { - - if (argumentHandler.isAttachingConnector()) { - debugee = manualLaunchAndAttachDebugee(vmm, classToExecute, classPath); - } else if (argumentHandler.isListeningConnector()) { - debugee = manualLaunchAndListenDebugee(vmm, classToExecute, classPath); - } else { - throw new TestBug("Unexpected connector type for manual debugee launch mode" - + argumentHandler.getConnectorType()); - } - + if (argumentHandler.isDefaultConnector()) { + debugee = localDefaultLaunchDebugee(vmm, classToExecute, classPath); + } else if (argumentHandler.isRawLaunchingConnector()) { + debugee = localRawLaunchDebugee(vmm, classToExecute, classPath); + } else if (argumentHandler.isLaunchingConnector()) { + debugee = localLaunchDebugee(vmm, classToExecute, classPath); + } else if (argumentHandler.isAttachingConnector()) { + debugee = localLaunchAndAttachDebugee(vmm, classToExecute, classPath); + } else if (argumentHandler.isListeningConnector()) { + debugee = localLaunchAndListenDebugee(vmm, classToExecute, classPath); } else { - throw new Failure("Unexpected debugee launching mode: " + argumentHandler.getLaunchMode()); + throw new TestBug("Unexpected connector type for local debugee launch mode" + + argumentHandler.getConnectorType()); } + return debugee; } @@ -486,194 +456,6 @@ private Debugee localLaunchAndListenDebugee (VirtualMachineManager vmm, // -------------------------------------------------- // - /** - * Launch debugee VM remotely via BindServer and connect to it using - * AttachingConnector. - */ - private Debugee remoteLaunchAndAttachDebugee (VirtualMachineManager vmm, - String classToExecute, - String classPath) { - display("Finding connector: " + argumentHandler.getConnectorName() ); - AttachingConnector connector = - (AttachingConnector) findConnector(argumentHandler.getConnectorName(), - vmm.attachingConnectors()); - - Map arguments = setupAttachingConnector(connector, classToExecute, classPath); - - String address = makeTransportAddress(); - String[] cmdLineArgs = makeCommandLineArgs(classToExecute, address); - String javaCmdLine = makeCommandLineString(classToExecute, address, "\""); - - display("Starting remote java process:\n\t" + javaCmdLine); - Debugee debugee = startRemoteDebugee(cmdLineArgs); - - display("Attaching to debugee"); - VirtualMachine vm; - IOException ioe = null; - for (int i = 0; i < CONNECT_TRIES; i++) { - try { - vm = connector.attach(arguments); - display("Debugee attached"); - debugee.setupVM(vm); - return debugee; - } catch (IOException e) { - display("Attempt #" + i + " to connect to debugee VM failed:\n\t" + e); - ioe = e; - if (debugee.terminated()) { - throw new Failure("Unable to connect to debuggee VM: VM process is terminated"); - } - try { - Thread.currentThread().sleep(CONNECT_TRY_DELAY); - } catch (InterruptedException ie) { - ie.printStackTrace(log.getOutStream()); - throw new Failure("Thread interrupted while pausing connection attempts:\n\t" - + ie); - } - } catch (IllegalConnectorArgumentsException e) { - e.printStackTrace(log.getOutStream()); - throw new TestBug("Wrong connector arguments used to attach to debuggee VM:\n\t" + e); - } - } - throw new Failure("Unable to connect to debugee VM after " + CONNECT_TRIES - + " tries:\n\t" + ioe); - } - - /** - * Launch debugee VM remotely via BindServer and connect to it using - * ListeningConnector. - */ - private Debugee remoteLaunchAndListenDebugee (VirtualMachineManager vmm, - String classToExecute, - String classPath) { - display("Finding connector: " + argumentHandler.getConnectorName() ); - ListeningConnector connector = - (ListeningConnector) findConnector(argumentHandler.getConnectorName(), - vmm.listeningConnectors()); - Map arguments = setupListeningConnector(connector, classToExecute, classPath); - - String address = null; - try { - display("Listening for connection from debugee"); - address = connector.startListening(arguments); - } catch (IllegalConnectorArgumentsException e) { - e.printStackTrace(log.getOutStream()); - throw new TestBug("Wrong connector arguments used to listen debuggee VM:\n\t" + e); - } catch (IOException e) { - e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while starting listening debugee VM:\n\t" + e); - }; - - String[] cmdLineArgs = makeCommandLineArgs(classToExecute, address); - String javaCmdLine = makeCommandLineString(classToExecute, address, "\""); - - display("Starting remote java process:\n\t" + javaCmdLine); - Debugee debugee = startRemoteDebugee(cmdLineArgs); - - display("Waiting for connection from debugee"); - VirtualMachine vm; - IOException ioe = null; - for (int i = 0; i < CONNECT_TRIES; i++) { - try { - vm = connector.accept(arguments); - connector.stopListening(arguments); - display("Debugee attached"); - debugee.setupVM(vm); - return debugee; - } catch (IOException e) { - display("Attempt #" + i + " to listen debugee VM failed:\n\t" + e); - ioe = e; - if (debugee.terminated()) { - throw new Failure("Unable to connect to debuggee VM: VM process is terminated"); - } - try { - Thread.currentThread().sleep(CONNECT_TRY_DELAY); - } catch (InterruptedException ie) { - ie.printStackTrace(log.getOutStream()); - throw new Failure("Thread interrupted while pausing connection attempts:\n\t" - + ie); - } - } catch (IllegalConnectorArgumentsException e) { - e.printStackTrace(log.getOutStream()); - throw new TestBug("Wrong connector arguments used to listen debuggee VM:\n\t" + e); - } - } - throw new Failure("Unable to connect to debugee VM after " + CONNECT_TRIES - + " tries:\n\t" + ioe); - } - - // -------------------------------------------------- // - - /** - * Prompt to manually launch debugee VM and connect to it using - * AttachingConnector. - */ - private Debugee manualLaunchAndAttachDebugee (VirtualMachineManager vmm, - String classToExecute, - String classPath) { - display("Finding connector: " + argumentHandler.getConnectorName() ); - AttachingConnector connector = - (AttachingConnector) findConnector(argumentHandler.getConnectorName(), - vmm.attachingConnectors()); - Map arguments = setupAttachingConnector(connector, classToExecute, classPath); - - String address = makeTransportAddress(); - String javaCmdLine = makeCommandLineString(classToExecute, address, "\""); - - display("Starting manual java process:\n\t" + javaCmdLine); - ManualLaunchedDebugee debugee = startManualDebugee(javaCmdLine); - - VirtualMachine vm; - try { - display("Attaching to debugee"); - vm = connector.attach(arguments); - } catch (IllegalConnectorArgumentsException e) { - e.printStackTrace(log.getOutStream()); - throw new TestBug("Wrong connector arguments used to attach to debuggee VM:\n\t" + e); - } catch (IOException e) { - e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while attaching to debugee VM:\n\t" + e); - }; - display("Debugee attached"); - - debugee.setupVM(vm); - return debugee; - } - - /** - * Prompt to manually launch debugee VM and connect to it using - * ListeningConnector. - */ - private Debugee manualLaunchAndListenDebugee (VirtualMachineManager vmm, - String classToExecute, - String classPath) { - display("Finding connector: " + argumentHandler.getConnectorName() ); - ListeningConnector connector = - (ListeningConnector) findConnector(argumentHandler.getConnectorName(), - vmm.listeningConnectors()); - Map arguments = setupListeningConnector(connector, classToExecute, classPath); - - VirtualMachine vm; - try { - display("Listening for connection from debugee"); - String address = connector.startListening(arguments); - String javaCmdLine = makeCommandLineString(classToExecute, address, "\""); - display("Starting manual java process:\n\t" + javaCmdLine); - ManualLaunchedDebugee debugee = startManualDebugee(javaCmdLine); - display("Waiting for connection from debugee"); - vm = connector.accept(arguments); - display("Debugee attached"); - connector.stopListening(arguments); - debugee.setupVM(vm); - return debugee; - } catch (IllegalConnectorArgumentsException e) { - e.printStackTrace(log.getOutStream()); - throw new TestBug("Wrong connector arguments used to listen debuggee VM:\n\t" + e); - } catch (IOException e) { - e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while listening to debugee VM:\n\t" + e); - } - } - // -------------------------------------------------- // /** @@ -920,33 +702,6 @@ protected Debugee startLocalDebugee(String[] cmdArgs) { return makeLocalDebugee(process); } - /** - * Launch remote debuggee process with specified command line arguments - * and make initial Debugee mirror. - */ - protected RemoteLaunchedDebugee startRemoteDebugee(String[] cmdArgs) { - try { - launchRemoteProcess(cmdArgs); - } catch (IOException e) { - e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while launching remote debuggee VM process:\n\t" - + e); - } - - RemoteLaunchedDebugee debugee = new RemoteLaunchedDebugee(this); - return debugee; - } - - /** - * Launch manual debuggee process with specified command line arguments - * and make initial Debugee mirror. - */ - protected ManualLaunchedDebugee startManualDebugee(String cmd) { - ManualLaunchedDebugee debugee = new ManualLaunchedDebugee(this); - debugee.launchDebugee(cmd); - return debugee; - } - public static String readVMStartExceptionOutput(VMStartException e, PrintStream log) { StringBuffer msg = new StringBuffer(); try (InputStream is = e.process().getInputStream()) { @@ -995,287 +750,4 @@ private static byte[] readAllBytes(InputStream is) throws IOException { return (capacity == nread) ? buf : Arrays.copyOf(buf, nread); } -} - - -/** - * Mirror of locally launched debugee. - */ -final class LocalLaunchedDebugee extends Debugee { - - /** Enwrap the locally started VM process. */ - public LocalLaunchedDebugee (Process process, Binder binder) { - super(binder); - this.process = process; - checkTermination = true; - } - - // ---------------------------------------------- // - - /** Return exit status of the debugee VM. */ - public int getStatus () { - return process.exitValue(); - } - - /** Check whether the debugee VM has been terminated. */ - public boolean terminated () { - if (process == null) - return true; - - try { - int value = process.exitValue(); - return true; - } catch (IllegalThreadStateException e) { - return false; - } - } - - // ---------------------------------------------- // - - /** Kill the debugee VM. */ - protected void killDebugee () { - super.killDebugee(); - if (!terminated()) { - log.display("Killing debugee VM process"); - process.destroy(); - } - } - - /** Wait until the debugee VM shutdown or crash. */ - protected int waitForDebugee () throws InterruptedException { - int code = process.waitFor(); - return code; - } - - /** Get a pipe to write to the debugee's stdin stream. */ - protected OutputStream getInPipe () { - return process.getOutputStream(); - } - - /** Get a pipe to read the debugee's stdout stream. */ - protected InputStream getOutPipe () { - return process.getInputStream(); - } - - /** Get a pipe to read the debugee's stderr stream. */ - protected InputStream getErrPipe () { - return process.getErrorStream(); - } -} - - -/** - * Mirror of remotely launched debugee. - */ -final class RemoteLaunchedDebugee extends Debugee { - - /** Enwrap the remotely started VM process. */ - public RemoteLaunchedDebugee (Binder binder) { - super(binder); - } - - // ---------------------------------------------- // - - /** Return exit status of the debugee VM. */ - public int getStatus () { - return binder.getRemoteProcessStatus(); - } - - /** Check whether the debugee VM has been terminated. */ - public boolean terminated () { - return binder.isRemoteProcessTerminated(); - } - - // ---------------------------------------------- // - - /** Kill the debugee VM. */ - protected void killDebugee () { - super.killDebugee(); - if (!terminated()) { - binder.killRemoteProcess(); - } - } - - /** Wait until the debugee VM shutdown or crash. */ - protected int waitForDebugee () { - return binder.waitForRemoteProcess(); - } - - /** Get a pipe to write to the debugee's stdin stream. */ - protected OutputStream getInPipe () { - return null; - } - - /** Get a pipe to read the debugee's stdout stream. */ - protected InputStream getOutPipe () { - return null; - } - - /** Get a pipe to read the debugee's stderr stream. */ - protected InputStream getErrPipe () { - return null; - } - - public void redirectStdout(OutputStream out) { - } - - public void redirectStdout(Log log, String prefix) { - } - - public void redirectStderr(OutputStream out) { - } - - public void redirectStderr(Log log, String prefix) { - } -} - - -/** - * Mirror of manually launched debugee. - */ -final class ManualLaunchedDebugee extends Debugee { - /** Enwrap the manually started VM process. */ - public ManualLaunchedDebugee (Binder binder) { - super(binder); - makeInputReader(); - } - - // ---------------------------------------------- // - - private int exitCode = 0; - private boolean finished = false; - private static BufferedReader bin = null; - - public void launchDebugee(String commandLine) { - makeInputReader(); - - putMessage("Launch target VM using such command line:\n" - + commandLine); - String answer = askQuestion("Has the VM successfully started? (yes/no)", "yes"); - for ( ; ; ) { - if (answer.equals("yes")) - break; - if (answer.equals("no")) - throw new Failure ("Unable to manually launch debugee VM"); - answer = askQuestion("Wrong answer. Please type yes or no", "yes"); - } - } - - private static void makeInputReader() { - if (bin == null) { - bin = new BufferedReader(new InputStreamReader(System.in)); - } - } - - private static void destroyInputReader() { - if (bin != null) { - try { - bin.close(); - } catch (IOException e) { -// e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while closing input stream:\n\t" + e); - } - bin = null; - } - } - - private static void putMessage(String msg) { - System.out.println("\n>>> " + msg); - } - - private static String askQuestion(String question, String defaultAnswer) { - try { - System.out.print("\n>>> " + question); - System.out.print(" [" + defaultAnswer + "] "); - System.out.flush(); - String answer = bin.readLine(); - if (answer.equals("")) - return defaultAnswer; - return answer; - } catch (IOException e) { -// e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while reading answer:\n\t" + e); - } - } - - /** Return exit status of the debugee VM. */ - public int getStatus () { - if (! finished) { - throw new Failure("Unable to get status of debugee VM: process still alive"); - } - return exitCode; - } - - /** Check whether the debugee VM has been terminated. */ - public boolean terminated () { - return finished; - } - - // ---------------------------------------------- // - - /** Kill the debugee VM. */ - protected void killDebugee () { - super.killDebugee(); - if (!terminated()) { - putMessage("Kill launched VM"); - String answer = askQuestion("Has the VM successfully terminated? (yes/no)", "yes"); - for ( ; ; ) { - if (answer.equals("yes")) { - finished = true; - break; - } - if (answer.equals("no")) - throw new Failure ("Unable to manually kill debugee VM"); - answer = askQuestion("Wrong answer. Please type yes or no", "yes"); - } - } - } - - /** Wait until the debugee VM shutdown or crash. */ - protected int waitForDebugee () { - putMessage("Wait for launched VM to exit."); - String answer = askQuestion("What is VM exit code?", "95"); - for ( ; ; ) { - try { - exitCode = Integer.parseInt(answer); - break; - } catch (NumberFormatException e) { - answer = askQuestion("Wrong answer. Please type integer value", "95"); - } - } - finished = true; - return exitCode; - } - - /** Get a pipe to write to the debugee's stdin stream. */ - protected OutputStream getInPipe () { - return null; - } - - /** Get a pipe to read the debugee's stdout stream. */ - protected InputStream getOutPipe () { - return null; - } - - /** Get a pipe to read the debugee's stderr stream. */ - protected InputStream getErrPipe () { - return null; - } - - public void redirectStdout(OutputStream out) { - } - - public void redirectStdout(Log log, String prefix) { - } - - public void redirectStderr(OutputStream out) { - } - - public void redirectStderr(Log log, String prefix) { - } - - public void close() { - destroyInputReader(); - super.close(); - } -} +} \ No newline at end of file diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java index dd6c8a1b82ddd..6b4f65bc625ab 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdi/Debugee.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,7 +47,7 @@ * @see Binder * @see DebugeeProcess */ -abstract public class Debugee extends DebugeeProcess { +public class Debugee extends DebugeeProcess { /** * Mirror of the debugee VM. This must be initialized by every @@ -68,6 +68,13 @@ protected Debugee (Binder binder) { this.argumentHandler = (ArgumentHandler)binder.getArgumentHandler(); } + protected Debugee (Process process, Binder binder) { + super(binder); + this.process = process; + this.binder = binder; + this.argumentHandler = (ArgumentHandler)binder.getArgumentHandler(); + } + /** Setup Debugee object with given VM mirror. */ public void setupVM(VirtualMachine vm) { if (this.vm != null) { diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Binder.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Binder.java index 698ac2cbe8908..0a15c23b004a4 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Binder.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Binder.java @@ -98,13 +98,8 @@ public Debugee bindToDebugee (String classToExecute) { prepareForPipeConnection(argumentHandler); - if (argumentHandler.isLaunchedRemotely()) { - connectToBindServer(classToExecute); - debugee = launchDebugee(classToExecute); - } else { - debugee = launchDebugee(classToExecute); - debugee.redirectOutput(log); - } + debugee = launchDebugee(classToExecute); + debugee.redirectOutput(log); Transport transport = debugee.connect(); @@ -117,334 +112,16 @@ public Debugee bindToDebugee (String classToExecute) { public Debugee launchDebugee (String classToExecute) { try { - - if (argumentHandler.isLaunchedLocally()) { - LocalLaunchedDebugee debugee = new LocalLaunchedDebugee(this); - String address = debugee.prepareTransport(argumentHandler); - if (address == null) - address = makeTransportAddress(); - String[] argsArray = makeCommandLineArgs(classToExecute, address); - debugee.launch(argsArray); - return debugee; - } - - if (argumentHandler.isLaunchedRemotely()) { - RemoteLaunchedDebugee debugee = new RemoteLaunchedDebugee(this); - String address = debugee.prepareTransport(argumentHandler); - if (address == null) - address = makeTransportAddress(); - String[] argsArray = makeCommandLineArgs(classToExecute, address); - debugee.launch(argsArray); - return debugee; - } - - if (argumentHandler.isLaunchedManually()) { - ManualLaunchedDebugee debugee = new ManualLaunchedDebugee(this); - String address = debugee.prepareTransport(argumentHandler); - if (address == null) - address = makeTransportAddress(); - String cmdLine = makeCommandLineString(classToExecute, address, "\""); - debugee.launch(cmdLine); - return debugee; - } - - throw new TestBug("Unexpected launching mode: " - + argumentHandler.getLaunchMode()); + Debugee debugee = new Debugee(this); + String address = debugee.prepareTransport(argumentHandler); + if (address == null) + address = makeTransportAddress(); + String[] argsArray = makeCommandLineArgs(classToExecute, address); + debugee.launch(argsArray); + return debugee; } catch (IOException e) { e.printStackTrace(log.getOutStream()); throw new Failure("Caught exception while launching debugee:\n\t" + e); } } - -} - -/** - * Mirror of locally launched debugee. - */ -final class LocalLaunchedDebugee extends Debugee { - - /** Enwrap the existing VM mirror. */ - public LocalLaunchedDebugee (Binder binder) { - super(binder); - checkTermination = true; - } - - // ---------------------------------------------- // - - public void launch(String[] args) throws IOException { - String cmdLine = ArgumentHandler.joinArguments(args, "\""); - display("Starting java process:\n" + cmdLine); - process = binder.launchProcess(args); - } - - /** Return exit status of the debugee VM. */ - public int getStatus () { - return process.exitValue(); - } - - /** Check whether the debugee VM has been terminated. */ - public boolean terminated () { - if (process == null) - return true; - - try { - int value = process.exitValue(); - return true; - } catch (IllegalThreadStateException e) { - return false; - } - } - - // ---------------------------------------------- // - - /** Kill the debugee VM. */ - protected void killDebugee () { - super.killDebugee(); - if (!terminated()) { - log.display("Killing debugee VM process"); - process.destroy(); - } - } - - /** Wait until the debugee VM shutdown or crash. */ - protected int waitForDebugee () throws InterruptedException { - return process.waitFor(); - } - - /** Get a pipe to write to the debugee's stdin stream. */ - protected OutputStream getInPipe () { - return process.getOutputStream(); - } - - /** Get a pipe to read the debugee's stdout stream. */ - protected InputStream getOutPipe () { - return process.getInputStream(); - } - - /** Get a pipe to read the debugee's stderr stream. */ - protected InputStream getErrPipe () { - return process.getErrorStream(); - } -} - - -/** - * Mirror of remotely launched debugee. - */ -final class RemoteLaunchedDebugee extends Debugee { - - /** Enwrap the existing VM mirror. */ - public RemoteLaunchedDebugee (Binder binder) { - super(binder); - } - - // ---------------------------------------------- // - - public void launch(String[] args) throws IOException { - String cmdLine = ArgumentHandler.joinArguments(args, "\""); - display("Starting remote java process:\n" + cmdLine); - binder.launchRemoteProcess(args); - } - - /** Return exit status of the debugee VM. */ - public int getStatus () { - return binder.getRemoteProcessStatus(); - } - - /** Check whether the debugee VM has been terminated. */ - public boolean terminated () { - return binder.isRemoteProcessTerminated(); - } - - // ---------------------------------------------- // - - /** Kill the debugee VM. */ - protected void killDebugee () { - super.killDebugee(); - if (!terminated()) { - log.display("Killing debugee VM process"); - binder.killRemoteProcess(); - } - } - - /** Wait until the debugee VM shutdown or crash. */ - protected int waitForDebugee () { - return binder.waitForRemoteProcess(); - } - - /** Get a pipe to write to the debugee's stdin stream. */ - protected OutputStream getInPipe () { - return null; - } - - /** Get a pipe to read the debugee's stdout stream. */ - protected InputStream getOutPipe () { - return null; - } - - /** Get a pipe to read the debugee's stderr stream. */ - protected InputStream getErrPipe () { - return null; - } - - public void redirectStdout(OutputStream out) { - } - - public void redirectStdout(Log log, String prefix) { - } - - public void redirectStderr(OutputStream out) { - } - - public void redirectStderr(Log log, String prefix) { - } -} - - -/** - * Mirror of manually launched debugee. - */ -final class ManualLaunchedDebugee extends Debugee { - - private int exitCode = 0; - private boolean finished = false; - private static BufferedReader bin = new BufferedReader(new InputStreamReader(System.in)); - - /** Enwrap the existing VM mirror. */ - public ManualLaunchedDebugee (Binder binder) { - super(binder); - } - - // ---------------------------------------------- // - - public void launch(String commandLine) throws IOException { - putMessage("Launch target VM using such command line:\n" - + commandLine); - String answer = askQuestion("Has the VM successfully started? (yes/no)", "yes"); - for ( ; ; ) { - if (answer.equals("yes")) - break; - if (answer.equals("no")) - throw new Failure ("Unable to manually launch debugee VM"); - answer = askQuestion("Wrong answer. Please type yes or no", "yes"); - } - } - - private void putMessage(String msg) { - System.out.println("\n>>> " + msg); - } - - private String askQuestion(String question, String defaultAnswer) { - try { - System.out.print("\n>>> " + question); - System.out.print(" [" + defaultAnswer + "] "); - System.out.flush(); - String answer = bin.readLine(); - if (answer.equals("")) - return defaultAnswer; - return answer; - } catch (IOException e) { - e.printStackTrace(log.getOutStream()); - throw new Failure("Caught exception while reading answer:\n\t" + e); - } - } - - /** Return exit status of the debugee VM. */ - public int getStatus () { - if (! terminated()) { - throw new Failure("Unable to get status of debugee VM: process still alive"); - } - return exitCode; - } - - /** Check whether the debugee VM has been terminated. */ - public boolean terminated () { - if(! finished) { - String answer = askQuestion("Has the VM exited?", "no"); - for ( ; ; ) { - if (answer.equals("no")) - return false; - if (answer.equals("yes")) { - finished = true; - waitForDebugee(); - break; - } - answer = askQuestion("Wrong answer. Please type yes or no", "yes"); - } - } - return finished; - } - - // ---------------------------------------------- // - - /** Kill the debugee VM. */ - protected void killDebugee () { - super.killDebugee(); - if (!terminated()) { - putMessage("Kill launched VM"); - String answer = askQuestion("Has the VM successfully terminated? (yes/no)", "yes"); - for ( ; ; ) { - if (answer.equals("yes")) { - finished = true; - break; - } - if (answer.equals("no")) - throw new Failure ("Unable to manually kill debugee VM"); - answer = askQuestion("Wrong answer. Please type yes or no", "yes"); - } - } - } - - /** Wait until the debugee VM shutdown or crash. */ - protected int waitForDebugee () { - putMessage("Wait for launched VM to exit."); - String answer = askQuestion("What is VM exit code?", "95"); - for ( ; ; ) { - try { - exitCode = Integer.parseInt(answer); - break; - } catch (NumberFormatException e) { - answer = askQuestion("Wrong answer. Please type integer value", "95"); - } - } - finished = true; - return exitCode; - } - - /** Get a pipe to write to the debugee's stdin stream. */ - protected OutputStream getInPipe () { - return null; - } - - /** Get a pipe to read the debugee's stdout stream. */ - protected InputStream getOutPipe () { - return null; - } - - /** Get a pipe to read the debugee's stderr stream. */ - protected InputStream getErrPipe () { - return null; - } - - public void redirectStdout(OutputStream out) { - } - - public void redirectStdout(Log log, String prefix) { - } - - public void redirectStderr(OutputStream out) { - } - - public void redirectStderr(Log log, String prefix) { - } - - public void close() { - try { - bin.close(); - } catch (IOException e) { - log.display("WARNING: Caught IOException while closing InputStream"); - } - bin = null; - super.close(); - } -} +} \ No newline at end of file diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Debugee.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Debugee.java index ba1b4129cc796..ef95ee885604c 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Debugee.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jdwp/Debugee.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,7 +46,7 @@ * @see Transport * @see DebugeeProcess */ -abstract public class Debugee extends DebugeeProcess { +public class Debugee extends DebugeeProcess { /** Binder that creates this debugee. */ protected Binder binder = null; @@ -63,6 +63,12 @@ protected Debugee (Binder binder) { prefix = "Debugee> "; } + public void launch(String[] args) throws IOException { + String cmdLine = ArgumentHandler.joinArguments(args, "\""); + display("Starting java process:\n" + cmdLine); + process = binder.launchProcess(args); + } + /** Return Binder of the debugee object. */ public Binder getBinder() { return binder; diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeArgumentHandler.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeArgumentHandler.java index 98f11a426eaa5..72461a5230994 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeArgumentHandler.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeArgumentHandler.java @@ -57,8 +57,6 @@ * (this works only with -connector=listening and -transport=socket) *
  • -debugee.suspend=[yes|no|default] - * should debugee start in suspend mode or not - *
  • -debugee.launch=[local|remote|manual] - - * launch and bind to debugee VM locally, remotely (via BindSever) or manually *
  • -debugee.vmhome=<path> - * path to JDK used for launching debugee VM *
  • -debugee.vmkind=<name> - @@ -275,11 +273,8 @@ public boolean isDefaultDebugeeSuspendMode() { * @see #isDefaultDebugeeSuspendMode() */ public boolean willDebugeeSuspended() { - if (isLaunchedLocally()) { - String mode = getDebugeeSuspendMode(); - return mode.equals("no"); - } - return true; + String mode = getDebugeeSuspendMode(); + return mode.equals("no"); } private boolean pipePortInited = false; @@ -337,54 +332,6 @@ public void setPipePortNumber(int port) { setOption("-", "pipe.port", value); } - /** - * Return debugee VM launching mode, specified by - * -launch.mode command line option, or - * "local" string by default. - * - * Possible values for this option are: - *
      - *
    • "local" - *
    • "remote" - *
    • "manual" - *
    - * - * @see #isLaunchedLocally() - * @see #isLaunchedRemotely() - * @see #isLaunchedManually() - * @see #setRawArguments(String[]) - */ - public String getLaunchMode() { - return options.getProperty("debugee.launch", "local"); - } - - /** - * Return true if debugee should be launched locally. - * - * @see #getLaunchMode() - */ - public boolean isLaunchedLocally() { - return getLaunchMode().equals("local"); - } - - /** - * Return true if debugee should be launched remotely via - * BindServer. - * - * @see #getLaunchMode() - */ - public boolean isLaunchedRemotely() { - return getLaunchMode().equals("remote"); - } - - /** - * Return true if debugee should be launched manually by user. - * - * @see #getLaunchMode() - */ - public boolean isLaunchedManually() { - return getLaunchMode().equals("manual"); - } /** * Return additional options for launching debugee VM, specified by @@ -710,9 +657,7 @@ protected boolean checkOption(String option, String value) { } // option with any nonempty string value - if (option.equals("test.host") - || option.equals("debugee.host") - || option.equals("debugee.vmkind") + if (option.equals("debugee.vmkind") || option.equals("debugee.vmhome") || option.equals("transport.shname")) { if (value.length() <= 0) { @@ -748,14 +693,10 @@ protected boolean checkOption(String option, String value) { return true; } - if (option.equals("debugee.launch")) { - if ((!value.equals("local")) - && (!value.equals("remote")) - && (!value.equals("manual"))) { - throw new BadOption(option + ": must be one of: " - + "local, remote, manual " + value); - } - return true; + if (option.equals("debugee.launch") + || option.equals("debugee.host") + || option.equals("test.host")) { + throw new RuntimeException("option " + option + " is not supported."); } if (option.equals("jvmdi.strict")) { diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java index e3071e5cef0e4..d36c9d9624f20 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeBinder.java @@ -35,15 +35,6 @@ * debuggee VM and to make connection to it using JDI connector or * JDWP transport. *

    - * The present version of Binder allows - * to launch debuggee VM either on local machine (local launch mode), - * or on remote host using BindServer utility - * (remote launch mode). Also there is an ability to launch - * debuggee VM manually as a separate process on local or remote machine - * (manual launch mode), which is usefull for debugging. - * All these launching modes are specified by command line option - * -debugee.launch recognized by DebugeeArgumentHandler. - *

    * Binder also makes it possible to establish TCP/IP * connection between debugger and debuggee throw IOPipe * object. This connection allows debugger to communicate with debuggee @@ -105,8 +96,6 @@ public static String getVersion () { } // -------------------------------------------------- // - - private BindServerListener bindServerListener = null; private ServerSocket pipeServerSocket = null; // -------------------------------------------------- // @@ -386,356 +375,12 @@ public String[] makeCommandLineArgs(String classToExecute) { return makeCommandLineArgs(classToExecute, makeTransportAddress()); } - /** - * Make connection to remote BindServer and start BindServerListener thread. - * - * @throws IOException if I/O error occured while connecting - */ - public void connectToBindServer(String taskID) { - if (bindServerListener != null) { - throw new Failure("Connection to BindServer already exists"); - } - try { - bindServerListener = new BindServerListener(this); - bindServerListener.setDaemon(true); - bindServerListener.connect(taskID); - bindServerListener.start(); - } catch (IOException e) { - e.printStackTrace(getOutStream()); - throw new Failure("Caught exception while connecting to BindServer:\n\t" + e); - } - } - - /** - * Split string into list of substrings using specified separator. - */ - private static String[] splitString(String givenString, String separator) { - Vector tmpList = new Vector(); - StringTokenizer tokenizer = new StringTokenizer(givenString, separator); - while(tokenizer.hasMoreTokens()) { - tmpList.add(tokenizer.nextToken()); - } - String[] list = new String[tmpList.size()]; - for (int i = 0; i < tmpList.size(); i++) { - list[i] = tmpList.elementAt(i); - } - return list; - } - - /** - * Send command to remote BindServer and receive reply. - * - * @throws IOException if I/O error occured while launching process - */ - public synchronized Object sendRemoteCommand(Object command) { - try { - bindServerListener.sendCommand(command); - Object reply = bindServerListener.getReply(); - return reply; - } catch (IOException e) { - e.printStackTrace(log.getOutStream()); - throw new Failure("Unexpected exception while sending command to BindServer:\n\t" - + e); - } - } - - /** - * Launch remote process using request to BindServer. - * - * @throws IOException if I/O error occured - */ - public void launchRemoteProcess(String[] args) throws IOException { - String pathSeparator = System.getProperty("path.separator"); - BindServer.LaunchDebugee command = - new BindServer.LaunchDebugee(args, - System.getProperty("file.separator"), - System.getProperty("user.dir"), - splitString(System.getProperty("java.library.path"), pathSeparator), - splitString(System.getProperty("java.class.path"), pathSeparator), - splitString(System.getProperty("java.library.path"), pathSeparator)); - - Object reply = sendRemoteCommand(command); - if (reply instanceof BindServer.OK) { - // do nothing - } else if (reply instanceof BindServer.RequestFailed) { - BindServer.RequestFailed castedReply = (BindServer.RequestFailed)reply; - throw new Failure("BindServer error: " + castedReply.reason); - } else { - throw new Failure("Wrong reply from BindServer: " + reply); - } - } - - /** - * Return exit status of the remotely launched process - * using request to BindServer. - */ - public int getRemoteProcessStatus () { - Object reply = sendRemoteCommand(new BindServer.DebugeeExitCode()); - if (reply instanceof BindServer.OK) { - BindServer.OK castedReply = (BindServer.OK)reply; - return (int)castedReply.info; - } else if (reply instanceof BindServer.CaughtException) { - BindServer.CaughtException castedReply = (BindServer.CaughtException)reply; - throw new IllegalThreadStateException(castedReply.reason); - } else if (reply instanceof BindServer.RequestFailed) { - BindServer.RequestFailed castedReply = (BindServer.RequestFailed)reply; - throw new Failure("BindServer error: " + castedReply.reason); - } else { - throw new Failure("Wrong reply from BindServer: " + reply); - } - } - - /** - * Check whether the remotely launched process has been terminated - * using request to BindServer. - */ - public boolean isRemoteProcessTerminated () { - try { - int value = getRemoteProcessStatus(); - return true; - } catch (IllegalThreadStateException e) { - return false; - } - } - - // ---------------------------------------------- // - - /** - * Kill the remotely launched process - * using request to BindServer. - */ - public void killRemoteProcess () { - Object reply = sendRemoteCommand(new BindServer.KillDebugee()); - if (reply instanceof BindServer.OK) { - return; - } else if (reply instanceof BindServer.RequestFailed) { - BindServer.RequestFailed castedReply = (BindServer.RequestFailed)reply; - throw new Failure("BindServer error: " + castedReply.reason); - } else { - throw new Failure("Wrong reply from BindServer: " + reply); - } - } - - /** - * Wait until the remotely launched process exits or crashes - * using request to BindServer. - */ - public int waitForRemoteProcess () { - - Object reply = sendRemoteCommand(new BindServer.WaitForDebugee(0)); - if (reply instanceof BindServer.OK) { - BindServer.OK castedReply = (BindServer.OK)reply; - return (int)castedReply.info; - } else if (reply instanceof BindServer.RequestFailed) { - BindServer.RequestFailed castedReply = (BindServer.RequestFailed)reply; - throw new Failure("BindServer error: " + castedReply.reason); - } else { - throw new Failure("Wrong reply from BindServer: " + reply); - } - } /** * Close binder by closing all started threads. */ public void close() { - if (bindServerListener != null) { - bindServerListener.close(); - } closePipeServerSocket(); } - /** - * Separate thread for listening connection from BindServer. - */ - private class BindServerListener extends Thread { - private SocketConnection connection = null; - private Log.Logger logger = null; - - /** List of received responses from BindServer. */ - private LinkedList replies = new LinkedList(); - - /** - * Make thread. - */ - public BindServerListener(Log.Logger logger) { - this.logger = logger; - } - - /** - * Establish connection to BindServer. - */ - public void connect(String taskID) throws IOException { - String host = argumentHandler.getDebugeeHost(); - int port = argumentHandler.getBindPortNumber(); - display("Connecting to BindServer: " + host + ":" + port); - connection = new SocketConnection(logger, "BindServer"); -// connection.setPingTimeout(DebugeeBinder.PING_TIMEOUT); - connection.attach(host, port); - handshake(taskID); - } - - /** - * Receive OK(version) from BindServer and check received version number. - */ - private void handshake(String taskID) { - // receive OK(version) - trace(TRACE_LEVEL_ACTIONS, "Waiting for initial OK(version) from BindServer"); - Object reply = connection.readObject(); - trace(TRACE_LEVEL_ACTIONS, "Got initial OK(version) from BindServer: " + reply); - if (reply instanceof BindServer.RequestFailed) { - BindServer.RequestFailed castedReply = (BindServer.RequestFailed)reply; - trace(TRACE_LEVEL_ACTIONS, "Reply is RequestFailed: throw Failure"); - throw new Failure("BindServer error: " + castedReply.reason); - } else if (reply instanceof BindServer.OK) { - BindServer.OK castedReply = (BindServer.OK)reply; - trace(TRACE_LEVEL_ACTIONS, "Reply is OK: check BindServer version"); - if (castedReply.info != BindServer.VERSION) { - throw new Failure("Wrong version of BindServer: " + castedReply.info - + " (expected: " + BindServer.VERSION + ")"); - } - display("Connected to BindServer: version " + castedReply.info); - } else { - trace(TRACE_LEVEL_ACTIONS, "Reply is unknown: throw Failure"); - throw new Failure("Wrong reply from BindServer: " + reply); - } - - // send TaskID(id) - try { - trace(TRACE_LEVEL_ACTIONS, "Sending TaskID(id) to BindServer"); - sendCommand(new BindServer.TaskID(taskID)); - trace(TRACE_LEVEL_ACTIONS, "Sent TaskID(id) to BindServer"); - } catch (IOException e) { - throw new Failure("Caught IOException while sending TaskID(id) to BindServer:\n\t" - + e); - } - } - - /** - * Check if thread is connected to BindServer. - */ - public boolean isConnected() { - return (connection != null && connection.isConnected()); - } - - /** - * Send a command to BindServer. - */ - public synchronized void sendCommand(Object command) throws IOException { - connection.writeObject(command); - } - - /** - * Receive response from BindServer. - */ - public Object getReply() { - synchronized (replies) { - while (replies.isEmpty()) { - if (!isConnected()) { - throw new Failure("No reply from BindServer: connection lost"); - } - try { - replies.wait(TRY_DELAY); - } catch (InterruptedException e) { - e.printStackTrace(getOutStream()); - throw new Failure("Thread interrupted while waiting for reply from BindServer:\n\t" - + e); - } - } - Object reply = replies.removeFirst(); - if (reply == null) { - throw new Failure("No reply from BindServer: connection lost"); - } - return reply; - } - } - - /** - * Add response object to the list of received responses. - */ - private void addReply(BindServer.Response reply) { - synchronized (replies) { - replies.add(reply); - replies.notifyAll(); - } - } - - /** - * Read packets from BindServer connection and - * notify waiting thread if response or IOPipe message received. - * Received lines of redirected streams are put into log. - */ - public void run() { - trace(TRACE_LEVEL_THREADS, "BindServerListener thread started"); - try { - for (;;) { - Object reply = connection.readObject(); - if (reply == null) { - break; - } else if (reply instanceof BindServer.Disconnect) { - reply = null; - trace(TRACE_LEVEL_ACTIONS, "Packet is Disconnect: close connection"); - break; - } else if (reply instanceof BindServer.RedirectedStream) { - BindServer.RedirectedStream castedReply = (BindServer.RedirectedStream)reply; - trace(TRACE_LEVEL_ACTIONS, "Packet is RedirectedStream: put message into log"); - log.println(castedReply.line); - } else if (reply instanceof BindServer.Response) { - BindServer.Response castedReply = (BindServer.Response)reply; - trace(TRACE_LEVEL_ACTIONS, "Packet is reply: notify all threads waiting for reply"); - addReply(castedReply); - } else { - trace(TRACE_LEVEL_ACTIONS, "Packet is unknown: throw Failure"); - throw new Failure("Wrong reply from BindServer: " + reply); - } - } - } catch (Exception e) { - e.printStackTrace(getOutStream()); - complain("Caught exception while reading packets from BindServer:\n\t" + e); - } finally { - closeConnection(); - addReply(null); - trace(TRACE_LEVEL_THREADS, "BindServerListener thread finished"); - } - } - - /** - * Send Disconnect command to BindServer. - */ - public void disconnect() { - if (connection == null) return; - try { - sendCommand(new BindServer.Disconnect()); - } catch (IOException e) { - display("Caught IOException while requesting disconnection with BindServer"); - } - } - - /** - * Close socket connection. - */ - public void closeConnection() { - if (connection != null) { - connection.close(); - } - } - - /** - * Wait for thread finished in the specified timeout or interrupt it. - */ - public void waitForThread(long millis) { - DebugeeBinder.waitForThread(this, millis, logger); - } - - /** - * Close this thread by waiting for it finishes or interrupt it - * and close socket connection. - */ - public void close() { - disconnect(); - waitForThread(DebugeeBinder.THREAD_TIMEOUT); - closeConnection(); - } - - } // BindServerListener - } // DebugeeBinder diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeProcess.java b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeProcess.java index 6eb1f32766075..b875911e973d9 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeProcess.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/share/jpda/DebugeeProcess.java @@ -74,8 +74,8 @@ abstract public class DebugeeProcess { /** Argument handler from binder. */ protected DebugeeArgumentHandler argumentHandler = null; - /** Need or not to check debuggee process termination at exit. */ - protected boolean checkTermination = false; + /** Need or not to check debuggee process termination. */ + private boolean checkTermination = true; /** Debugee VM process or null if not available. */ protected Process process = null; @@ -164,26 +164,50 @@ public void sendSignal(String signal) { // --------------------------------------------------- // /** Wait until the debugee VM shutdown or crash. */ - abstract protected int waitForDebugee () throws InterruptedException; + protected int waitForDebugee() throws InterruptedException { + return process.waitFor(); + } /** Kill the debugee VM. */ - abstract protected void killDebugee (); + protected void killDebugee() { + if (!terminated()) { + log.display("Killing debugee VM process"); + process.destroy(); + } + } /** Check whether the debugee VM has been terminated. */ - abstract public boolean terminated (); + public boolean terminated() { + if (process == null) + return true; + + try { + int value = process.exitValue(); + return true; + } catch (IllegalThreadStateException e) { + return false; + } + } /** Return the debugee VM exit status. */ - abstract public int getStatus (); + public int getStatus() { + return process.exitValue(); + } /** Get a pipe to write to the debugee's stdin stream. */ - abstract protected OutputStream getInPipe (); + protected OutputStream getInPipe() { + return process.getOutputStream(); + } /** Get a pipe to read the debugee's stdout stream. */ - abstract protected InputStream getOutPipe (); + protected InputStream getOutPipe() { + return process.getInputStream(); + } /** Get a pipe to read the debugee's stderr stream. */ - abstract protected InputStream getErrPipe (); - + protected InputStream getErrPipe() { + return process.getErrorStream(); + } // --------------------------------------------------- // /** From a81e1bf1e1a6f00280b9be987c03fe20915fd52c Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Thu, 20 Jun 2024 15:43:56 +0000 Subject: [PATCH 056/102] 8332252: Clean up vmTestbase/vm/share Reviewed-by: cjplummer --- .../gc/gctests/LoadUnloadGC/LoadUnloadGC.java | 6 +- .../LoadUnloadGC}/MemoryPoolFinder.java | 6 +- .../metaspace/gc/HighWaterMarkTest.java | 3 +- .../share}/HeapOOMEException.java | 2 +- .../TriggerUnloadingByFillingMetaspace.java | 2 +- .../share}/TriggerUnloadingHelper.java | 2 +- .../share}/TriggerUnloadingWithWhiteBox.java | 2 +- .../staticReferences/StaticReferences.java | 8 +- .../common/PerformChecksHelper.java | 6 +- .../common/StressHierarchyBaseClass.java | 9 +- .../hotswap/HS203/hs203t004/hs203t004.java | 11 +- .../complog/share/LogCompilationTest.java | 3 +- .../complog/share}/ProcessExecutor.java | 13 +- .../complog/share}/StreamListener.java | 2 +- .../complog/share}/StreamLogger.java | 2 +- .../complog/share}/StreamReader.java | 2 +- .../hiddenloader/func/findByName/Test.java | 4 +- .../share/StressClassLoadingTest.java | 23 +- .../stress/byteMutation/Test.java | 4 +- .../hiddenloader/stress/oome/heap/Test.java | 4 +- .../stress/oome/metaspace/Test.java | 4 +- .../stress/parallelLoad/Test.java | 4 +- .../indy/stress/gc/lotsOfCallSites/Test.java | 8 +- .../vm/mlvm/share/CustomClassLoaders.java | 4 +- .../vm/{ => mlvm}/share/FileUtils.java | 2 +- .../vm/mlvm/share/MlvmTestExecutor.java | 21 +- .../vm/share/CommentedFileReader.java | 119 ----------- .../vmTestbase/vm/share/ProcessUtils.cpp | 201 ------------------ .../vmTestbase/vm/share/ProcessUtils.java | 65 +----- .../jtreg/vmTestbase/vm/share/RandomEx.java | 92 -------- .../vmTestbase/vm/share/StringUtils.java | 89 -------- .../vmTestbase/vm/share/UnsafeAccess.java | 42 ---- .../vm/share/VMRuntimeEnvUtils.java | 108 ---------- .../monitoring/data/MemoryManagerData.java | 61 ------ .../share/monitoring/data/MemoryPoolData.java | 59 ----- .../monitoring/data/MemoryUsageData.java | 82 ------- .../vm/share/process/CmdExecutor.java | 63 ------ .../vm/share/process/MessageInput.java | 37 ---- .../vm/share/process/MessageOutput.java | 29 --- .../vm/share/process/ProcessHandler.java | 102 --------- .../vm/share/process/StreamMessageInput.java | 187 ---------------- .../vm/share/process/StreamMessageOutput.java | 56 ----- .../AbstractClassFileTransformer.java | 44 ---- .../share/transform/AnnotationAppender.java | 62 ------ .../transform/TransformingClassLoader.java | 61 ------ 45 files changed, 74 insertions(+), 1642 deletions(-) rename test/hotspot/jtreg/vmTestbase/{vm/share/monitoring => gc/gctests/LoadUnloadGC}/MemoryPoolFinder.java (95%) rename test/hotspot/jtreg/vmTestbase/{vm/share/gc => metaspace/share}/HeapOOMEException.java (98%) rename test/hotspot/jtreg/vmTestbase/{vm/share/gc => metaspace/share}/TriggerUnloadingByFillingMetaspace.java (98%) rename test/hotspot/jtreg/vmTestbase/{vm/share/gc => metaspace/share}/TriggerUnloadingHelper.java (97%) rename test/hotspot/jtreg/vmTestbase/{vm/share/gc => metaspace/share}/TriggerUnloadingWithWhiteBox.java (98%) rename test/hotspot/jtreg/vmTestbase/vm/{share/process => compiler/complog/share}/ProcessExecutor.java (96%) rename test/hotspot/jtreg/vmTestbase/vm/{share/process => compiler/complog/share}/StreamListener.java (97%) rename test/hotspot/jtreg/vmTestbase/vm/{share/process => compiler/complog/share}/StreamLogger.java (98%) rename test/hotspot/jtreg/vmTestbase/vm/{share/process => compiler/complog/share}/StreamReader.java (99%) rename test/hotspot/jtreg/vmTestbase/vm/{ => mlvm}/share/FileUtils.java (99%) delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/CommentedFileReader.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/RandomEx.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/StringUtils.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/UnsafeAccess.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/VMRuntimeEnvUtils.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryManagerData.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryPoolData.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryUsageData.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/process/CmdExecutor.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/process/MessageInput.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/process/MessageOutput.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessHandler.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageInput.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageOutput.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/transform/AbstractClassFileTransformer.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/transform/AnnotationAppender.java delete mode 100644 test/hotspot/jtreg/vmTestbase/vm/share/transform/TransformingClassLoader.java diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/LoadUnloadGC.java b/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/LoadUnloadGC.java index 9b79865462d6f..1d95426554b6a 100644 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/LoadUnloadGC.java +++ b/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/LoadUnloadGC.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -71,12 +71,8 @@ package gc.gctests.LoadUnloadGC; -import nsk.share.test.*; import nsk.share.gc.*; import nsk.share.classload.ClassPathNonDelegatingClassLoader; -import vm.share.monitoring.MemoryPoolFinder; - -import java.io.*; import java.util.*; import java.lang.management.MemoryPoolMXBean; diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/MemoryPoolFinder.java b/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/MemoryPoolFinder.java similarity index 95% rename from test/hotspot/jtreg/vmTestbase/vm/share/monitoring/MemoryPoolFinder.java rename to test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/MemoryPoolFinder.java index ca68beffca641..f7f5e19bd16f5 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/MemoryPoolFinder.java +++ b/test/hotspot/jtreg/vmTestbase/gc/gctests/LoadUnloadGC/MemoryPoolFinder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -20,11 +20,11 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.monitoring; +package gc.gctests.LoadUnloadGC; import java.lang.management.*; -public enum MemoryPoolFinder { +enum MemoryPoolFinder { CODE_CACHE, EDEN_SPACE, SURVIVOR_SPACE, diff --git a/test/hotspot/jtreg/vmTestbase/metaspace/gc/HighWaterMarkTest.java b/test/hotspot/jtreg/vmTestbase/metaspace/gc/HighWaterMarkTest.java index f13dae70c919d..244431100f7b2 100644 --- a/test/hotspot/jtreg/vmTestbase/metaspace/gc/HighWaterMarkTest.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/gc/HighWaterMarkTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,6 @@ package metaspace.gc; import java.util.Arrays; -import vm.share.VMRuntimeEnvUtils; /** * Test metaspace ergonomic. diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/gc/HeapOOMEException.java b/test/hotspot/jtreg/vmTestbase/metaspace/share/HeapOOMEException.java similarity index 98% rename from test/hotspot/jtreg/vmTestbase/vm/share/gc/HeapOOMEException.java rename to test/hotspot/jtreg/vmTestbase/metaspace/share/HeapOOMEException.java index 534df351169b2..493189a58c71e 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/gc/HeapOOMEException.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/share/HeapOOMEException.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.gc; +package metaspace.share; /** * This class is used to distinguish between OOME in metaspace and OOME in heap when triggering class unloading. diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingByFillingMetaspace.java b/test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingByFillingMetaspace.java similarity index 98% rename from test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingByFillingMetaspace.java rename to test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingByFillingMetaspace.java index e3f9caf9533e2..217abc25c96aa 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingByFillingMetaspace.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingByFillingMetaspace.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.gc; +package metaspace.share; import nsk.share.test.ExecutionController; import nsk.share.gc.gp.classload.GeneratedClassProducer; diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingHelper.java b/test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingHelper.java similarity index 97% rename from test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingHelper.java rename to test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingHelper.java index b6458f5865e9c..7c9e4bec1a615 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingHelper.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingHelper.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.gc; +package metaspace.share; import nsk.share.test.ExecutionController; diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingWithWhiteBox.java b/test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingWithWhiteBox.java similarity index 98% rename from test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingWithWhiteBox.java rename to test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingWithWhiteBox.java index dfe4bb73acbae..678e9551fa750 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/gc/TriggerUnloadingWithWhiteBox.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/share/TriggerUnloadingWithWhiteBox.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.gc; +package metaspace.share; import jdk.test.whitebox.WhiteBox; diff --git a/test/hotspot/jtreg/vmTestbase/metaspace/staticReferences/StaticReferences.java b/test/hotspot/jtreg/vmTestbase/metaspace/staticReferences/StaticReferences.java index 690f2a6751708..ce0dd65c7eebf 100644 --- a/test/hotspot/jtreg/vmTestbase/metaspace/staticReferences/StaticReferences.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/staticReferences/StaticReferences.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,14 +53,14 @@ import java.util.Map; import java.util.Random; -import vm.share.InMemoryJavaCompiler; +import metaspace.share.TriggerUnloadingHelper; +import metaspace.share.TriggerUnloadingWithWhiteBox; import nsk.share.gc.GCTestBase; import nsk.share.test.ExecutionController; import nsk.share.test.Stresser; import nsk.share.test.TestBase; import nsk.share.test.Tests; -import vm.share.gc.TriggerUnloadingHelper; -import vm.share.gc.TriggerUnloadingWithWhiteBox; +import vm.share.InMemoryJavaCompiler; /** * Test checks that static fields will be initialized in new loaded class. Test performs in loop the following routine: diff --git a/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/PerformChecksHelper.java b/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/PerformChecksHelper.java index 476dceb395de3..3d57bfb6ea9ee 100644 --- a/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/PerformChecksHelper.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/PerformChecksHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,13 +28,13 @@ import java.lang.reflect.Proxy; import java.util.List; +import jdk.test.whitebox.WhiteBox; +import metaspace.share.TriggerUnloadingHelper; import metaspace.stressHierarchy.common.classloader.tree.Node; import metaspace.stressHierarchy.common.classloader.tree.Tree; import metaspace.stressHierarchy.common.exceptions.ClassNotUnloadedException; import metaspace.stressHierarchy.common.exceptions.TimeIsOverException; import nsk.share.test.ExecutionController; -import jdk.test.whitebox.WhiteBox; -import vm.share.gc.TriggerUnloadingHelper; public class PerformChecksHelper { diff --git a/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/StressHierarchyBaseClass.java b/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/StressHierarchyBaseClass.java index 61a19baf98e36..20fcdabb13cf2 100644 --- a/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/StressHierarchyBaseClass.java +++ b/test/hotspot/jtreg/vmTestbase/metaspace/stressHierarchy/common/StressHierarchyBaseClass.java @@ -24,11 +24,10 @@ import java.net.MalformedURLException; -import vm.share.gc.HeapOOMEException; -import vm.share.gc.TriggerUnloadingByFillingMetaspace; -import vm.share.gc.TriggerUnloadingHelper; -import vm.share.gc.TriggerUnloadingWithWhiteBox; - +import metaspace.share.HeapOOMEException; +import metaspace.share.TriggerUnloadingByFillingMetaspace; +import metaspace.share.TriggerUnloadingHelper; +import metaspace.share.TriggerUnloadingWithWhiteBox; import metaspace.stressHierarchy.common.classloader.tree.Node; import metaspace.stressHierarchy.common.classloader.tree.Tree; import metaspace.stressHierarchy.common.exceptions.TimeIsOverException; diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/hotswap/HS203/hs203t004/hs203t004.java b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/hotswap/HS203/hs203t004/hs203t004.java index a694698e2a39d..f9f1aa8a2706f 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/hotswap/HS203/hs203t004/hs203t004.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/hotswap/HS203/hs203t004/hs203t004.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -56,8 +56,6 @@ package nsk.jvmti.scenarios.hotswap.HS203.hs203t004; -import vm.share.VMRuntimeEnvUtils; -import nsk.share.Consts; import nsk.share.jvmti.RedefineAgent; public class hs203t004 extends RedefineAgent { @@ -68,13 +66,6 @@ public hs203t004(String[] arg) { public static void main(String[] arg) { arg = nsk.share.jvmti.JVMTITest.commonInit(arg); - - if (!VMRuntimeEnvUtils.isJITEnabled()) { - System.out.println("WARNING: test isn't valid if JIT compilation is disabled"); - System.out.println("Exiting with 'PASSED' status"); - System.exit(Consts.JCK_STATUS_BASE + Consts.TEST_PASSED); - } - hs203t004 hsCase = new hs203t004(arg); System.exit(hsCase.runAgent()); } diff --git a/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/LogCompilationTest.java b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/LogCompilationTest.java index 0d24be9a16da7..0a069d272c004 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/LogCompilationTest.java +++ b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/LogCompilationTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,7 +29,6 @@ import nsk.share.log.LogSupport; import vm.share.options.Option; import vm.share.options.OptionSupport; -import vm.share.process.ProcessExecutor; import java.io.File; import java.io.FileNotFoundException; diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessExecutor.java b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/ProcessExecutor.java similarity index 96% rename from test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessExecutor.java rename to test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/ProcessExecutor.java index 0d9a0e0632961..9ab0a781d1f89 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessExecutor.java +++ b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/ProcessExecutor.java @@ -20,23 +20,16 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.process; +package vm.compiler.complog.share; import nsk.share.TestBug; import nsk.share.TestFailure; import nsk.share.log.Log; -import vm.share.ProcessUtils; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.BufferedReader; import java.io.OutputStream; import java.io.PrintStream; -import java.io.PipedInputStream; -import java.io.PipedOutputStream; import java.io.IOException; import java.util.*; -import java.lang.reflect.Field; public class ProcessExecutor { private static long CLEANUP_TIMEOUT = 60000; @@ -138,8 +131,8 @@ public int waitFor(long timeout) { return -1; } - public int getPid() { - return ProcessUtils.getPid(process); + public long getPid() { + return process.pid(); } public OutputStream getStdIn() { diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamListener.java b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamListener.java similarity index 97% rename from test/hotspot/jtreg/vmTestbase/vm/share/process/StreamListener.java rename to test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamListener.java index 26c542f9bd003..c2d4e58c5bda8 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamListener.java +++ b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamListener.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.process; +package vm.compiler.complog.share; /* * StreamListener listens on events from BufferedInputStream. diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamLogger.java b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamLogger.java similarity index 98% rename from test/hotspot/jtreg/vmTestbase/vm/share/process/StreamLogger.java rename to test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamLogger.java index 5162e4010ff22..690f0bbfbfc50 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamLogger.java +++ b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamLogger.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.process; +package vm.compiler.complog.share; import nsk.share.log.Log; diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamReader.java b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamReader.java similarity index 99% rename from test/hotspot/jtreg/vmTestbase/vm/share/process/StreamReader.java rename to test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamReader.java index a8f56318da5b2..d983ae1aebea3 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamReader.java +++ b/test/hotspot/jtreg/vmTestbase/vm/compiler/complog/share/StreamReader.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share.process; +package vm.compiler.complog.share; import java.io.InputStream; import java.io.InputStreamReader; diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/func/findByName/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/func/findByName/Test.java index f891b980f8261..f78c9221dd503 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/func/findByName/Test.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/func/findByName/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,7 +50,7 @@ import vm.mlvm.hiddenloader.share.HiddenkTestee01; import vm.mlvm.share.MlvmTest; -import vm.share.FileUtils; +import vm.mlvm.share.FileUtils; public class Test extends MlvmTest { private static final Class PARENT = HiddenkTestee01.class; diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/share/StressClassLoadingTest.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/share/StressClassLoadingTest.java index edb91743c44e9..b269d7aa57ff6 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/share/StressClassLoadingTest.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/share/StressClassLoadingTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,24 +23,25 @@ package vm.mlvm.hiddenloader.share; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodHandles.Lookup; + import java.io.File; -import java.util.Objects; -import java.util.concurrent.atomic.AtomicBoolean; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodHandles.Lookup; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; + import nsk.share.test.Stresser; -import vm.share.options.Option; -import vm.share.options.OptionSupport; -import vm.share.options.IgnoreUnknownArgumentsHandler; import vm.mlvm.share.Env; import vm.mlvm.share.MlvmTest; import vm.mlvm.share.CustomClassLoaders; -import vm.share.FileUtils; -import vm.share.UnsafeAccess; +import vm.mlvm.share.FileUtils; +import vm.share.options.Option; +import vm.share.options.OptionSupport; +import vm.share.options.IgnoreUnknownArgumentsHandler; /** * Does stress-testing of class loading subsystem. @@ -164,7 +165,7 @@ public void run() { c = CustomClassLoaders.makeClassBytesLoader(classBytes, className) .loadClass(className); } - UnsafeAccess.unsafe.ensureClassInitialized(c); + MethodHandles.lookup().ensureInitialized(c); } catch (Throwable e) { Env.traceVerbose(e, "parser caught exception"); } diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/byteMutation/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/byteMutation/Test.java index e6a3e8a890d74..e9a49e119c887 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/byteMutation/Test.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/byteMutation/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,7 @@ import vm.mlvm.hiddenloader.share.HiddenkTestee01; import vm.mlvm.hiddenloader.share.StressClassLoadingTest; -import vm.share.FileUtils; +import vm.mlvm.share.FileUtils; import vm.share.options.Option; /** diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/heap/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/heap/Test.java index ea59685dfd3df..47de77729305d 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/heap/Test.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/heap/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,7 @@ import vm.mlvm.share.MlvmOOMTest; import vm.mlvm.share.MlvmTestExecutor; import vm.mlvm.share.Env; -import vm.share.FileUtils; +import vm.mlvm.share.FileUtils; /** * This test loads a class using defineHiddenClass, creates instances diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/metaspace/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/metaspace/Test.java index 85bb7c6167fff..886e2e3d52585 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/metaspace/Test.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/oome/metaspace/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,7 @@ import vm.mlvm.share.MlvmOOMTest; import vm.mlvm.share.MlvmTestExecutor; import vm.mlvm.share.Env; -import vm.share.FileUtils; +import vm.mlvm.share.FileUtils; /** * This test loads classes using defineHiddenClass and stores them, diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/parallelLoad/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/parallelLoad/Test.java index fa4dbf3f4eb19..b3e433df95758 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/parallelLoad/Test.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/hiddenloader/stress/parallelLoad/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,7 @@ import vm.mlvm.hiddenloader.share.HiddenkTestee01; import vm.mlvm.share.MlvmTestExecutor; import vm.mlvm.share.MultiThreadedTest; -import vm.share.FileUtils; +import vm.mlvm.share.FileUtils; /** * Verifies that loading classes in parallel from several threads using diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java index beb77041fdb18..6f2c82923b21e 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/indy/stress/gc/lotsOfCallSites/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,15 +47,11 @@ package vm.mlvm.indy.stress.gc.lotsOfCallSites; import java.lang.invoke.CallSite; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodType; import java.lang.ref.PhantomReference; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.lang.reflect.InvocationTargetException; import java.lang.management.MemoryMXBean; import java.lang.management.MemoryPoolMXBean; import java.lang.management.ManagementFactory; @@ -67,8 +63,8 @@ import nsk.share.test.Stresser; import vm.mlvm.share.CustomClassLoaders; import vm.mlvm.share.Env; +import vm.mlvm.share.FileUtils; import vm.mlvm.share.MlvmTest; -import vm.share.FileUtils; import vm.share.options.Option; /** diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java index 9596f7b1eab38..6be720088ac56 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/CustomClassLoaders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,6 @@ import java.io.IOException; -import vm.share.FileUtils; - public class CustomClassLoaders { public static ClassLoader makeClassBytesLoader(final byte[] classBytes, diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/FileUtils.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/FileUtils.java similarity index 99% rename from test/hotspot/jtreg/vmTestbase/vm/share/FileUtils.java rename to test/hotspot/jtreg/vmTestbase/vm/mlvm/share/FileUtils.java index 1652e75beafa8..c749551e85b1f 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/FileUtils.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/FileUtils.java @@ -20,7 +20,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package vm.share; +package vm.mlvm.share; import java.io.File; import java.io.FileInputStream; diff --git a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java index 2c219309b634d..5ff219e827158 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java +++ b/test/hotspot/jtreg/vmTestbase/vm/mlvm/share/MlvmTestExecutor.java @@ -23,12 +23,16 @@ package vm.mlvm.share; +import java.io.File; +import java.io.IOException; +import java.lang.management.ManagementFactory; import java.lang.reflect.Constructor; import java.util.List; +import com.sun.management.HotSpotDiagnosticMXBean; + import nsk.share.Consts; import nsk.share.ArgumentParser; -import vm.share.ProcessUtils; import vm.share.options.IgnoreUnknownArgumentsHandler; import vm.share.options.OptionSupport; @@ -261,10 +265,23 @@ public static void launch(Class testClass, Object[] constructorArgs) { } } + private static void dumpHeapWithHotspotDiagnosticMXBean(String fileName) throws IOException { + System.err.println("Dumping heap to " + fileName); + + File f = new File(fileName); + if (f.exists()) + f.delete(); + + HotSpotDiagnosticMXBean b = ManagementFactory.getPlatformMXBeans( + com.sun.management.HotSpotDiagnosticMXBean.class).get(0); + b.dumpHeap(fileName, false); + } + + private static void optionallyDumpHeap() { try { if (MlvmTest.getHeapDumpAfter()) { - ProcessUtils.dumpHeapWithHotspotDiagnosticMXBean(HEAP_DUMP_FILENAME); + dumpHeapWithHotspotDiagnosticMXBean(HEAP_DUMP_FILENAME); } } catch (Exception e) { Env.traceNormal(e, "Error dumping heap: "); diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/CommentedFileReader.java b/test/hotspot/jtreg/vmTestbase/vm/share/CommentedFileReader.java deleted file mode 100644 index 019d237482c71..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/CommentedFileReader.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share; - -import java.io.*; -import java.util.LinkedList; - -/** - * Utility class intended to read file line by line and skip comments. - */ -public class CommentedFileReader { - - /** - * Type of comments that should be removed from file. - */ - public static enum CommentStyle { - /** - * Comments started with #. - */ - BASH, - /** - * Comments started with //. - */ - JAVA - } - - /** - * Get lines from specified file and filter out comments. - * Only comments in BASH style will be filtered out. - * - * @param path to file that should be readed - * @return filtered lines from file - */ - public static String[] readFile(String path) throws IOException { - return readFile(new File(path), CommentStyle.BASH); - } - - /** - * Get lines from specified file and filter out comments. - * Only comments in BASH style will be filtered out. - * - * @param file that should be readed - * @return filtered lines from file - */ - public static String[] readFile(File file) throws IOException { - return readFile(file, CommentStyle.BASH); - } - - /** - * Get lines from specified file without comments. - * - * @param path to file that should be readed - * @param commentStyle describes what strings will be treated as comments - * @return filtered lines from file - */ - public static String[] readFile(String path, CommentStyle commentStyle) throws IOException { - return readFile(new File(path), commentStyle); - } - - /** - * Get lines from specified file without comments. - * - * @param file that should be readed - * @param commentStyle describes what strings will be treated as comments - * @return filtered lines from file - */ - public static String[] readFile(File file, CommentStyle commentStyle) throws IOException { - LinkedList entries = new LinkedList(); - BufferedReader reader = new BufferedReader(new FileReader(file)); - String commentBeginning; - - switch (commentStyle) { - case BASH: - commentBeginning = "#"; - break; - case JAVA: - commentBeginning = "//"; - break; - default: - throw new IllegalArgumentException("Unknown comment style"); - } - - while (true) { - String entry = reader.readLine(); - if (entry == null) { - break; - } - - entry = entry.replaceAll(commentBeginning + ".*", "").trim(); - - if (entry.length() > 0) { - entries.add(entry); - } - } - - return entries.toArray(new String[entries.size()]); - } - -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.cpp b/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.cpp index c69025fe4c2c3..1f7305b381c53 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.cpp +++ b/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.cpp @@ -21,12 +21,8 @@ * questions. */ #include "jni.h" -#include "native_thread.hpp" #ifdef _WIN32 #include -#include -#include -#include #else /* _WIN32 */ #include #include @@ -35,40 +31,6 @@ extern "C" { -/* - * Class: vm_share_ProcessUtils - * Method: sendSignal - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_vm_share_ProcessUtils_sendSignal -(JNIEnv *env, jclass klass, jint signalNum) { -#ifdef _WIN32 -/* TODO TODO TODO - int dw; - LPVOID lpMsgBuf; - if (!GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0)) { - dw = GetLastError(); - FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - nullptr, - dw, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - (LPTSTR) &lpMsgBuf, - 0, - nullptr - ); - printf("%s\n", (LPTSTR)lpMsgBuf); - LocalFree(lpMsgBuf); - return JNI_FALSE; - } - */ - return JNI_TRUE; -#else /* _WIN32 */ - if (kill(getpid(), signalNum) < 0) - return JNI_FALSE; - return JNI_TRUE; -#endif /* _WIN32 */ -} - /* * Class: vm_share_ProcessUtils * Method: sendCtrlBreak @@ -101,167 +63,4 @@ JNIEXPORT jboolean JNICALL Java_vm_share_ProcessUtils_sendCtrlBreak #endif /* _WIN32 */ } -#ifdef _WIN32 -static BOOL (WINAPI *_MiniDumpWriteDump) (HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, PMINIDUMP_EXCEPTION_INFORMATION, - PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION); -void reportLastError(const char *msg) { - long errcode = GetLastError(); - if (errcode != 0) { - DWORD len = 0; - char *buf; - size_t n = (size_t)FormatMessage( - FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_ALLOCATE_BUFFER, - nullptr, - errcode, - 0, - (LPSTR) &buf, - (DWORD)len, - nullptr); - if (n > 3) { - /* Drop final '.', CR, LF */ - if (buf[n - 1] == '\n') n--; - if (buf[n - 1] == '\r') n--; - if (buf[n - 1] == '.') n--; - buf[n] = '\0'; - } - printf("%s: %s\n", msg, buf); - LocalFree(buf); - } -} - -#endif /* _WIN32 */ - -jboolean doDumpCore() { -#ifdef _WIN32 - char path[MAX_PATH]; - DWORD size; - DWORD pathLen = (DWORD) sizeof(path); - HINSTANCE dbghelp; - MINIDUMP_EXCEPTION_INFORMATION* pmei; - - HANDLE hProcess = GetCurrentProcess(); - DWORD processId = GetCurrentProcessId(); - HANDLE dumpFile; - MINIDUMP_TYPE dumpType; - static const char* cwd; - static const char* name = "DBGHELP.DLL"; - - printf("# TEST: creating Windows minidump...\n"); - size = GetSystemDirectory(path, pathLen); - if (size > 0) { - strcat(path, "\\"); - strcat(path, name); - dbghelp = LoadLibrary(path); - if (dbghelp == nullptr) - reportLastError("Load DBGHELP.DLL from system directory"); - } else { - printf("GetSystemDirectory returned 0\n"); - } - - // try Windows directory - if (dbghelp == nullptr) { - size = GetWindowsDirectory(path, pathLen); - if (size > 6) { - strcat(path, "\\"); - strcat(path, name); - dbghelp = LoadLibrary(path); - if (dbghelp == nullptr) { - reportLastError("Load DBGHELP.DLL from Windows directory"); - } - } - } - if (dbghelp == nullptr) { - printf("Failed to load DBGHELP.DLL\n"); - return JNI_FALSE; - } - - _MiniDumpWriteDump = - (BOOL(WINAPI *)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, PMINIDUMP_EXCEPTION_INFORMATION, - PMINIDUMP_USER_STREAM_INFORMATION, PMINIDUMP_CALLBACK_INFORMATION)) - GetProcAddress(dbghelp, "MiniDumpWriteDump"); - - if (_MiniDumpWriteDump == nullptr) { - printf("Failed to find MiniDumpWriteDump() in module dbghelp.dll"); - return JNI_FALSE; - } - dumpType = (MINIDUMP_TYPE)(MiniDumpWithFullMemory | MiniDumpWithHandleData); - - // Older versions of dbghelp.h doesn't contain all the dumptypes we want, dbghelp.h with - // API_VERSION_NUMBER 11 or higher contains the ones we want though -#if API_VERSION_NUMBER >= 11 - dumpType = (MINIDUMP_TYPE)(dumpType | MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo | - MiniDumpWithUnloadedModules); -#endif - - dumpFile = CreateFile("core.mdmp", GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); - - if (dumpFile == INVALID_HANDLE_VALUE) { - reportLastError("Failed to create file for dumping"); - return JNI_FALSE; - } - pmei = nullptr; - - - // Older versions of dbghelp.dll (the one shipped with Win2003 for example) may not support all - // the dump types we really want. If first call fails, lets fall back to just use MiniDumpWithFullMemory then. - if (_MiniDumpWriteDump(hProcess, processId, dumpFile, dumpType, pmei, nullptr, nullptr) == FALSE && - _MiniDumpWriteDump(hProcess, processId, dumpFile, (MINIDUMP_TYPE)MiniDumpWithFullMemory, pmei, nullptr, nullptr) == FALSE) { - reportLastError("Call to MiniDumpWriteDump() failed"); - return JNI_FALSE; - } - - CloseHandle(dumpFile); - printf("# TEST: minidump created\n"); - // Emulate Unix behaviour - exit process. - ExitProcess(137); - - return JNI_TRUE; -#else /* _WIN32 */ - if (kill(getpid(), SIGSEGV) < 0) - return JNI_FALSE; - return JNI_TRUE; -#endif /* _WIN32 */ - -} - -/* - * Class: vm_share_ProcessUtils - * Method: dumpCore - * Signature: ()Z - */ -JNIEXPORT jboolean JNICALL Java_vm_share_ProcessUtils_dumpCore - (JNIEnv *env, jclass klass) -{ - return doDumpCore(); -} - -/* - * Class: vm_share_ProcessUtils - * Method: getPid - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_vm_share_ProcessUtils_getPid - (JNIEnv *env, jclass klass) { -#ifdef _WIN32 - return _getpid(); -#else /* _WIN32 */ - return getpid(); -#endif /* _WIN32 */ -} - - -/* - * Class: vm_share_ProcessUtils - * Method: getPid - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_vm_share_ProcessUtils_getWindowsPid - (JNIEnv *env, jclass klass, jlong handle) { -#ifdef _WIN32 - return GetProcessId((HANDLE) handle); -#else /* _WIN32 */ - return -1; -#endif /* _WIN32 */ -} - } diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.java b/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.java index 2e9174452fdd3..3595428d98c25 100644 --- a/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.java +++ b/test/hotspot/jtreg/vmTestbase/vm/share/ProcessUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,67 +46,4 @@ private ProcessUtils() {} * @return true if it was successful */ public static native boolean sendCtrlBreak(); - - /** - * Send any signal to java process on Unix. It currently does nothing on Windows. - * - * @return true if it was successful - */ - public static native boolean sendSignal(int signalNum); - - /** - * Force java process to dump core. - * - * This is done by sending SIGSEGV on unix systems. - * - * @return true if it was successful, false if not (for example on Windows) - */ - public static native boolean dumpCore(); - - /** - * Get PID of java process. - * - * @return PID - */ - public static native int getPid(); - - public static int getPid(Process process) { - Throwable exception; - try { - Field pidField = process.getClass().getDeclaredField("pid"); - pidField.setAccessible(true); - return ((Integer) pidField.get(process)).intValue(); - } catch (NoSuchFieldException e) { - exception = e; - } catch (IllegalAccessException e) { - exception = e; - } - // Try to get Windows handle - try { - Field handleField = process.getClass().getDeclaredField("handle"); - handleField.setAccessible(true); - long handle = ((Long) handleField.get(process)).longValue(); - return getWindowsPid(handle); - } catch (NoSuchFieldException e) { - exception = e; - } catch (IllegalAccessException e) { - exception = e; - } - throw new TestBug("Unable to determine pid from process class " + process.getClass(), exception); - } - - private static native int getWindowsPid(long handle); - - @SuppressWarnings("restriction") - public static void dumpHeapWithHotspotDiagnosticMXBean(String fileName) throws IOException { - System.err.println("Dumping heap to " + fileName); - - File f = new File(fileName); - if (f.exists()) - f.delete(); - - HotSpotDiagnosticMXBean b = ManagementFactory.getPlatformMXBeans( - com.sun.management.HotSpotDiagnosticMXBean.class).get(0); - b.dumpHeap(fileName, false); - } } diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/RandomEx.java b/test/hotspot/jtreg/vmTestbase/vm/share/RandomEx.java deleted file mode 100644 index 8abcfb1ba80e4..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/RandomEx.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share; - -import java.util.HashMap; -import java.util.Map; -import java.util.Random; -import java.util.function.Predicate; -import java.util.function.Supplier; - -import jdk.test.lib.Utils; - -public class RandomEx extends Random { - private final Map, Supplier> map = new HashMap<>(); - - { - map.put(Boolean.class, this::nextBoolean); - map.put(boolean.class, this::nextBoolean); - map.put(Byte.class, this::nextByte); - map.put(byte.class, this::nextByte); - map.put(Short.class, this::nextShort); - map.put(short.class, this::nextShort); - map.put(Character.class, this::nextChar); - map.put(char.class, this::nextChar); - map.put(Integer.class, this::nextInt); - map.put(int.class, this::nextInt); - map.put(Long.class, this::nextLong); - map.put(long.class, this::nextLong); - map.put(Float.class, this::nextFloat); - map.put(float.class, this::nextFloat); - map.put(Double.class, this::nextDouble); - map.put(double.class, this::nextDouble); - } - - public RandomEx() { - super(Utils.getRandomInstance().nextLong()); - } - - public RandomEx(long seed) { - super(seed); - } - - public byte nextByte() { - return (byte) next(Byte.SIZE); - } - - public short nextShort() { - return (short) next(Short.SIZE); - } - - public char nextChar() { - return (char) next(Character.SIZE); - } - - public T next(Predicate p, T dummy) { - T result; - do { - result = next(dummy); - } while (!p.test(result)); - return result; - } - - @SuppressWarnings("unchecked") - public T next(T dummy) { - Supplier supplier = map.get(dummy.getClass()); - if (supplier == null) { - throw new IllegalArgumentException("supplier for <" + - dummy.getClass() + ">is not found"); - } - return (T) supplier.get(); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/StringUtils.java b/test/hotspot/jtreg/vmTestbase/vm/share/StringUtils.java deleted file mode 100644 index 5643953869331..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/StringUtils.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share; - -import java.io.ByteArrayOutputStream; -import java.util.Random; -import java.util.function.Predicate; - -public class StringUtils { - - public static byte[] binaryReplace(final byte[] src, String search, - String replacement) { - if (search.length() == 0) - return src; - - int nReplaced = 0; - - try { - final byte[] bSrch = search.getBytes("ASCII"); - final byte[] bRepl = replacement.getBytes("ASCII"); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - try { - searching: for (int i = 0; i < src.length; i++) { - if (src[i] == bSrch[0]) { - replacing: do { - for (int ii = 1; ii < Math.min(bSrch.length, - src.length - i); ii++) - if (src[i + ii] != bSrch[ii]) - break replacing; - - out.write(bRepl); - i += bSrch.length - 1; - nReplaced++; - continue searching; - } while (false); - } - - out.write(src[i]); - } - - return out.toByteArray(); - - } finally { - out.close(); - } - } catch (Exception e) { - RuntimeException t = new RuntimeException("Test internal error"); - t.initCause(e); - throw t; - } - } - - public static String generateString(Random rng, int length, - Predicate predicate) { - if (length <= 0) { - throw new IllegalArgumentException("length <= 0"); - } - StringBuilder builder = new StringBuilder(length); - for (int i = 0; i < length; ++i) { - char tmp; - do { - tmp = (char) rng.nextInt(Character.MAX_VALUE); - } while (!predicate.test(tmp)); - builder.append(tmp); - } - return builder.toString(); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/UnsafeAccess.java b/test/hotspot/jtreg/vmTestbase/vm/share/UnsafeAccess.java deleted file mode 100644 index 79a0a7392deff..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/UnsafeAccess.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share; - -import java.lang.reflect.Field; - -import jdk.internal.misc.Unsafe; - -@SuppressWarnings("restriction") -public class UnsafeAccess { - public static Unsafe unsafe; - - static { - try { - unsafe = Unsafe.getUnsafe(); - } catch ( Exception e ) { - e.printStackTrace(); - } - } - - -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/VMRuntimeEnvUtils.java b/test/hotspot/jtreg/vmTestbase/vm/share/VMRuntimeEnvUtils.java deleted file mode 100644 index 85cab7a06db7a..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/VMRuntimeEnvUtils.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share; - -import com.sun.management.HotSpotDiagnosticMXBean; -import com.sun.management.VMOption; - -import java.lang.management.ManagementFactory; -import java.util.Objects; - -public class VMRuntimeEnvUtils { - private static HotSpotDiagnosticMXBean DIAGNOSTIC_BEAN - = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class); - - private VMRuntimeEnvUtils() { - } - - public static boolean isJITEnabled() { - boolean isJITEnabled = ManagementFactory.getCompilationMXBean() != null; - - return isJITEnabled; - } - - /** - * Returns value of VM option. - * - * @param name option's name - * @return value of option or {@code null}, if option doesn't exist - * @throws NullPointerException if name is null - * @see HotSpotDiagnosticMXBean#getVMOption(String) - */ - public static String getVMOption(String name) { - Objects.requireNonNull(name); - VMOption tmp; - try { - tmp = DIAGNOSTIC_BEAN.getVMOption(name); - } catch (IllegalArgumentException e) { - tmp = null; - } - return (tmp == null ? null : tmp.getValue()); - } - - /** - * Returns value of VM option or default value. - * - * @param name option's name - * @param defaultValue default value - * @return value of option or {@code defaultValue}, if option doesn't exist - * @throws NullPointerException if name is null - * @see #getVMOption(String) - */ - public static String getVMOption(String name, String defaultValue) { - String result = getVMOption(name); - return result == null ? defaultValue : result; - } - - /** - * Returns if a boolean VM option is enabled or not. - * - * @param name option's name - * @return true iff enabled - * @throws IllegalArgumentException if naming non-boolean or non-existing option - */ - public static boolean isVMOptionEnabled(String name) { - String isSet = getVMOption(name, "error"); - if (isSet.equals("true")) { - return true; - } else if (isSet.equals("false")) { - return false; - } - throw new IllegalArgumentException(name + " is not a boolean option."); - } - - /** - * Sets a specified value for VM option of given name. - * - * @param name option's name - * @param value new value - * @throws NullPointerException if name is null - * @throws IllegalArgumentException if new value is invalid or if vm option - * is not writable. - * @see HotSpotDiagnosticMXBean#setVMOption(String, String) - */ - public static void setVMOption(String name, String value) { - Objects.requireNonNull(name); - DIAGNOSTIC_BEAN.setVMOption(name, value); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryManagerData.java b/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryManagerData.java deleted file mode 100644 index ec58d3d43eb81..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryManagerData.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.monitoring.data; - -import java.lang.management.*; -import javax.management.*; -import java.io.Serializable; - -public class MemoryManagerData implements MemoryManagerMXBean, Serializable { - private String[] memoryPoolNames; - private String name; - private boolean valid; - - public MemoryManagerData(String[] memoryPoolNames, String name, boolean valid) { - this.memoryPoolNames = memoryPoolNames; - this.name = name; - this.valid = valid; - } - - public MemoryManagerData(MemoryManagerMXBean memoryManager) { - this.memoryPoolNames = memoryManager.getMemoryPoolNames(); - this.name = memoryManager.getName(); - this.valid = memoryManager.isValid(); - } - - public String[] getMemoryPoolNames() { - return memoryPoolNames; - } - - public String getName() { - return name; - } - - public boolean isValid() { - return valid; - } - - public ObjectName getObjectName() { - return null; - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryPoolData.java b/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryPoolData.java deleted file mode 100644 index cf2221bf13602..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryPoolData.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.monitoring.data; - -import java.lang.management.MemoryPoolMXBean; -import java.io.Serializable; - -public class MemoryPoolData implements Serializable { - private String name; - private boolean valid; - private MemoryUsageData usage; - - public MemoryPoolData(String name, boolean valid, MemoryUsageData usage) { - this.name = name; - this.valid = valid; - } - - public MemoryPoolData(MemoryPoolMXBean memoryManager) { - this.name = memoryManager.getName(); - this.valid = memoryManager.isValid(); - this.usage = new MemoryUsageData(memoryManager.getUsage()); - } - - public String getName() { - return name; - } - - public boolean hasName(String name) { - return this.name.equals(name); - } - - public boolean isValid() { - return valid; - } - - public MemoryUsageData getUsage() { - return usage; - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryUsageData.java b/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryUsageData.java deleted file mode 100644 index 60b9fababe0ce..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/monitoring/data/MemoryUsageData.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2009, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.monitoring.data; - -import java.io.Serializable; -import java.lang.management.MemoryUsage; -import nsk.share.log.Log; - -public class MemoryUsageData implements Serializable { - private long init; - private long used; - private long committed; - private long max; - - public MemoryUsageData(long init, long used, long committed, long max) { - this.init = init; - this.used = used; - this.committed = committed; - this.max = max; - } - - public MemoryUsageData(MemoryUsage usage) { - this.init = usage.getInit(); - this.used = usage.getUsed(); - this.committed = usage.getCommitted(); - this.max = usage.getMax(); - } - - public MemoryUsageData(MemoryUsageData usage, MemoryUsageData usage1) { - this.init = usage.getInit() + usage1.getInit(); - this.used = usage.getUsed() + usage1.getUsed(); - this.committed = usage.getCommitted() + usage1.getCommitted(); - this.max = usage.getMax() + usage1.getMax(); - } - - public long getInit() { - return init; - } - - public long getUsed() { - return used; - } - - public long getMax() { - return max; - } - - public long getFree() { - return committed - used; - } - - public long getCommitted() { - return committed; - } - - public void log(Log log) { - log.info(" Init: " + init); - log.info(" Used: " + used); - log.info(" Committed: " + committed); - log.info(" Max: " + max); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/CmdExecutor.java b/test/hotspot/jtreg/vmTestbase/vm/share/process/CmdExecutor.java deleted file mode 100644 index bea1bd8282bbb..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/CmdExecutor.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.process; - -import java.io.IOException; -import java.util.Collection; - -public class CmdExecutor extends ProcessExecutor { - private final StringBuilder cmd = new StringBuilder(); - @Override - public void clearArgs() { - cmd.setLength(0); - } - - @Override - public void addArg(String arg) { - cmd.append(" " + arg); - } - - @Override - public void addArgs(String[] args) { - for (String arg : args) { - addArg(arg); - } - } - - @Override - public void addArgs(Collection args) { - for (String arg : args) { - addArg(arg); - } - } - - @Override - protected Process createProcess() throws IOException { - return Runtime.getRuntime().exec(cmd.toString()); - } - - @Override - public String toString() { - return cmd.toString(); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/MessageInput.java b/test/hotspot/jtreg/vmTestbase/vm/share/process/MessageInput.java deleted file mode 100644 index d684d88f54373..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/MessageInput.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.process; - -import java.util.List; - -public interface MessageInput { - public boolean waitForStart(long timeout) throws InterruptedException; - public boolean waitForMessage(long timeout) throws InterruptedException; - public boolean waitForMessage(String msg, long timeout) throws InterruptedException; - public String getMessage(); - public List getMessages(); - public List getMessages(int to); - public List getMessages(int from, int to); - public boolean waitForFinish(long timeout) throws InterruptedException; - public void reset(); -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/MessageOutput.java b/test/hotspot/jtreg/vmTestbase/vm/share/process/MessageOutput.java deleted file mode 100644 index 3a0b4549c4855..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/MessageOutput.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.process; - -public interface MessageOutput { - public void start(); - public void send(String msg); - public void finish(); -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessHandler.java b/test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessHandler.java deleted file mode 100644 index 4ca3b191993f5..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/ProcessHandler.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.process; - -import java.util.List; - -public class ProcessHandler implements MessageInput, MessageOutput { - private StreamMessageInput stdout = new StreamMessageInput(); - private StreamMessageInput stderr = new StreamMessageInput(); - private StreamMessageOutput stdin = new StreamMessageOutput(); - - public ProcessHandler() { - } - - public ProcessHandler(ProcessExecutor exec) { - bind(exec); - } - - public void bind(ProcessExecutor exec) { - exec.addStdOutListener(stdout.createListener()); - exec.addStdErrListener(stderr.createListener()); - exec.start(); - stdin.bind(exec.getStdIn()); - } - - public boolean waitForStart(long timeout) throws InterruptedException { - return stdout.waitForStart(timeout) && stderr.waitForStart(timeout); - } - - public boolean waitForMessage(long timeout) throws InterruptedException { - return stdout.waitForMessage(timeout); - } - - public boolean waitForMessage(String msg, long timeout) throws InterruptedException { - return stdout.waitForMessage(msg, timeout); - } - - public String getMessage() { - return stdout.getMessage(); - } - - public List getMessages() { - return stdout.getMessages(); - } - - public List getMessages(int to) { - return stdout.getMessages(to); - } - - public List getMessages(int from, int to) { - return stdout.getMessages(from, to); - } - - public boolean waitForStdErrMessage(String msg, long timeout) throws InterruptedException { - return stderr.waitForMessage(msg, timeout); - } - - public String getStdErrMessage() { - return stderr.getMessage(); - } - - public boolean waitForFinish(long timeout) throws InterruptedException { - return stdout.waitForFinish(timeout) && stderr.waitForFinish(timeout); - } - - public void start() { - stdin.start(); - } - - public void send(String msg) { - stdin.send(msg); - } - - public void finish() { - stdin.finish(); - } - - public void reset() { - stdout.reset(); - stderr.reset(); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageInput.java b/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageInput.java deleted file mode 100644 index 03d9ec6bd3e69..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageInput.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.process; - -import java.util.List; -import java.util.ArrayList; -import nsk.share.TestBug; - -public class StreamMessageInput implements MessageInput { - private Object sync = new Object(); - private List lines = new ArrayList(); - private int position = 0; - private volatile boolean active = false; - private volatile Throwable exception; - - public StreamMessageInput() { - } - - public StreamMessageInput(StreamReader sd) { - bind(sd); - } - - public StreamListener createListener() { - return new Listener(); - } - - public void bind(StreamReader sd) { - sd.addListener(createListener()); - } - - public boolean isActive() { - return active; - } - - public boolean isException() { - return exception != null; - } - - public Throwable getException() { - return exception; - } - - public boolean waitForStart(long timeout) throws InterruptedException { - long startTime = System.currentTimeMillis(); - long curTime = startTime; - synchronized (sync) { - while (!active && curTime - startTime < timeout) { - sync.wait(curTime - startTime); - curTime = System.currentTimeMillis(); - } - } - return active; - } - - public boolean waitForFinish(long timeout) throws InterruptedException { - long startTime = System.currentTimeMillis(); - long curTime = startTime; - synchronized (sync) { - while (active && curTime - startTime < timeout) { - sync.wait(curTime - startTime); - curTime = System.currentTimeMillis(); - } - } - return !active; - } - - public boolean waitForMessage(String msg, long timeout) throws InterruptedException { - long startTime = System.currentTimeMillis(); - long curTime = startTime; - int n = position; - synchronized (sync) { - while (curTime - startTime < timeout) { - while (n < lines.size()) { - // System.out.println("Check: " + lines.get(n)); - if (msg == null || lines.get(n++).contains(msg)) { - return true; - } - } - sync.wait(timeout - (curTime - startTime)); - curTime = System.currentTimeMillis(); - } - return false; - } - } - - public boolean waitForMessage(long timeout) throws InterruptedException { - return waitForMessage(null, timeout); - } - - public String getMessage() { - if (position < lines.size()) - return lines.get(position++); - else - return null; - } - - public String getMessage(int index) { - return lines.get(index); - } - - public int getPosition() { - return position; - } - - public void setPosition(int position) { - this.position = position; - } - - public int getMessageCount() { - return lines.size(); - } - - public List getMessages() { - return getMessages(position, lines.size()); - } - - public List getMessages(int to) { - return getMessages(position, to); - } - - public List getMessages(int from, int to) { - synchronized (sync) { - if (to < 0) - to = lines.size() + to; - position = Math.max(position, to); - return new ArrayList(lines.subList(from, to)); - } - } - - public void reset() { - synchronized (sync) { - position = lines.size(); - } - } - - private class Listener implements StreamListener { - @Override - public void onStart() { - synchronized (sync) { - active = true; - sync.notifyAll(); - } - } - - @Override - public void onRead(String line) { - //System.out.println("onRead: " + line); - synchronized (sync) { - lines.add(line); - sync.notifyAll(); - } - } - - @Override - public void onFinish() { - synchronized (sync) { - active = false; - sync.notifyAll(); - } - } - - @Override - public void onException(Throwable e) { - exception = e; - } - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageOutput.java b/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageOutput.java deleted file mode 100644 index 473ccc071f9a3..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/process/StreamMessageOutput.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.process; - -import java.io.OutputStream; -import java.io.PrintStream; -import java.io.IOException; -import nsk.share.TestFailure; - -public class StreamMessageOutput implements MessageOutput { - private OutputStream out; - private PrintStream pout; - - public StreamMessageOutput() { - } - - public StreamMessageOutput(OutputStream out) { - bind(out); - } - - public void bind(OutputStream out) { - this.out = out; - this.pout = new PrintStream(out, true); // Autoflush is important - } - - public void start() { - } - - public void send(String msg) { - pout.println(msg); - } - - public void finish() { - pout.close(); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/transform/AbstractClassFileTransformer.java b/test/hotspot/jtreg/vmTestbase/vm/share/transform/AbstractClassFileTransformer.java deleted file mode 100644 index 95906789fda31..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/transform/AbstractClassFileTransformer.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.transform; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.instrument.IllegalClassFormatException; -import java.security.ProtectionDomain; - -public abstract class AbstractClassFileTransformer - implements ClassFileTransformer { - protected abstract boolean shouldBeTransformed(String name); - - protected abstract byte[] transformClass(byte[] bytes); - - @Override - public byte[] transform(ClassLoader loader, String className, - Class classBeingRedefined, ProtectionDomain protectionDomain, - byte[] classfileBuffer) throws IllegalClassFormatException { - if (shouldBeTransformed(className)) { - return transformClass(classfileBuffer); - } - return null; - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/transform/AnnotationAppender.java b/test/hotspot/jtreg/vmTestbase/vm/share/transform/AnnotationAppender.java deleted file mode 100644 index b3891fec5e411..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/transform/AnnotationAppender.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.transform; - -import jdk.internal.org.objectweb.asm.AnnotationVisitor; - -public abstract class AnnotationAppender { - private final String desc; - private final boolean visible; - private boolean annotationPresent; - - public AnnotationAppender(String desc, boolean visible) { - this.desc = desc; - this.visible = visible; - } - - public void checkAnnotation(String desc, boolean isVisible) { - annotationPresent |= visible == isVisible && this.desc.equals(desc); - } - - public void addAnnotation(VisitAnnotation func) { - if (shouldAdd()) { - AnnotationVisitor av = func.visit(desc, true); - if (av != null) { - postCreate(av); - av.visitEnd(); - annotationPresent = true; - } - } - } - - protected boolean shouldAdd() { - return !annotationPresent; - } - - protected abstract void postCreate(AnnotationVisitor av); - - @FunctionalInterface - public static interface VisitAnnotation { - AnnotationVisitor visit(String desc, boolean visible); - } -} diff --git a/test/hotspot/jtreg/vmTestbase/vm/share/transform/TransformingClassLoader.java b/test/hotspot/jtreg/vmTestbase/vm/share/transform/TransformingClassLoader.java deleted file mode 100644 index 5ce3dd02eb655..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/vm/share/transform/TransformingClassLoader.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package vm.share.transform; - -import vm.share.FileUtils; - -public class TransformingClassLoader extends ClassLoader { - private final AbstractClassFileTransformer transformer; - - protected TransformingClassLoader(ClassLoader parent, - AbstractClassFileTransformer transformer) { - super(parent); - this.transformer = transformer; - } - - @Override - protected Class loadClass(String name, boolean resolve) - throws ClassNotFoundException { - if (!transformer.shouldBeTransformed(name)) { - return super.loadClass(name, resolve); - } - synchronized (getClassLoadingLock(name)) { - // First, check if the class has already been loaded - Class c = findLoadedClass(name); - if (c == null) { - try { - byte[] bytes = FileUtils.readClass(name); - bytes = transformer.transformClass(bytes); - c = defineClass(name, bytes, 0, bytes.length); - } catch (Exception e) { - e.printStackTrace(); - return super.loadClass(name, resolve); - } - } - if (resolve) { - resolveClass(c); - } - return c; - } - } -} From 1b1dba8082969244effa86ac03c6053b3b0ddc43 Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Thu, 20 Jun 2024 16:28:48 +0000 Subject: [PATCH 057/102] 8333358: java/io/IO/IO.java test fails intermittently Reviewed-by: naoto --- test/jdk/java/io/IO/IO.java | 48 ++++++++++++++++++++++++++++++++++ test/jdk/java/io/IO/input.exp | 4 ++- test/jdk/java/io/IO/output.exp | 21 +++++++++++---- 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/test/jdk/java/io/IO/IO.java b/test/jdk/java/io/IO/IO.java index 1a9a25c90c710..328c189fb2f7b 100644 --- a/test/jdk/java/io/IO/IO.java +++ b/test/jdk/java/io/IO/IO.java @@ -21,6 +21,7 @@ * questions. */ +import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -34,6 +35,10 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.condition.EnabledOnOs; import org.junit.jupiter.api.condition.OS; +import org.junit.jupiter.api.extension.AfterTestExecutionCallback; +import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -48,6 +53,7 @@ * @library /test/lib * @run junit IO */ +@ExtendWith(IO.TimingExtension.class) public class IO { @Nested @@ -62,6 +68,11 @@ public static void prepareTTY() { if (!Files.exists(expect) || !Files.isExecutable(expect)) { Assumptions.abort("'" + expect + "' not found"); } + try { + var outputAnalyzer = ProcessTools.executeProcess( + expect.toAbsolutePath().toString(), "-version"); + outputAnalyzer.reportDiagnosticSummary(); + } catch (Exception _) { } } /* @@ -174,4 +185,41 @@ public void nullConsole(String method) throws Exception { assertEquals(1, output.getExitValue()); output.shouldContain("Exception in thread \"main\" java.io.IOError"); } + + + // adapted from https://junit.org/junit5/docs/current/user-guide/#extensions-lifecycle-callbacks-timing-extension + // remove after CODETOOLS-7903752 propagates to jtreg that this test is routinely run by + + public static class TimingExtension implements BeforeTestExecutionCallback, + AfterTestExecutionCallback { + + private static final System.Logger logger = System.getLogger( + TimingExtension.class.getName()); + + private static final String START_TIME = "start time"; + + @Override + public void beforeTestExecution(ExtensionContext context) { + getStore(context).put(START_TIME, time()); + } + + @Override + public void afterTestExecution(ExtensionContext context) { + Method testMethod = context.getRequiredTestMethod(); + long startTime = getStore(context).remove(START_TIME, long.class); + long duration = time() - startTime; + + logger.log(System.Logger.Level.INFO, () -> + String.format("Method [%s] took %s ms.", testMethod.getName(), duration)); + } + + private ExtensionContext.Store getStore(ExtensionContext context) { + return context.getStore(ExtensionContext.Namespace.create(getClass(), + context.getRequiredTestMethod())); + } + + private long time() { + return System.nanoTime() / 1_000_000; + } + } } diff --git a/test/jdk/java/io/IO/input.exp b/test/jdk/java/io/IO/input.exp index ba86b57b131ba..6f17a1379ec48 100644 --- a/test/jdk/java/io/IO/input.exp +++ b/test/jdk/java/io/IO/input.exp @@ -23,6 +23,7 @@ set prompt [lindex $argv $argc-1] set stty_init "rows 24 cols 80" +set timeout -1 spawn {*}$argv expect { @@ -30,7 +31,8 @@ expect { send "hello\r" } timeout { - puts "timeout"; exit 1 + puts "timeout" + exit 1 } } expect eof diff --git a/test/jdk/java/io/IO/output.exp b/test/jdk/java/io/IO/output.exp index 9044912cfaf55..a792b8791a4dd 100644 --- a/test/jdk/java/io/IO/output.exp +++ b/test/jdk/java/io/IO/output.exp @@ -21,12 +21,23 @@ # questions. # -################################################################################ -# This script does not expect/verify anything and is only used to simulate tty # -################################################################################ +# This script doesn't verify any output strings, it's only used to simulate tty -# Use `noecho` below, otherwise, expect will output the expanded "spawn ..." +set stty_init "rows 24 cols 80" +set timeout -1 + +# Use `-noecho` below, otherwise, expect will output the expanded "spawn ..." # command, which will interfere with asserting output from the java test +# counterpart spawn -noecho {*}$argv -expect eof + +expect { + eof { + exit 0 + } + timeout { + puts "timeout" + exit 1 + } +} From 265a0f5547d0ddb220391aef679c122768f02a00 Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Thu, 20 Jun 2024 17:01:17 +0000 Subject: [PATCH 058/102] 8334490: Normalize string with locale invariant `toLowerCase()` Reviewed-by: jlu, dfuchs, lancea, rriggs --- test/lib/jdk/test/lib/Platform.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/lib/jdk/test/lib/Platform.java b/test/lib/jdk/test/lib/Platform.java index e2451fc83664e..4a4b164cd17ee 100644 --- a/test/lib/jdk/test/lib/Platform.java +++ b/test/lib/jdk/test/lib/Platform.java @@ -35,6 +35,7 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +import static java.util.Locale.ROOT; public class Platform { public static final String vmName = privilegedGetProperty("java.vm.name"); @@ -134,7 +135,7 @@ public static boolean isWindows() { } private static boolean isOs(String osname) { - return osName.toLowerCase().startsWith(osname.toLowerCase()); + return osName.toLowerCase(ROOT).startsWith(osname.toLowerCase(ROOT)); } public static String getOsName() { @@ -175,15 +176,15 @@ public static int getOsVersionMinor() { } public static boolean isDebugBuild() { - return (jdkDebug.toLowerCase().contains("debug")); + return (jdkDebug.toLowerCase(ROOT).contains("debug")); } public static boolean isSlowDebugBuild() { - return (jdkDebug.toLowerCase().equals("slowdebug")); + return (jdkDebug.toLowerCase(ROOT).equals("slowdebug")); } public static boolean isFastDebugBuild() { - return (jdkDebug.toLowerCase().equals("fastdebug")); + return (jdkDebug.toLowerCase(ROOT).equals("fastdebug")); } public static String getVMVersion() { @@ -350,8 +351,8 @@ private static boolean isArch(String archnameRE) { } public static boolean isOracleLinux7() { - if (System.getProperty("os.name").toLowerCase().contains("linux") && - System.getProperty("os.version").toLowerCase().contains("el")) { + if (System.getProperty("os.name").toLowerCase(ROOT).contains("linux") && + System.getProperty("os.version").toLowerCase(ROOT).contains("el")) { Pattern p = Pattern.compile("el(\\d+)"); Matcher m = p.matcher(System.getProperty("os.version")); if (m.find()) { From de8ee97718d7e12b541b310cf5b67f3e10e91ad9 Mon Sep 17 00:00:00 2001 From: SendaoYan Date: Thu, 20 Jun 2024 18:04:58 +0000 Subject: [PATCH 059/102] 8334333: MissingResourceCauseTestRun.java fails if run by root Reviewed-by: naoto, jlu --- .../Control/MissingResourceCauseTestRun.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java b/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java index 30cd81757df6d..66a60f11ad47f 100644 --- a/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java +++ b/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,7 @@ /* * @test - * @bug 4354216 8213127 + * @bug 4354216 8213127 8334333 * @summary Test for the cause support when throwing a * MissingResourceBundle. (This test exists under * ResourceBundle/Control because bad resource bundle data can be @@ -32,6 +32,7 @@ * @build jdk.test.lib.JDKToolLauncher * jdk.test.lib.Utils * jdk.test.lib.process.ProcessTools + * jdk.test.lib.Platform * MissingResourceCauseTest * NonResourceBundle * PrivateConstructorRB @@ -50,9 +51,14 @@ import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.Utils; import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.Platform; +import jtreg.SkippedException; public class MissingResourceCauseTestRun { public static void main(String[] args) throws Throwable { + if (Platform.isRoot() && !Platform.isWindows()) { + throw new SkippedException("Unable to create an unreadable properties file."); + } Path path = Paths.get("UnreadableRB.properties"); Files.deleteIfExists(path); try { @@ -98,7 +104,7 @@ private static void runCmd() throws Throwable { } private static void deleteFile(Path path) throws Throwable { - if(path.toFile().exists()) { + if (path.toFile().exists()) { ProcessTools.executeCommand("chmod", "666", path.toString()) .outputTo(System.out) .errorTo(System.out) From 187710e1c1714ba28c7802efd4f7bb32a366d79d Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Thu, 20 Jun 2024 18:46:36 +0000 Subject: [PATCH 060/102] 8333300: [JVMCI] add support for generational ZGC Reviewed-by: dnsimon, kvn, eosterlund --- .../aarch64/jvmciCodeInstaller_aarch64.cpp | 34 +++++--- .../cpu/riscv/jvmciCodeInstaller_riscv.cpp | 3 +- .../cpu/x86/jvmciCodeInstaller_x86.cpp | 33 +++++-- src/hotspot/share/code/nmethod.cpp | 16 +++- src/hotspot/share/gc/z/zBarrier.hpp | 2 + src/hotspot/share/gc/z/zBarrier.inline.hpp | 6 ++ src/hotspot/share/gc/z/zBarrierSetRuntime.cpp | 8 ++ src/hotspot/share/gc/z/zBarrierSetRuntime.hpp | 2 + .../share/jvmci/jvmciCodeInstaller.cpp | 11 ++- .../share/jvmci/jvmciCodeInstaller.hpp | 19 +++- src/hotspot/share/jvmci/jvmciCompilerToVM.cpp | 17 ++-- src/hotspot/share/jvmci/jvmciCompilerToVM.hpp | 5 ++ .../share/jvmci/jvmciCompilerToVMInit.cpp | 33 +++++-- src/hotspot/share/jvmci/jvmciRuntime.cpp | 4 +- src/hotspot/share/jvmci/jvmci_globals.cpp | 6 +- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 87 +++++++++++++++++-- 16 files changed, 235 insertions(+), 51 deletions(-) diff --git a/src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp b/src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp index fdfab3ab5623b..18095632ac096 100644 --- a/src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/jvmciCodeInstaller_aarch64.cpp @@ -34,6 +34,9 @@ #include "runtime/jniHandles.hpp" #include "runtime/sharedRuntime.hpp" #include "vmreg_aarch64.inline.hpp" +#if INCLUDE_ZGC +#include "gc/z/zBarrierSetAssembler.hpp" +#endif jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, JVMCI_TRAPS) { if (inst->is_call() || inst->is_jump() || inst->is_blr()) { @@ -164,24 +167,35 @@ void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &cbuf, methodHandle& metho } } -void CodeInstaller::pd_relocate_poll(address pc, jint mark, JVMCI_TRAPS) { +bool CodeInstaller::pd_relocate(address pc, jint mark) { switch (mark) { case POLL_NEAR: - JVMCI_ERROR("unimplemented"); - break; + // This is unhandled and will be reported by the caller + return false; case POLL_FAR: _instructions->relocate(pc, relocInfo::poll_type); - break; + return true; case POLL_RETURN_NEAR: - JVMCI_ERROR("unimplemented"); - break; + // This is unhandled and will be reported by the caller + return false; case POLL_RETURN_FAR: _instructions->relocate(pc, relocInfo::poll_return_type); - break; - default: - JVMCI_ERROR("invalid mark value"); - break; + return true; + case Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_TB_X: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatLoadGoodBeforeTbX); + return true; + case Z_BARRIER_RELOCATION_FORMAT_MARK_BAD_BEFORE_MOV: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatMarkBadBeforeMov); + return true; + case Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_BEFORE_MOV: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreGoodBeforeMov); + return true; + case Z_BARRIER_RELOCATION_FORMAT_STORE_BAD_BEFORE_MOV: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreBadBeforeMov); + return true; + } + return false; } // convert JVMCI register indices (as used in oop maps) to HotSpot registers diff --git a/src/hotspot/cpu/riscv/jvmciCodeInstaller_riscv.cpp b/src/hotspot/cpu/riscv/jvmciCodeInstaller_riscv.cpp index 35bfbb1df8ead..ba3d9c99aceb1 100644 --- a/src/hotspot/cpu/riscv/jvmciCodeInstaller_riscv.cpp +++ b/src/hotspot/cpu/riscv/jvmciCodeInstaller_riscv.cpp @@ -105,8 +105,9 @@ void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &cbuf, methodHandle& metho Unimplemented(); } -void CodeInstaller::pd_relocate_poll(address pc, jint mark, JVMCI_TRAPS) { +bool CodeInstaller::pd_relocate(address pc, jint mark) { Unimplemented(); + return false; } // convert JVMCI register indices (as used in oop maps) to HotSpot registers diff --git a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp index 09056b374ad29..94708d4224379 100644 --- a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp +++ b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp @@ -39,6 +39,9 @@ #include "classfile/vmSymbols.hpp" #include "code/vmreg.hpp" #include "vmreg_x86.inline.hpp" +#if INCLUDE_ZGC +#include "gc/z/zBarrierSetAssembler.hpp" +#endif jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, JVMCI_TRAPS) { if (inst->is_call() || inst->is_jump()) { @@ -197,7 +200,7 @@ void CodeInstaller::pd_relocate_JavaMethod(CodeBuffer &, methodHandle& method, j } } -void CodeInstaller::pd_relocate_poll(address pc, jint mark, JVMCI_TRAPS) { +bool CodeInstaller::pd_relocate(address pc, jint mark) { switch (mark) { case POLL_NEAR: case POLL_FAR: @@ -206,15 +209,35 @@ void CodeInstaller::pd_relocate_poll(address pc, jint mark, JVMCI_TRAPS) { // so that poll_Relocation::fix_relocation_after_move does the right // thing (i.e. ignores this relocation record) _instructions->relocate(pc, relocInfo::poll_type, Assembler::imm_operand); - break; + return true; case POLL_RETURN_NEAR: case POLL_RETURN_FAR: // see comment above for POLL_FAR _instructions->relocate(pc, relocInfo::poll_return_type, Assembler::imm_operand); - break; + return true; + case Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_SHL: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatLoadGoodBeforeShl); + return true; + case Z_BARRIER_RELOCATION_FORMAT_LOAD_BAD_AFTER_TEST: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatLoadBadAfterTest); + return true; + case Z_BARRIER_RELOCATION_FORMAT_MARK_BAD_AFTER_TEST: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatMarkBadAfterTest); + return true; + case Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_CMP: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreGoodAfterCmp); + return true; + case Z_BARRIER_RELOCATION_FORMAT_STORE_BAD_AFTER_TEST: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreBadAfterTest); + return true; + case Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_OR: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreGoodAfterOr); + return true; + case Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_MOV: + _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreGoodAfterMov); + return true; default: - JVMCI_ERROR("invalid mark value: %d", mark); - break; + return false; } } diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index bcfbae49fd992..7f91f69c9e38b 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -3638,10 +3638,22 @@ const char* nmethod::reloc_string_for(u_char* begin, u_char* end) { case relocInfo::poll_type: return "poll"; case relocInfo::poll_return_type: return "poll_return"; case relocInfo::trampoline_stub_type: return "trampoline_stub"; + case relocInfo::entry_guard_type: return "entry_guard"; + case relocInfo::post_call_nop_type: return "post_call_nop"; + case relocInfo::barrier_type: { + barrier_Relocation* const reloc = iter.barrier_reloc(); + stringStream st; + st.print("barrier format=%d", reloc->format()); + return st.as_string(); + } + case relocInfo::type_mask: return "type_bit_mask"; - default: - break; + default: { + stringStream st; + st.print("unknown relocInfo=%d", (int) iter.type()); + return st.as_string(); + } } } return have_one ? "other" : nullptr; diff --git a/src/hotspot/share/gc/z/zBarrier.hpp b/src/hotspot/share/gc/z/zBarrier.hpp index 4a271c1469fc9..fa0fbbcd88f95 100644 --- a/src/hotspot/share/gc/z/zBarrier.hpp +++ b/src/hotspot/share/gc/z/zBarrier.hpp @@ -151,6 +151,8 @@ class ZBarrier : public AllStatic { static zaddress load_barrier_on_oop_field(volatile zpointer* p); static zaddress load_barrier_on_oop_field_preloaded(volatile zpointer* p, zpointer o); + static void load_barrier_on_oop_array(volatile zpointer* p, size_t length); + static zaddress keep_alive_load_barrier_on_oop_field_preloaded(volatile zpointer* p, zpointer o); // Load barriers on non-strong oop refs diff --git a/src/hotspot/share/gc/z/zBarrier.inline.hpp b/src/hotspot/share/gc/z/zBarrier.inline.hpp index 2c81c14865b51..b3191e9ae3f7a 100644 --- a/src/hotspot/share/gc/z/zBarrier.inline.hpp +++ b/src/hotspot/share/gc/z/zBarrier.inline.hpp @@ -475,6 +475,12 @@ inline zaddress ZBarrier::keep_alive_load_barrier_on_oop_field_preloaded(volatil return barrier(is_mark_good_fast_path, keep_alive_slow_path, color_mark_good, p, o); } +inline void ZBarrier::load_barrier_on_oop_array(volatile zpointer* p, size_t length) { + for (volatile const zpointer* const end = p + length; p < end; p++) { + load_barrier_on_oop_field(p); + } +} + // // Load barrier on non-strong oop refs // diff --git a/src/hotspot/share/gc/z/zBarrierSetRuntime.cpp b/src/hotspot/share/gc/z/zBarrierSetRuntime.cpp index da7adf7cc3a80..b41fec3d0a552 100644 --- a/src/hotspot/share/gc/z/zBarrierSetRuntime.cpp +++ b/src/hotspot/share/gc/z/zBarrierSetRuntime.cpp @@ -63,6 +63,10 @@ JRT_LEAF(void, ZBarrierSetRuntime::store_barrier_on_native_oop_field_without_hea ZBarrier::store_barrier_on_native_oop_field((zpointer*)p, false /* heal */); JRT_END +JRT_LEAF(void, ZBarrierSetRuntime::load_barrier_on_oop_array(oop* p, size_t length)) + ZBarrier::load_barrier_on_oop_array((zpointer*)p, length); +JRT_END + JRT_LEAF(void, ZBarrierSetRuntime::clone(oopDesc* src, oopDesc* dst, size_t size)) HeapAccess<>::clone(src, dst, size); JRT_END @@ -126,6 +130,10 @@ address ZBarrierSetRuntime::store_barrier_on_native_oop_field_without_healing_ad return reinterpret_cast

    (store_barrier_on_native_oop_field_without_healing); } +address ZBarrierSetRuntime::load_barrier_on_oop_array_addr() { + return reinterpret_cast
    (load_barrier_on_oop_array); +} + address ZBarrierSetRuntime::clone_addr() { return reinterpret_cast
    (clone); } diff --git a/src/hotspot/share/gc/z/zBarrierSetRuntime.hpp b/src/hotspot/share/gc/z/zBarrierSetRuntime.hpp index a569ff3c15818..8a81f162bf1ef 100644 --- a/src/hotspot/share/gc/z/zBarrierSetRuntime.hpp +++ b/src/hotspot/share/gc/z/zBarrierSetRuntime.hpp @@ -41,6 +41,7 @@ class ZBarrierSetRuntime : public AllStatic { static void store_barrier_on_oop_field_with_healing(oop* p); static void store_barrier_on_oop_field_without_healing(oop* p); static void store_barrier_on_native_oop_field_without_healing(oop* p); + static void load_barrier_on_oop_array(oop* p, size_t length); static void clone(oopDesc* src, oopDesc* dst, size_t size); public: @@ -54,6 +55,7 @@ class ZBarrierSetRuntime : public AllStatic { static address store_barrier_on_oop_field_with_healing_addr(); static address store_barrier_on_oop_field_without_healing_addr(); static address store_barrier_on_native_oop_field_without_healing_addr(); + static address load_barrier_on_oop_array_addr(); static address clone_addr(); }; diff --git a/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp b/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp index 52a060427d5d4..c62257bd23b1c 100644 --- a/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp +++ b/src/hotspot/share/jvmci/jvmciCodeInstaller.cpp @@ -1297,6 +1297,10 @@ void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, HotSpotCompile u1 id = stream->read_u1("mark:id"); address pc = _instructions->start() + pc_offset; + if (pd_relocate(pc, id)) { + return; + } + switch (id) { case UNVERIFIED_ENTRY: _offsets.set_value(CodeOffsets::Entry, pc_offset); @@ -1330,12 +1334,6 @@ void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, HotSpotCompile _next_call_type = (MarkId) id; _invoke_mark_pc = pc; break; - case POLL_NEAR: - case POLL_FAR: - case POLL_RETURN_NEAR: - case POLL_RETURN_FAR: - pd_relocate_poll(pc, id, JVMCI_CHECK); - break; case CARD_TABLE_SHIFT: case CARD_TABLE_ADDRESS: case HEAP_TOP_ADDRESS: @@ -1350,6 +1348,7 @@ void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, HotSpotCompile case VERIFY_OOP_MASK: case VERIFY_OOP_COUNT_ADDRESS: break; + default: JVMCI_ERROR("invalid mark id: %d%s", id, stream->context()); break; diff --git a/src/hotspot/share/jvmci/jvmciCodeInstaller.hpp b/src/hotspot/share/jvmci/jvmciCodeInstaller.hpp index 98fed480bf1d7..0cb7f28748053 100644 --- a/src/hotspot/share/jvmci/jvmciCodeInstaller.hpp +++ b/src/hotspot/share/jvmci/jvmciCodeInstaller.hpp @@ -176,6 +176,23 @@ class CodeInstaller : public StackObj { VERIFY_OOP_BITS, VERIFY_OOP_MASK, VERIFY_OOP_COUNT_ADDRESS, + +#ifdef X86 + Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_SHL, + Z_BARRIER_RELOCATION_FORMAT_LOAD_BAD_AFTER_TEST, + Z_BARRIER_RELOCATION_FORMAT_MARK_BAD_AFTER_TEST, + Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_CMP, + Z_BARRIER_RELOCATION_FORMAT_STORE_BAD_AFTER_TEST, + Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_OR, + Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_MOV, +#endif +#ifdef AARCH64 + Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_TB_X, + Z_BARRIER_RELOCATION_FORMAT_MARK_BAD_BEFORE_MOV, + Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_BEFORE_MOV, + Z_BARRIER_RELOCATION_FORMAT_STORE_BAD_BEFORE_MOV, +#endif + INVOKE_INVALID = -1 }; @@ -312,7 +329,7 @@ class CodeInstaller : public StackObj { void pd_patch_DataSectionReference(int pc_offset, int data_offset, JVMCI_TRAPS); void pd_relocate_ForeignCall(NativeInstruction* inst, jlong foreign_call_destination, JVMCI_TRAPS); void pd_relocate_JavaMethod(CodeBuffer &cbuf, methodHandle& method, jint pc_offset, JVMCI_TRAPS); - void pd_relocate_poll(address pc, jint mark, JVMCI_TRAPS); + bool pd_relocate(address pc, jint mark); public: diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp index fb06abe9174ef..d92d193017362 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp @@ -1208,12 +1208,19 @@ C2V_VMENTRY_NULL(jobject, executeHotSpotNmethod, (JNIEnv* env, jobject, jobject HandleMark hm(THREAD); JVMCIObject nmethod_mirror = JVMCIENV->wrap(hs_nmethod); - JVMCINMethodHandle nmethod_handle(THREAD); - nmethod* nm = JVMCIENV->get_nmethod(nmethod_mirror, nmethod_handle); - if (nm == nullptr || !nm->is_in_use()) { - JVMCI_THROW_NULL(InvalidInstalledCodeException); + methodHandle mh; + { + // Reduce the scope of JVMCINMethodHandle so that it isn't alive across the Java call. Once the + // nmethod has been validated and the method is fetched from the nmethod it's fine for the + // nmethod to be reclaimed if necessary. + JVMCINMethodHandle nmethod_handle(THREAD); + nmethod* nm = JVMCIENV->get_nmethod(nmethod_mirror, nmethod_handle); + if (nm == nullptr || !nm->is_in_use()) { + JVMCI_THROW_NULL(InvalidInstalledCodeException); + } + methodHandle nmh(THREAD, nm->method()); + mh = nmh; } - methodHandle mh(THREAD, nm->method()); Symbol* signature = mh->signature(); JavaCallArguments jca(mh->size_of_parameters()); diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp index ff159a490c184..b7ae365c1936d 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp @@ -68,6 +68,10 @@ class CompilerToVM { static address ZBarrierSetRuntime_load_barrier_on_oop_array; static address ZBarrierSetRuntime_clone; + static address ZPointerVectorLoadBadMask_address; + static address ZPointerVectorStoreBadMask_address; + static address ZPointerVectorStoreGoodMask_address; + static bool continuations_enabled; static size_t ThreadLocalAllocBuffer_alignment_reserve; @@ -100,6 +104,7 @@ class CompilerToVM { static int sizeof_narrowKlass; static int sizeof_arrayOopDesc; static int sizeof_BasicLock; + static int sizeof_ZStoreBarrierEntry; static address dsin; static address dcos; diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp index a2ba0f2b3e578..220667ad2ced0 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp @@ -38,6 +38,8 @@ #if INCLUDE_ZGC #include "gc/x/xBarrierSetRuntime.hpp" #include "gc/x/xThreadLocalData.hpp" +#include "gc/z/zBarrierSetRuntime.hpp" +#include "gc/z/zThreadLocalData.hpp" #endif #include "jvmci/jvmciCompilerToVM.hpp" #include "jvmci/jvmciEnv.hpp" @@ -80,6 +82,10 @@ address CompilerToVM::Data::ZBarrierSetRuntime_weak_load_barrier_on_phantom_oop_ address CompilerToVM::Data::ZBarrierSetRuntime_load_barrier_on_oop_array; address CompilerToVM::Data::ZBarrierSetRuntime_clone; +address CompilerToVM::Data::ZPointerVectorLoadBadMask_address; +address CompilerToVM::Data::ZPointerVectorStoreBadMask_address; +address CompilerToVM::Data::ZPointerVectorStoreGoodMask_address; + bool CompilerToVM::Data::continuations_enabled; #ifdef AARCH64 @@ -117,6 +123,7 @@ int CompilerToVM::Data::sizeof_ConstantPool = sizeof(ConstantPool); int CompilerToVM::Data::sizeof_narrowKlass = sizeof(narrowKlass); int CompilerToVM::Data::sizeof_arrayOopDesc = sizeof(arrayOopDesc); int CompilerToVM::Data::sizeof_BasicLock = sizeof(BasicLock); +int CompilerToVM::Data::sizeof_ZStoreBarrierEntry = sizeof(ZStoreBarrierEntry); address CompilerToVM::Data::dsin; address CompilerToVM::Data::dcos; @@ -157,15 +164,23 @@ void CompilerToVM::Data::initialize(JVMCI_TRAPS) { #if INCLUDE_ZGC if (UseZGC) { - thread_address_bad_mask_offset = in_bytes(XThreadLocalData::address_bad_mask_offset()); - ZBarrierSetRuntime_load_barrier_on_oop_field_preloaded = XBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr(); - ZBarrierSetRuntime_load_barrier_on_weak_oop_field_preloaded = XBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded_addr(); - ZBarrierSetRuntime_load_barrier_on_phantom_oop_field_preloaded = XBarrierSetRuntime::load_barrier_on_phantom_oop_field_preloaded_addr(); - ZBarrierSetRuntime_weak_load_barrier_on_oop_field_preloaded = XBarrierSetRuntime::weak_load_barrier_on_oop_field_preloaded_addr(); - ZBarrierSetRuntime_weak_load_barrier_on_weak_oop_field_preloaded = XBarrierSetRuntime::weak_load_barrier_on_weak_oop_field_preloaded_addr(); - ZBarrierSetRuntime_weak_load_barrier_on_phantom_oop_field_preloaded = XBarrierSetRuntime::weak_load_barrier_on_phantom_oop_field_preloaded_addr(); - ZBarrierSetRuntime_load_barrier_on_oop_array = XBarrierSetRuntime::load_barrier_on_oop_array_addr(); - ZBarrierSetRuntime_clone = XBarrierSetRuntime::clone_addr(); + if (ZGenerational) { + ZPointerVectorLoadBadMask_address = (address) &ZPointerVectorLoadBadMask; + ZPointerVectorStoreBadMask_address = (address) &ZPointerVectorStoreBadMask; + ZPointerVectorStoreGoodMask_address = (address) &ZPointerVectorStoreGoodMask; + } else { + thread_address_bad_mask_offset = in_bytes(XThreadLocalData::address_bad_mask_offset()); + // Initialize the old names for compatibility. The proper XBarrierSetRuntime names are + // exported as addresses in vmStructs_jvmci.cpp as are the new ZBarrierSetRuntime names. + ZBarrierSetRuntime_load_barrier_on_oop_field_preloaded = XBarrierSetRuntime::load_barrier_on_oop_field_preloaded_addr(); + ZBarrierSetRuntime_load_barrier_on_weak_oop_field_preloaded = XBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded_addr(); + ZBarrierSetRuntime_load_barrier_on_phantom_oop_field_preloaded = XBarrierSetRuntime::load_barrier_on_phantom_oop_field_preloaded_addr(); + ZBarrierSetRuntime_weak_load_barrier_on_oop_field_preloaded = XBarrierSetRuntime::weak_load_barrier_on_oop_field_preloaded_addr(); + ZBarrierSetRuntime_weak_load_barrier_on_weak_oop_field_preloaded = XBarrierSetRuntime::weak_load_barrier_on_weak_oop_field_preloaded_addr(); + ZBarrierSetRuntime_weak_load_barrier_on_phantom_oop_field_preloaded = XBarrierSetRuntime::weak_load_barrier_on_phantom_oop_field_preloaded_addr(); + ZBarrierSetRuntime_load_barrier_on_oop_array = XBarrierSetRuntime::load_barrier_on_oop_array_addr(); + ZBarrierSetRuntime_clone = XBarrierSetRuntime::clone_addr(); + } } #endif diff --git a/src/hotspot/share/jvmci/jvmciRuntime.cpp b/src/hotspot/share/jvmci/jvmciRuntime.cpp index 504fbfcb1b078..9770e329a8813 100644 --- a/src/hotspot/share/jvmci/jvmciRuntime.cpp +++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp @@ -874,7 +874,7 @@ int JVMCIRuntime::release_and_clear_oop_handles() { for (int i = 0; i < _oop_handles.length(); i++) { oop* oop_ptr = _oop_handles.at(i); guarantee(oop_ptr != nullptr, "release_cleared_oop_handles left null entry in _oop_handles"); - guarantee(*oop_ptr != nullptr, "unexpected cleared handle"); + guarantee(NativeAccess<>::oop_load(oop_ptr) != nullptr, "unexpected cleared handle"); // Satisfy OopHandles::release precondition that all // handles being released are null. NativeAccess<>::oop_store(oop_ptr, (oop) nullptr); @@ -889,7 +889,7 @@ int JVMCIRuntime::release_and_clear_oop_handles() { } static bool is_referent_non_null(oop* handle) { - return handle != nullptr && *handle != nullptr; + return handle != nullptr && NativeAccess<>::oop_load(handle) != nullptr; } // Swaps the elements in `array` at index `a` and index `b` diff --git a/src/hotspot/share/jvmci/jvmci_globals.cpp b/src/hotspot/share/jvmci/jvmci_globals.cpp index 8253332e3a919..86d8491b73303 100644 --- a/src/hotspot/share/jvmci/jvmci_globals.cpp +++ b/src/hotspot/share/jvmci/jvmci_globals.cpp @@ -223,16 +223,14 @@ bool JVMCIGlobals::enable_jvmci_product_mode(JVMFlagOrigin origin, bool use_graa } bool JVMCIGlobals::gc_supports_jvmci() { - return UseSerialGC || UseParallelGC || UseG1GC || (UseZGC && !ZGenerational); + return UseSerialGC || UseParallelGC || UseG1GC || UseZGC || UseEpsilonGC; } void JVMCIGlobals::check_jvmci_supported_gc() { if (EnableJVMCI) { // Check if selected GC is supported by JVMCI and Java compiler if (!gc_supports_jvmci()) { - log_warning(gc, jvmci)("Setting EnableJVMCI to false as selected GC does not support JVMCI: %s", GCConfig::hs_err_name()); - FLAG_SET_DEFAULT(EnableJVMCI, false); - FLAG_SET_DEFAULT(UseJVMCICompiler, false); + fatal("JVMCI does not support the selected GC"); } } } diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index f0ecc5af7d2cc..73bac7bd0909c 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -42,10 +42,17 @@ #include "runtime/stubRoutines.hpp" #include "runtime/vm_version.hpp" #if INCLUDE_G1GC +#include "gc/g1/g1BarrierSetRuntime.hpp" #include "gc/g1/g1CardTable.hpp" #include "gc/g1/g1HeapRegion.hpp" #include "gc/g1/g1ThreadLocalData.hpp" #endif +#if INCLUDE_ZGC +#include "gc/x/xBarrierSetRuntime.hpp" +#include "gc/z/zBarrierSetAssembler.hpp" +#include "gc/z/zBarrierSetRuntime.hpp" +#include "gc/z/zThreadLocalData.hpp" +#endif #define VM_STRUCTS(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field) \ static_field(CompilerToVM::Data, Klass_vtable_start_offset, int) \ @@ -66,6 +73,7 @@ static_field(CompilerToVM::Data, thread_disarmed_guard_value_offset, int) \ static_field(CompilerToVM::Data, thread_address_bad_mask_offset, int) \ AARCH64_ONLY(static_field(CompilerToVM::Data, BarrierSetAssembler_nmethod_patching_type, int)) \ + AARCH64_ONLY(static_field(CompilerToVM::Data, BarrierSetAssembler_patching_epoch_addr, address)) \ \ static_field(CompilerToVM::Data, ZBarrierSetRuntime_load_barrier_on_oop_field_preloaded, address) \ static_field(CompilerToVM::Data, ZBarrierSetRuntime_load_barrier_on_weak_oop_field_preloaded, address) \ @@ -76,6 +84,10 @@ static_field(CompilerToVM::Data, ZBarrierSetRuntime_load_barrier_on_oop_array, address) \ static_field(CompilerToVM::Data, ZBarrierSetRuntime_clone, address) \ \ + static_field(CompilerToVM::Data, ZPointerVectorLoadBadMask_address, address) \ + static_field(CompilerToVM::Data, ZPointerVectorStoreBadMask_address, address) \ + static_field(CompilerToVM::Data, ZPointerVectorStoreGoodMask_address, address) \ + \ static_field(CompilerToVM::Data, continuations_enabled, bool) \ \ static_field(CompilerToVM::Data, ThreadLocalAllocBuffer_alignment_reserve, size_t) \ @@ -109,6 +121,7 @@ static_field(CompilerToVM::Data, sizeof_narrowKlass, int) \ static_field(CompilerToVM::Data, sizeof_arrayOopDesc, int) \ static_field(CompilerToVM::Data, sizeof_BasicLock, int) \ + static_field(CompilerToVM::Data, sizeof_ZStoreBarrierEntry, int) \ \ static_field(CompilerToVM::Data, dsin, address) \ static_field(CompilerToVM::Data, dcos, address) \ @@ -784,7 +797,12 @@ declare_constant(markWord::no_hash_in_place) \ declare_constant(markWord::no_lock_in_place) \ -#define VM_ADDRESSES(declare_address, declare_preprocessor_address, declare_function) \ +// Helper macro to support ZGC pattern where the function itself isn't exported +#define DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, name) \ + declare_function_with_value(name, name##_addr()) + + +#define VM_ADDRESSES(declare_address, declare_preprocessor_address, declare_function, declare_function_with_value) \ declare_function(SharedRuntime::register_finalizer) \ declare_function(SharedRuntime::exception_handler_for_return_address) \ declare_function(SharedRuntime::OSR_migration_end) \ @@ -801,6 +819,26 @@ declare_function(os::javaTimeMillis) \ declare_function(os::javaTimeNanos) \ \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::load_barrier_on_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::load_barrier_on_phantom_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::weak_load_barrier_on_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::weak_load_barrier_on_weak_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::weak_load_barrier_on_phantom_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::load_barrier_on_oop_array)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, XBarrierSetRuntime::clone)) \ + \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::load_barrier_on_weak_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::load_barrier_on_phantom_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::load_barrier_on_oop_field_preloaded_store_good)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::no_keepalive_load_barrier_on_weak_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::no_keepalive_load_barrier_on_phantom_oop_field_preloaded)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::store_barrier_on_native_oop_field_without_healing)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::store_barrier_on_oop_field_with_healing)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::store_barrier_on_oop_field_without_healing)) \ + ZGC_ONLY(DECLARE_FUNCTION_FROM_ADDR(declare_function_with_value, ZBarrierSetRuntime::load_barrier_on_oop_array)) \ + \ declare_function(Deoptimization::fetch_unroll_info) \ declare_function(Deoptimization::uncommon_trap) \ declare_function(Deoptimization::unpack_frames) \ @@ -851,9 +889,35 @@ #endif // INCLUDE_G1GC +#if INCLUDE_ZGC + +#define VM_INT_CONSTANTS_JVMCI_ZGC(declare_constant, declare_constant_with_value, declare_preprocessor_constant) \ + declare_constant_with_value("ZThreadLocalData::store_good_mask_offset" , in_bytes(ZThreadLocalData::store_good_mask_offset())) \ + declare_constant_with_value("ZThreadLocalData::store_bad_mask_offset" , in_bytes(ZThreadLocalData::store_bad_mask_offset())) \ + declare_constant_with_value("ZThreadLocalData::store_barrier_buffer_offset" , in_bytes(ZThreadLocalData::store_barrier_buffer_offset())) \ + declare_constant_with_value("ZStoreBarrierBuffer::current_offset" , in_bytes(ZStoreBarrierBuffer::current_offset())) \ + declare_constant_with_value("ZStoreBarrierBuffer::buffer_offset" , in_bytes(ZStoreBarrierBuffer::buffer_offset())) \ + declare_constant_with_value("ZStoreBarrierEntry::p_offset" , in_bytes(ZStoreBarrierEntry::p_offset())) \ + declare_constant_with_value("ZStoreBarrierEntry::prev_offset" , in_bytes(ZStoreBarrierEntry::prev_offset())) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_SHL)) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_LOAD_BAD_AFTER_TEST)) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_MARK_BAD_AFTER_TEST)) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_CMP)) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_STORE_BAD_AFTER_TEST)) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_OR)) \ + AMD64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_MOV)) \ + AARCH64_ONLY(declare_constant(ZPointerLoadShift)) \ + AARCH64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_TB_X)) \ + AARCH64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_MARK_BAD_BEFORE_MOV)) \ + AARCH64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_BEFORE_MOV)) \ + AARCH64_ONLY(declare_constant(CodeInstaller::Z_BARRIER_RELOCATION_FORMAT_STORE_BAD_BEFORE_MOV)) + +#endif // INCLUDE_ZGC + + #ifdef LINUX -#define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function) \ +#define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function, declare_function_with_value) \ declare_preprocessor_address("RTLD_DEFAULT", RTLD_DEFAULT) #endif @@ -861,7 +925,7 @@ #ifdef BSD -#define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function) \ +#define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function, declare_function_with_value) \ declare_preprocessor_address("RTLD_DEFAULT", RTLD_DEFAULT) #endif @@ -912,13 +976,17 @@ #endif #ifndef VM_ADDRESSES_OS -#define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function) +#define VM_ADDRESSES_OS(declare_address, declare_preprocessor_address, declare_function, declare_function_with_value) #endif // // Instantiation of VMStructEntries, VMTypeEntries and VMIntConstantEntries // +#define GENERATE_VM_FUNCTION_WITH_VALUE_ENTRY(name, value) \ + { QUOTE(name), CAST_FROM_FN_PTR(void*, value) }, + + // These initializers are allowed to access private fields in classes // as long as class VMStructs is a friend VMStructEntry JVMCIVMStructs::localHotSpotVMStructs[] = { @@ -969,6 +1037,11 @@ VMIntConstantEntry JVMCIVMStructs::localHotSpotVMIntConstants[] = { GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) #endif +#if INCLUDE_ZGC + VM_INT_CONSTANTS_JVMCI_ZGC(GENERATE_VM_INT_CONSTANT_ENTRY, + GENERATE_VM_INT_CONSTANT_WITH_VALUE_ENTRY, + GENERATE_PREPROCESSOR_VM_INT_CONSTANT_ENTRY) +#endif #ifdef VM_INT_CPU_FEATURE_CONSTANTS VM_INT_CPU_FEATURE_CONSTANTS #endif @@ -994,10 +1067,12 @@ VMLongConstantEntry JVMCIVMStructs::localHotSpotVMLongConstants[] = { VMAddressEntry JVMCIVMStructs::localHotSpotVMAddresses[] = { VM_ADDRESSES(GENERATE_VM_ADDRESS_ENTRY, GENERATE_PREPROCESSOR_VM_ADDRESS_ENTRY, - GENERATE_VM_FUNCTION_ENTRY) + GENERATE_VM_FUNCTION_ENTRY, + GENERATE_VM_FUNCTION_WITH_VALUE_ENTRY) VM_ADDRESSES_OS(GENERATE_VM_ADDRESS_ENTRY, GENERATE_PREPROCESSOR_VM_ADDRESS_ENTRY, - GENERATE_VM_FUNCTION_ENTRY) + GENERATE_VM_FUNCTION_ENTRY, + GENERATE_VM_FUNCTION_WITH_VALUE_ENTRY) GENERATE_VM_ADDRESS_LAST_ENTRY() }; From 4b4a483b6fe7a6fcfdfe6f68faac29099a64c982 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Thu, 20 Jun 2024 19:03:50 +0000 Subject: [PATCH 061/102] 8330699: Obsolete -XX:+UseEmptySlotsInSupers Reviewed-by: shade, fparain, dholmes --- .../share/classfile/fieldLayoutBuilder.cpp | 18 +---- src/hotspot/share/runtime/arguments.cpp | 2 +- src/hotspot/share/runtime/globals.hpp | 4 - .../runtime/FieldLayout/OldLayoutCheck.java | 79 ------------------- 4 files changed, 3 insertions(+), 100 deletions(-) delete mode 100644 test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java diff --git a/src/hotspot/share/classfile/fieldLayoutBuilder.cpp b/src/hotspot/share/classfile/fieldLayoutBuilder.cpp index c77016d74aae1..f9353465ca7c4 100644 --- a/src/hotspot/share/classfile/fieldLayoutBuilder.cpp +++ b/src/hotspot/share/classfile/fieldLayoutBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -137,7 +137,7 @@ void FieldLayout::initialize_instance_layout(const InstanceKlass* super_klass) { } else { bool has_fields = reconstruct_layout(super_klass); fill_holes(super_klass); - if ((UseEmptySlotsInSupers && !super_klass->has_contended_annotations()) || !has_fields) { + if (!super_klass->has_contended_annotations() || !has_fields) { _start = _blocks; // start allocating fields from the first empty block } else { _start = _last; // append fields at the end of the reconstructed layout @@ -364,20 +364,6 @@ void FieldLayout::fill_holes(const InstanceKlass* super_klass) { b = p; } - if (!UseEmptySlotsInSupers) { - // Add an empty slots to align fields of the subclass on a heapOopSize boundary - // in order to emulate the behavior of the previous algorithm - int align = (b->offset() + b->size()) % heapOopSize; - if (align != 0) { - int sz = heapOopSize - align; - LayoutRawBlock* p = new LayoutRawBlock(LayoutRawBlock::EMPTY, sz); - p->set_offset(b->offset() + b->size()); - b->set_next_block(p); - p->set_prev_block(b); - b = p; - } - } - LayoutRawBlock* last = new LayoutRawBlock(LayoutRawBlock::EMPTY, INT_MAX); last->set_offset(b->offset() + b->size()); assert(last->offset() > 0, "Sanity check"); diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index a56e1fcb9988a..0949e9e2aacac 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -505,7 +505,6 @@ static SpecialFlag const special_jvm_flags[] = { { "DontYieldALot", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "PreserveAllAnnotations", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseNotificationThread", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, - { "UseEmptySlotsInSupers", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, @@ -513,6 +512,7 @@ static SpecialFlag const special_jvm_flags[] = { { "MetaspaceReclaimPolicy", JDK_Version::undefined(), JDK_Version::jdk(21), JDK_Version::undefined() }, + { "UseEmptySlotsInSupers", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "OldSize", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, #if defined(X86) { "UseRTMLocking", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 6f66a3495955b..b8b9c846bb4d1 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1948,10 +1948,6 @@ const int ObjectAlignmentInBytes = 8; product(bool, UseFastUnorderedTimeStamps, false, EXPERIMENTAL, \ "Use platform unstable time where supported for timestamps only") \ \ - product(bool, UseEmptySlotsInSupers, true, \ - "(Deprecated) Allow allocating fields in empty slots of " \ - "super-classes") \ - \ product(bool, DeoptimizeNMethodBarriersALot, false, DIAGNOSTIC, \ "Make nmethod barriers deoptimise a lot.") \ \ diff --git a/test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java b/test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java deleted file mode 100644 index a68b0a9efafce..0000000000000 --- a/test/hotspot/jtreg/runtime/FieldLayout/OldLayoutCheck.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 8239014 - * @summary -XX:-UseEmptySlotsInSupers sometime fails to reproduce the layout of the old code - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @requires vm.bits == "64" & vm.opt.final.UseCompressedOops == true & vm.gc != "Z" - * @run main/othervm -XX:+UseCompressedClassPointers -XX:-UseEmptySlotsInSupers OldLayoutCheck - */ - -/* - * @test - * @requires vm.bits == "32" - * @library /test/lib - * @modules java.base/jdk.internal.misc - * java.management - * @run main/othervm -XX:-UseEmptySlotsInSupers OldLayoutCheck - */ - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Comparator; -import jdk.internal.misc.Unsafe; - -import jdk.test.lib.Asserts; -import jdk.test.lib.Platform; - -public class OldLayoutCheck { - - static class LIClass { - public long l; - public int i; - } - - // 32-bit VMs: @0: 8 byte header, @8: long field, @16: int field - // 64-bit VMs: @0: 12 byte header, @12: int field, @16: long field - static final long INT_OFFSET = Platform.is64bit() ? 12L : 16L; - static final long LONG_OFFSET = Platform.is64bit() ? 16L : 8L; - - static public void main(String[] args) { - Unsafe unsafe = Unsafe.getUnsafe(); - Class c = LIClass.class; - Field[] fields = c.getFields(); - for (int i = 0; i < fields.length; i++) { - long offset = unsafe.objectFieldOffset(fields[i]); - if (fields[i].getType() == int.class) { - Asserts.assertEquals(offset, INT_OFFSET, "Misplaced int field"); - } else if (fields[i].getType() == long.class) { - Asserts.assertEquals(offset, LONG_OFFSET, "Misplaced long field"); - } else { - Asserts.fail("Unexpected field type"); - } - } - } -} From e5de26ddf0550da9e6d074d5b9ab4a943170adca Mon Sep 17 00:00:00 2001 From: Jatin Bhateja Date: Thu, 20 Jun 2024 23:35:15 +0000 Subject: [PATCH 062/102] 8329032: C2 compiler register allocation support for APX EGPRs Reviewed-by: kvn, sviswanathan --- src/hotspot/cpu/x86/assembler_x86.cpp | 257 +++++++++++++----- src/hotspot/cpu/x86/assembler_x86.hpp | 22 +- src/hotspot/cpu/x86/c1_Defs_x86.hpp | 2 +- src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp | 4 +- src/hotspot/cpu/x86/c1_Runtime1_x86.cpp | 12 +- .../x86/gc/shared/barrierSetAssembler_x86.cpp | 19 ++ .../cpu/x86/gc/x/xBarrierSetAssembler_x86.cpp | 19 ++ src/hotspot/cpu/x86/globals_x86.hpp | 2 - .../cpu/x86/jvmciCodeInstaller_x86.cpp | 7 +- src/hotspot/cpu/x86/macroAssembler_x86.cpp | 47 ++++ src/hotspot/cpu/x86/macroAssembler_x86.hpp | 5 + src/hotspot/cpu/x86/methodHandles_x86.cpp | 5 +- src/hotspot/cpu/x86/nativeInst_x86.cpp | 32 ++- src/hotspot/cpu/x86/nativeInst_x86.hpp | 78 ++++-- src/hotspot/cpu/x86/register_x86.cpp | 4 +- src/hotspot/cpu/x86/register_x86.hpp | 30 +- src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp | 102 ++++++- src/hotspot/cpu/x86/upcallLinker_x86_64.cpp | 12 +- src/hotspot/cpu/x86/vm_version_x86.cpp | 20 +- src/hotspot/cpu/x86/vm_version_x86.hpp | 2 +- src/hotspot/cpu/x86/vmreg_x86.hpp | 3 +- src/hotspot/cpu/x86/x86_64.ad | 121 ++++++++- src/hotspot/os/windows/os_windows.cpp | 2 +- src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp | 2 +- src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp | 2 +- .../share/classes/jdk/vm/ci/amd64/AMD64.java | 111 +++++--- 26 files changed, 737 insertions(+), 185 deletions(-) diff --git a/src/hotspot/cpu/x86/assembler_x86.cpp b/src/hotspot/cpu/x86/assembler_x86.cpp index b02cca92cd484..001ff472f40bb 100644 --- a/src/hotspot/cpu/x86/assembler_x86.cpp +++ b/src/hotspot/cpu/x86/assembler_x86.cpp @@ -842,7 +842,7 @@ address Assembler::locate_operand(address inst, WhichOperand which) { case REX2: NOT_LP64(assert(false, "64bit prefixes")); - if ((0xFF & *ip++) & REXBIT_W) { + if ((0xFF & *ip++) & REX2BIT_W) { is_64bit = true; } goto again_after_prefix; @@ -899,7 +899,7 @@ address Assembler::locate_operand(address inst, WhichOperand which) { case REX2: NOT_LP64(assert(false, "64bit prefix found")); - if ((0xFF & *ip++) & REXBIT_W) { + if ((0xFF & *ip++) & REX2BIT_W) { is_64bit = true; } goto again_after_size_prefix2; @@ -4498,7 +4498,7 @@ void Assembler::ud2() { void Assembler::pcmpestri(XMMRegister dst, Address src, int imm8) { assert(VM_Version::supports_sse4_2(), ""); - assert(!needs_eevex(src.base(), src.index()), "does not support extended gprs"); + assert(!needs_eevex(src.base(), src.index()), "does not support extended gprs as BASE or INDEX of address operand"); InstructionMark im(this); InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false); simd_prefix(dst, xnoreg, src, VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes); @@ -5893,6 +5893,71 @@ void Assembler::evpunpckhqdq(XMMRegister dst, KRegister mask, XMMRegister src1, emit_int16(0x6D, (0xC0 | encode)); } +#ifdef _LP64 +void Assembler::push2(Register src1, Register src2, bool with_ppx) { + assert(VM_Version::supports_apx_f(), "requires APX"); + InstructionAttr attributes(0, /* rex_w */ with_ppx, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false); + /* EVEX.BASE */ + int src_enc = src1->encoding(); + /* EVEX.VVVV */ + int nds_enc = src2->encoding(); + + bool vex_b = (src_enc & 8) == 8; + bool evex_v = (nds_enc >= 16); + bool evex_b = (src_enc >= 16); + + // EVEX.ND = 1; + attributes.set_extended_context(); + attributes.set_is_evex_instruction(); + set_attributes(&attributes); + + evex_prefix(0, vex_b, 0, 0, evex_b, evex_v, false /*eevex_x*/, nds_enc, VEX_SIMD_NONE, /* map4 */ VEX_OPCODE_0F_3C); + emit_int16(0xFF, (0xC0 | (0x6 << 3) | (src_enc & 7))); +} + +void Assembler::pop2(Register src1, Register src2, bool with_ppx) { + assert(VM_Version::supports_apx_f(), "requires APX"); + InstructionAttr attributes(0, /* rex_w */ with_ppx, /* legacy_mode */ false, /* no_mask_reg */ true, /* uses_vl */ false); + /* EVEX.BASE */ + int src_enc = src1->encoding(); + /* EVEX.VVVV */ + int nds_enc = src2->encoding(); + + bool vex_b = (src_enc & 8) == 8; + bool evex_v = (nds_enc >= 16); + bool evex_b = (src_enc >= 16); + + // EVEX.ND = 1; + attributes.set_extended_context(); + attributes.set_is_evex_instruction(); + set_attributes(&attributes); + + evex_prefix(0, vex_b, 0, 0, evex_b, evex_v, false /*eevex_x*/, nds_enc, VEX_SIMD_NONE, /* map4 */ VEX_OPCODE_0F_3C); + emit_int16(0x8F, (0xC0 | (src_enc & 7))); +} + +void Assembler::push2p(Register src1, Register src2) { + push2(src1, src2, true); +} + +void Assembler::pop2p(Register src1, Register src2) { + pop2(src1, src2, true); +} + +void Assembler::pushp(Register src) { + assert(VM_Version::supports_apx_f(), "requires APX"); + int encode = prefixq_and_encode_rex2(src->encoding()); + emit_int8(0x50 | encode); +} + +void Assembler::popp(Register dst) { + assert(VM_Version::supports_apx_f(), "requires APX"); + int encode = prefixq_and_encode_rex2(dst->encoding()); + emit_int8((unsigned char)0x58 | encode); +} +#endif //_LP64 + + void Assembler::push(int32_t imm32) { // in 64bits we push 64bits onto the stack but only // take a 32bit immediate @@ -7207,6 +7272,7 @@ void Assembler::vroundpd(XMMRegister dst, XMMRegister src, int32_t rmode, int ve void Assembler::vroundpd(XMMRegister dst, Address src, int32_t rmode, int vector_len) { assert(VM_Version::supports_avx(), ""); + assert(!needs_eevex(src.base(), src.index()), "does not support extended gprs as BASE or INDEX of address operand"); InstructionMark im(this); InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false); vex_prefix(src, 0, dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F_3A, &attributes); @@ -11011,6 +11077,7 @@ void Assembler::evpbroadcastq(XMMRegister dst, Register src, int vector_len) { void Assembler::vpgatherdd(XMMRegister dst, Address src, XMMRegister mask, int vector_len) { assert(VM_Version::supports_avx2(), ""); + assert(!needs_eevex(src.base()), "does not support extended gprs as BASE of address operand"); assert(vector_len == Assembler::AVX_128bit || vector_len == Assembler::AVX_256bit, ""); assert(dst != xnoreg, "sanity"); assert(src.isxmmindex(),"expected to be xmm index"); @@ -11024,6 +11091,7 @@ void Assembler::vpgatherdd(XMMRegister dst, Address src, XMMRegister mask, int v void Assembler::vpgatherdq(XMMRegister dst, Address src, XMMRegister mask, int vector_len) { assert(VM_Version::supports_avx2(), ""); + assert(!needs_eevex(src.base()), "does not support extended gprs as BASE of address operand"); assert(vector_len == Assembler::AVX_128bit || vector_len == Assembler::AVX_256bit, ""); assert(dst != xnoreg, "sanity"); assert(src.isxmmindex(),"expected to be xmm index"); @@ -11037,6 +11105,7 @@ void Assembler::vpgatherdq(XMMRegister dst, Address src, XMMRegister mask, int v void Assembler::vgatherdpd(XMMRegister dst, Address src, XMMRegister mask, int vector_len) { assert(VM_Version::supports_avx2(), ""); + assert(!needs_eevex(src.base()), "does not support extended gprs as BASE of address operand"); assert(vector_len == Assembler::AVX_128bit || vector_len == Assembler::AVX_256bit, ""); assert(dst != xnoreg, "sanity"); assert(src.isxmmindex(),"expected to be xmm index"); @@ -11050,6 +11119,7 @@ void Assembler::vgatherdpd(XMMRegister dst, Address src, XMMRegister mask, int v void Assembler::vgatherdps(XMMRegister dst, Address src, XMMRegister mask, int vector_len) { assert(VM_Version::supports_avx2(), ""); + assert(!needs_eevex(src.base()), "does not support extended gprs as BASE of address operand"); assert(vector_len == Assembler::AVX_128bit || vector_len == Assembler::AVX_256bit, ""); assert(dst != xnoreg, "sanity"); assert(src.isxmmindex(),"expected to be xmm index"); @@ -11808,7 +11878,6 @@ void Assembler::evex_prefix(bool vex_r, bool vex_b, bool vex_x, bool evex_r, boo _attributes->get_embedded_opmask_register_specifier() != 0) { byte4 |= (_attributes->is_clear_context() ? EVEX_Z : 0); } - emit_int32(EVEX_4bytes, byte2, byte3, byte4); } @@ -12921,14 +12990,14 @@ void Assembler::emit_data64(jlong data, int Assembler::get_base_prefix_bits(int enc) { int bits = 0; if (enc & 16) bits |= REX2BIT_B4; - if (enc & 8) bits |= REXBIT_B; + if (enc & 8) bits |= REX2BIT_B; return bits; } int Assembler::get_index_prefix_bits(int enc) { int bits = 0; if (enc & 16) bits |= REX2BIT_X4; - if (enc & 8) bits |= REXBIT_X; + if (enc & 8) bits |= REX2BIT_X; return bits; } @@ -12943,7 +13012,7 @@ int Assembler::get_index_prefix_bits(Register index) { int Assembler::get_reg_prefix_bits(int enc) { int bits = 0; if (enc & 16) bits |= REX2BIT_R4; - if (enc & 8) bits |= REXBIT_R; + if (enc & 8) bits |= REX2BIT_R; return bits; } @@ -13181,6 +13250,15 @@ bool Assembler::prefix_is_rex2(int prefix) { return (prefix & 0xFF00) == WREX2; } +int Assembler::get_prefixq_rex2(Address adr, bool is_map1) { + assert(UseAPX, "APX features not enabled"); + int bits = REX2BIT_W; + if (is_map1) bits |= REX2BIT_M0; + bits |= get_base_prefix_bits(adr.base()); + bits |= get_index_prefix_bits(adr.index()); + return WREX2 | bits; +} + int Assembler::get_prefixq(Address adr, bool is_map1) { if (adr.base_needs_rex2() || adr.index_needs_rex2()) { return get_prefixq_rex2(adr, is_map1); @@ -13190,15 +13268,6 @@ int Assembler::get_prefixq(Address adr, bool is_map1) { return is_map1 ? (((int16_t)prfx) << 8) | 0x0F : (int16_t)prfx; } -int Assembler::get_prefixq_rex2(Address adr, bool is_map1) { - assert(UseAPX, "APX features not enabled"); - int bits = REXBIT_W; - if (is_map1) bits |= REX2BIT_M0; - bits |= get_base_prefix_bits(adr.base()); - bits |= get_index_prefix_bits(adr.index()); - return WREX2 | bits; -} - int Assembler::get_prefixq(Address adr, Register src, bool is_map1) { if (adr.base_needs_rex2() || adr.index_needs_rex2() || src->encoding() >= 16) { return get_prefixq_rex2(adr, src, is_map1); @@ -13243,7 +13312,7 @@ int Assembler::get_prefixq(Address adr, Register src, bool is_map1) { int Assembler::get_prefixq_rex2(Address adr, Register src, bool is_map1) { assert(UseAPX, "APX features not enabled"); - int bits = REXBIT_W; + int bits = REX2BIT_W; if (is_map1) bits |= REX2BIT_M0; bits |= get_base_prefix_bits(adr.base()); bits |= get_index_prefix_bits(adr.index()); @@ -13306,7 +13375,7 @@ void Assembler::prefixq(Address adr, XMMRegister src) { } void Assembler::prefixq_rex2(Address adr, XMMRegister src) { - int bits = REXBIT_W; + int bits = REX2BIT_W; bits |= get_base_prefix_bits(adr.base()); bits |= get_index_prefix_bits(adr.index()); bits |= get_reg_prefix_bits(src->encoding()); @@ -13329,7 +13398,7 @@ int Assembler::prefixq_and_encode(int reg_enc, bool is_map1) { int Assembler::prefixq_and_encode_rex2(int reg_enc, bool is_map1) { - prefix16(WREX2 | REXBIT_W | (is_map1 ? REX2BIT_M0: 0) | get_base_prefix_bits(reg_enc)); + prefix16(WREX2 | REX2BIT_W | (is_map1 ? REX2BIT_M0: 0) | get_base_prefix_bits(reg_enc)); return reg_enc & 0x7; } @@ -13358,7 +13427,7 @@ int Assembler::prefixq_and_encode(int dst_enc, int src_enc, bool is_map1) { } int Assembler::prefixq_and_encode_rex2(int dst_enc, int src_enc, bool is_map1) { - int init_bits = REXBIT_W | (is_map1 ? REX2BIT_M0 : 0); + int init_bits = REX2BIT_W | (is_map1 ? REX2BIT_M0 : 0); return prefix_and_encode_rex2(dst_enc, src_enc, init_bits); } @@ -14168,7 +14237,7 @@ void Assembler::precompute_instructions() { ResourceMark rm; // Make a temporary buffer big enough for the routines we're capturing - int size = 256; + int size = UseAPX ? 512 : 256; char* tmp_code = NEW_RESOURCE_ARRAY(char, size); CodeBuffer buffer((address)tmp_code, size); MacroAssembler masm(&buffer); @@ -14212,31 +14281,6 @@ static void emit_copy(CodeSection* code_section, u_char* src, int src_len) { code_section->set_end(end + src_len); } -void Assembler::popa() { // 64bit - emit_copy(code_section(), popa_code, popa_len); -} - -void Assembler::popa_uncached() { // 64bit - movq(r15, Address(rsp, 0)); - movq(r14, Address(rsp, wordSize)); - movq(r13, Address(rsp, 2 * wordSize)); - movq(r12, Address(rsp, 3 * wordSize)); - movq(r11, Address(rsp, 4 * wordSize)); - movq(r10, Address(rsp, 5 * wordSize)); - movq(r9, Address(rsp, 6 * wordSize)); - movq(r8, Address(rsp, 7 * wordSize)); - movq(rdi, Address(rsp, 8 * wordSize)); - movq(rsi, Address(rsp, 9 * wordSize)); - movq(rbp, Address(rsp, 10 * wordSize)); - // Skip rsp as it is restored automatically to the value - // before the corresponding pusha when popa is done. - movq(rbx, Address(rsp, 12 * wordSize)); - movq(rdx, Address(rsp, 13 * wordSize)); - movq(rcx, Address(rsp, 14 * wordSize)); - movq(rax, Address(rsp, 15 * wordSize)); - - addq(rsp, 16 * wordSize); -} // Does not actually store the value of rsp on the stack. // The slot for rsp just contains an arbitrary value. @@ -14247,26 +14291,107 @@ void Assembler::pusha() { // 64bit // Does not actually store the value of rsp on the stack. // The slot for rsp just contains an arbitrary value. void Assembler::pusha_uncached() { // 64bit - subq(rsp, 16 * wordSize); - - movq(Address(rsp, 15 * wordSize), rax); - movq(Address(rsp, 14 * wordSize), rcx); - movq(Address(rsp, 13 * wordSize), rdx); - movq(Address(rsp, 12 * wordSize), rbx); - // Skip rsp as the value is normally not used. There are a few places where - // the original value of rsp needs to be known but that can be computed - // from the value of rsp immediately after pusha (rsp + 16 * wordSize). - movq(Address(rsp, 10 * wordSize), rbp); - movq(Address(rsp, 9 * wordSize), rsi); - movq(Address(rsp, 8 * wordSize), rdi); - movq(Address(rsp, 7 * wordSize), r8); - movq(Address(rsp, 6 * wordSize), r9); - movq(Address(rsp, 5 * wordSize), r10); - movq(Address(rsp, 4 * wordSize), r11); - movq(Address(rsp, 3 * wordSize), r12); - movq(Address(rsp, 2 * wordSize), r13); - movq(Address(rsp, wordSize), r14); - movq(Address(rsp, 0), r15); + if (UseAPX) { + // Data being pushed by PUSH2 must be 16B-aligned on the stack, for this push rax upfront + // and use it as a temporary register for stack alignment. + pushp(rax); + // Move original stack pointer to RAX and align stack pointer to 16B boundary. + movq(rax, rsp); + andq(rsp, -(StackAlignmentInBytes)); + // Push pair of original stack pointer along with remaining registers + // at 16B aligned boundary. + push2p(rax, r31); + push2p(r30, r29); + push2p(r28, r27); + push2p(r26, r25); + push2p(r24, r23); + push2p(r22, r21); + push2p(r20, r19); + push2p(r18, r17); + push2p(r16, r15); + push2p(r14, r13); + push2p(r12, r11); + push2p(r10, r9); + push2p(r8, rdi); + push2p(rsi, rbp); + push2p(rbx, rdx); + // To maintain 16 byte alignment after rcx is pushed. + subq(rsp, 8); + pushp(rcx); + } else { + subq(rsp, 16 * wordSize); + movq(Address(rsp, 15 * wordSize), rax); + movq(Address(rsp, 14 * wordSize), rcx); + movq(Address(rsp, 13 * wordSize), rdx); + movq(Address(rsp, 12 * wordSize), rbx); + // Skip rsp as the value is normally not used. There are a few places where + // the original value of rsp needs to be known but that can be computed + // from the value of rsp immediately after pusha (rsp + 16 * wordSize). + // FIXME: For APX any such direct access should also consider EGPR size + // during address compution. + movq(Address(rsp, 10 * wordSize), rbp); + movq(Address(rsp, 9 * wordSize), rsi); + movq(Address(rsp, 8 * wordSize), rdi); + movq(Address(rsp, 7 * wordSize), r8); + movq(Address(rsp, 6 * wordSize), r9); + movq(Address(rsp, 5 * wordSize), r10); + movq(Address(rsp, 4 * wordSize), r11); + movq(Address(rsp, 3 * wordSize), r12); + movq(Address(rsp, 2 * wordSize), r13); + movq(Address(rsp, wordSize), r14); + movq(Address(rsp, 0), r15); + } +} + +void Assembler::popa() { // 64bit + emit_copy(code_section(), popa_code, popa_len); +} + +void Assembler::popa_uncached() { // 64bit + if (UseAPX) { + popp(rcx); + addq(rsp, 8); + // Data being popped by POP2 must be 16B-aligned on the stack. + pop2p(rdx, rbx); + pop2p(rbp, rsi); + pop2p(rdi, r8); + pop2p(r9, r10); + pop2p(r11, r12); + pop2p(r13, r14); + pop2p(r15, r16); + pop2p(r17, r18); + pop2p(r19, r20); + pop2p(r21, r22); + pop2p(r23, r24); + pop2p(r25, r26); + pop2p(r27, r28); + pop2p(r29, r30); + // Popped value in RAX holds original unaligned stack pointer. + pop2p(r31, rax); + // Reinstantiate original stack pointer. + movq(rsp, rax); + popp(rax); + } else { + movq(r15, Address(rsp, 0)); + movq(r14, Address(rsp, wordSize)); + movq(r13, Address(rsp, 2 * wordSize)); + movq(r12, Address(rsp, 3 * wordSize)); + movq(r11, Address(rsp, 4 * wordSize)); + movq(r10, Address(rsp, 5 * wordSize)); + movq(r9, Address(rsp, 6 * wordSize)); + movq(r8, Address(rsp, 7 * wordSize)); + movq(rdi, Address(rsp, 8 * wordSize)); + movq(rsi, Address(rsp, 9 * wordSize)); + movq(rbp, Address(rsp, 10 * wordSize)); + // Skip rsp as it is restored automatically to the value + // before the corresponding pusha when popa is done. + movq(rbx, Address(rsp, 12 * wordSize)); + movq(rdx, Address(rsp, 13 * wordSize)); + movq(rcx, Address(rsp, 14 * wordSize)); + movq(rax, Address(rsp, 15 * wordSize)); + + addq(rsp, 16 * wordSize); + } } void Assembler::vzeroupper() { diff --git a/src/hotspot/cpu/x86/assembler_x86.hpp b/src/hotspot/cpu/x86/assembler_x86.hpp index 41a639248286e..28457b7005b34 100644 --- a/src/hotspot/cpu/x86/assembler_x86.hpp +++ b/src/hotspot/cpu/x86/assembler_x86.hpp @@ -530,14 +530,16 @@ class Assembler : public AbstractAssembler { }; enum PrefixBits { - REXBIT_B = 0x01, - REXBIT_X = 0x02, - REXBIT_R = 0x04, - REXBIT_W = 0x08, + REX2BIT_B = 0x01, + REX2BIT_X = 0x02, + REX2BIT_R = 0x04, + REX2BIT_W = 0x08, REX2BIT_B4 = 0x10, REX2BIT_X4 = 0x20, REX2BIT_R4 = 0x40, - REX2BIT_M0 = 0x80 + REX2BIT_M0 = 0x80, + REX2BIT_WB = 0x09, + REX2BIT_WB4 = 0x18, }; enum VexPrefix { @@ -1017,6 +1019,15 @@ class Assembler : public AbstractAssembler { void pusha_uncached(); void popa_uncached(); + + // APX ISA extensions for register save/restore optimizations. + void push2(Register src1, Register src2, bool with_ppx = false); + void pop2(Register src1, Register src2, bool with_ppx = false); + void push2p(Register src1, Register src2); + void pop2p(Register src1, Register src2); + void pushp(Register src); + void popp(Register src); + #endif void vzeroupper_uncached(); void decq(Register dst); @@ -3070,7 +3081,6 @@ class InstructionAttr { } void set_extended_context(void) { _is_extended_context = true; } - }; #endif // CPU_X86_ASSEMBLER_X86_HPP diff --git a/src/hotspot/cpu/x86/c1_Defs_x86.hpp b/src/hotspot/cpu/x86/c1_Defs_x86.hpp index 28da99cdf2764..e7ec63f83a778 100644 --- a/src/hotspot/cpu/x86/c1_Defs_x86.hpp +++ b/src/hotspot/cpu/x86/c1_Defs_x86.hpp @@ -39,7 +39,7 @@ enum { // registers enum { - pd_nof_cpu_regs_frame_map = Register::number_of_registers, // number of registers used during code emission + pd_nof_cpu_regs_frame_map = NOT_LP64(8) LP64_ONLY(16), // number of registers used during code emission pd_nof_fpu_regs_frame_map = FloatRegister::number_of_registers, // number of registers used during code emission pd_nof_xmm_regs_frame_map = XMMRegister::number_of_registers, // number of registers used during code emission diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp index 978708d03e66b..e2fde10b98d86 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp @@ -2836,7 +2836,7 @@ void LIR_Assembler::align_call(LIR_Code code) { offset += NativeCall::displacement_offset; break; case lir_icvirtual_call: - offset += NativeCall::displacement_offset + NativeMovConstReg::instruction_size; + offset += NativeCall::displacement_offset + NativeMovConstReg::instruction_size_rex; break; default: ShouldNotReachHere(); } @@ -2873,7 +2873,7 @@ void LIR_Assembler::emit_static_call_stub() { int start = __ offset(); // make sure that the displacement word of the call ends up word aligned - __ align(BytesPerWord, __ offset() + NativeMovConstReg::instruction_size + NativeCall::displacement_offset); + __ align(BytesPerWord, __ offset() + NativeMovConstReg::instruction_size_rex + NativeCall::displacement_offset); __ relocate(static_stub_Relocation::spec(call_pc)); __ mov_metadata(rbx, (Metadata*)nullptr); // must be set to -1 at code generation time diff --git a/src/hotspot/cpu/x86/c1_Runtime1_x86.cpp b/src/hotspot/cpu/x86/c1_Runtime1_x86.cpp index 2c24c0c2cfb17..dc051127feaec 100644 --- a/src/hotspot/cpu/x86/c1_Runtime1_x86.cpp +++ b/src/hotspot/cpu/x86/c1_Runtime1_x86.cpp @@ -420,7 +420,12 @@ static OopMap* generate_oop_map(StubAssembler* sasm, int num_rt_args, void C1_MacroAssembler::save_live_registers_no_oop_map(bool save_fpu_registers) { __ block_comment("save_live_registers"); - __ pusha(); // integer registers + // Push CPU state in multiple of 16 bytes +#ifdef _LP64 + __ save_legacy_gprs(); +#else + __ pusha(); +#endif // assert(float_regs_as_doubles_off % 2 == 0, "misaligned offset"); // assert(xmm_regs_as_doubles_off % 2 == 0, "misaligned offset"); @@ -560,7 +565,12 @@ void C1_MacroAssembler::restore_live_registers(bool restore_fpu_registers) { __ block_comment("restore_live_registers"); restore_fpu(this, restore_fpu_registers); +#ifdef _LP64 + __ restore_legacy_gprs(); +#else __ popa(); +#endif + } diff --git a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp index b71b5a2ab47ef..64ad743067476 100644 --- a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp @@ -583,6 +583,25 @@ void SaveLiveRegisters::initialize(BarrierStubC2* stub) { caller_saved.Insert(OptoReg::as_OptoReg(r10->as_VMReg())); caller_saved.Insert(OptoReg::as_OptoReg(r11->as_VMReg())); + if (UseAPX) { + caller_saved.Insert(OptoReg::as_OptoReg(r16->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r17->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r18->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r19->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r20->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r21->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r22->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r23->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r24->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r25->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r26->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r27->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r28->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r29->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r30->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r31->as_VMReg())); + } + int gp_spill_size = 0; int opmask_spill_size = 0; int xmm_spill_size = 0; diff --git a/src/hotspot/cpu/x86/gc/x/xBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/x/xBarrierSetAssembler_x86.cpp index 4805b21308442..a7dc34b17b1f6 100644 --- a/src/hotspot/cpu/x86/gc/x/xBarrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/x/xBarrierSetAssembler_x86.cpp @@ -484,6 +484,25 @@ class XSaveLiveRegisters { caller_saved.Insert(OptoReg::as_OptoReg(r11->as_VMReg())); caller_saved.Remove(OptoReg::as_OptoReg(stub->ref()->as_VMReg())); + if (UseAPX) { + caller_saved.Insert(OptoReg::as_OptoReg(r16->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r17->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r18->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r19->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r20->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r21->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r22->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r23->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r24->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r25->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r26->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r27->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r28->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r29->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r30->as_VMReg())); + caller_saved.Insert(OptoReg::as_OptoReg(r31->as_VMReg())); + } + // Create mask of live registers RegMask live = stub->live(); if (stub->tmp() != noreg) { diff --git a/src/hotspot/cpu/x86/globals_x86.hpp b/src/hotspot/cpu/x86/globals_x86.hpp index 03fd26195c0ad..54888a9f849d9 100644 --- a/src/hotspot/cpu/x86/globals_x86.hpp +++ b/src/hotspot/cpu/x86/globals_x86.hpp @@ -115,7 +115,6 @@ define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong); "Highest supported AVX instructions set on x86/x64") \ range(0, 3) \ \ - \ product(bool, UseAPX, false, EXPERIMENTAL, \ "Use Intel Advanced Performance Extensions") \ \ @@ -192,7 +191,6 @@ define_pd_global(intx, InitArrayShortSize, 8*BytesPerLong); product(bool, IntelJccErratumMitigation, true, DIAGNOSTIC, \ "Turn off JVM mitigations related to Intel micro code " \ "mitigations for the Intel JCC erratum") \ - \ // end of ARCH_FLAGS #endif // CPU_X86_GLOBALS_X86_HPP diff --git a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp index 94708d4224379..21095692d19dc 100644 --- a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp +++ b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp @@ -49,12 +49,17 @@ jint CodeInstaller::pd_next_offset(NativeInstruction* inst, jint pc_offset, JVMC return (pc_offset + NativeCall::instruction_size); } else if (inst->is_mov_literal64()) { // mov+call instruction pair - jint offset = pc_offset + NativeMovConstReg::instruction_size; + jint offset = pc_offset + ((NativeMovConstReg*)inst)->instruction_size(); u_char* call = (u_char*) (_instructions->start() + offset); if (call[0] == Assembler::REX_B) { offset += 1; /* prefix byte for extended register R8-R15 */ call++; } + if (call[0] == Assembler::REX2) { + offset += 2; /* prefix byte for APX extended GPR register R16-R31 */ + call+=2; + } + // Register indirect call. assert(call[0] == 0xFF, "expected call"); offset += 2; /* opcode byte + modrm byte */ return (offset); diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.cpp b/src/hotspot/cpu/x86/macroAssembler_x86.cpp index 851b89a0a060f..64142a6aee5d6 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp @@ -4087,6 +4087,11 @@ RegSet MacroAssembler::call_clobbered_gp_registers() { regs += RegSet::range(r8, r11); #else regs += RegSet::of(rax, rcx, rdx); +#endif +#ifdef _LP64 + if (UseAPX) { + regs += RegSet::range(r16, as_Register(Register::number_of_registers - 1)); + } #endif return regs; } @@ -10379,3 +10384,45 @@ void MacroAssembler::lightweight_unlock(Register obj, Register reg_rax, Register bind(unlocked); } + +#ifdef _LP64 +// Saves legacy GPRs state on stack. +void MacroAssembler::save_legacy_gprs() { + subq(rsp, 16 * wordSize); + movq(Address(rsp, 15 * wordSize), rax); + movq(Address(rsp, 14 * wordSize), rcx); + movq(Address(rsp, 13 * wordSize), rdx); + movq(Address(rsp, 12 * wordSize), rbx); + movq(Address(rsp, 10 * wordSize), rbp); + movq(Address(rsp, 9 * wordSize), rsi); + movq(Address(rsp, 8 * wordSize), rdi); + movq(Address(rsp, 7 * wordSize), r8); + movq(Address(rsp, 6 * wordSize), r9); + movq(Address(rsp, 5 * wordSize), r10); + movq(Address(rsp, 4 * wordSize), r11); + movq(Address(rsp, 3 * wordSize), r12); + movq(Address(rsp, 2 * wordSize), r13); + movq(Address(rsp, wordSize), r14); + movq(Address(rsp, 0), r15); +} + +// Resotres back legacy GPRs state from stack. +void MacroAssembler::restore_legacy_gprs() { + movq(r15, Address(rsp, 0)); + movq(r14, Address(rsp, wordSize)); + movq(r13, Address(rsp, 2 * wordSize)); + movq(r12, Address(rsp, 3 * wordSize)); + movq(r11, Address(rsp, 4 * wordSize)); + movq(r10, Address(rsp, 5 * wordSize)); + movq(r9, Address(rsp, 6 * wordSize)); + movq(r8, Address(rsp, 7 * wordSize)); + movq(rdi, Address(rsp, 8 * wordSize)); + movq(rsi, Address(rsp, 9 * wordSize)); + movq(rbp, Address(rsp, 10 * wordSize)); + movq(rbx, Address(rsp, 12 * wordSize)); + movq(rdx, Address(rsp, 13 * wordSize)); + movq(rcx, Address(rsp, 14 * wordSize)); + movq(rax, Address(rsp, 15 * wordSize)); + addq(rsp, 16 * wordSize); +} +#endif diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.hpp b/src/hotspot/cpu/x86/macroAssembler_x86.hpp index 492ea99e04536..2ecd2bbe96d49 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp @@ -2150,6 +2150,11 @@ class MacroAssembler: public Assembler { void lightweight_lock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow); void lightweight_unlock(Register obj, Register reg_rax, Register thread, Register tmp, Label& slow); + +#ifdef _LP64 + void save_legacy_gprs(); + void restore_legacy_gprs(); +#endif }; /** diff --git a/src/hotspot/cpu/x86/methodHandles_x86.cpp b/src/hotspot/cpu/x86/methodHandles_x86.cpp index 16973816f7bf9..de897d71facef 100644 --- a/src/hotspot/cpu/x86/methodHandles_x86.cpp +++ b/src/hotspot/cpu/x86/methodHandles_x86.cpp @@ -536,10 +536,11 @@ void trace_method_handle_stub(const char* adaptername, Register r = as_Register(i); // The registers are stored in reverse order on the stack (by pusha). #ifdef AMD64 - assert(Register::number_of_registers == 16, "sanity"); + int num_regs = UseAPX ? 32 : 16; + assert(Register::available_gp_registers() == num_regs, "sanity"); if (r == rsp) { // rsp is actually not stored by pusha(), compute the old rsp from saved_regs (rsp after pusha): saved_regs + 16 = old rsp - ls.print("%3s=" PTR_FORMAT, r->name(), (intptr_t)(&saved_regs[16])); + ls.print("%3s=" PTR_FORMAT, r->name(), (intptr_t)(&saved_regs[num_regs])); } else { ls.print("%3s=" PTR_FORMAT, r->name(), saved_regs[((saved_regs_count - 1) - i)]); } diff --git a/src/hotspot/cpu/x86/nativeInst_x86.cpp b/src/hotspot/cpu/x86/nativeInst_x86.cpp index 0426c0f51741d..395c3219809de 100644 --- a/src/hotspot/cpu/x86/nativeInst_x86.cpp +++ b/src/hotspot/cpu/x86/nativeInst_x86.cpp @@ -160,8 +160,13 @@ void NativeCall::set_destination_mt_safe(address dest) { void NativeMovConstReg::verify() { #ifdef AMD64 // make sure code pattern is actually a mov reg64, imm64 instruction - if ((ubyte_at(0) != Assembler::REX_W && ubyte_at(0) != Assembler::REX_WB) || - (ubyte_at(1) & (0xff ^ register_mask)) != 0xB8) { + bool valid_rex_prefix = ubyte_at(0) == Assembler::REX_W || ubyte_at(0) == Assembler::REX_WB; + bool valid_rex2_prefix = ubyte_at(0) == Assembler::REX2 && + (ubyte_at(1) == Assembler::REX2BIT_W || + ubyte_at(1) == Assembler::REX2BIT_WB || + ubyte_at(1) == Assembler::REX2BIT_WB4); + int opcode = has_rex2_prefix() ? ubyte_at(2) : ubyte_at(1); + if ((!valid_rex_prefix || !valid_rex2_prefix) && (opcode & (0xff ^ register_mask)) != 0xB8) { print(); fatal("not a REX.W[B] mov reg64, imm64"); } @@ -208,6 +213,11 @@ int NativeMovRegMem::instruction_start() const { instr_0 = ubyte_at(off); } + if (instr_0 == instruction_REX2_prefix) { + off+=2; + instr_0 = ubyte_at(off); + } + if (instr_0 == instruction_code_xor) { off += 2; instr_0 = ubyte_at(off); @@ -226,29 +236,39 @@ int NativeMovRegMem::instruction_start() const { instr_0 = ubyte_at(off); } + if (instr_0 == instruction_REX2_prefix) { + off+=2; + instr_0 = ubyte_at(off); + } + if ( instr_0 >= instruction_prefix_wide_lo && // 0x40 instr_0 <= instruction_prefix_wide_hi) { // 0x4f off++; instr_0 = ubyte_at(off); } - + // Extended prefixes can only follow REX prefixes, + // REX2 is directly followed by main opcode. if (instr_0 == instruction_extended_prefix ) { // 0x0f off++; } + // Offset of instruction opcode. return off; } +// Format [REX/REX2] [OPCODE] [ModRM] [SIB] [IMM/DISP32] int NativeMovRegMem::patch_offset() const { int off = data_offset + instruction_start(); u_char mod_rm = *(u_char*)(instruction_address() + 1); // nnnn(r12|rsp) isn't coded as simple mod/rm since that is // the encoding to use an SIB byte. Which will have the nnnn // field off by one byte + // ModRM Byte Format = Mod[2] REG[3] RM[3] if ((mod_rm & 7) == 0x4) { off++; } + // Displacement offset. return off; } @@ -294,12 +314,6 @@ void NativeMovRegMem::print() { void NativeLoadAddress::verify() { // make sure code pattern is actually a mov [reg+offset], reg instruction u_char test_byte = *(u_char*)instruction_address(); -#ifdef _LP64 - if ( (test_byte == instruction_prefix_wide || - test_byte == instruction_prefix_wide_extended) ) { - test_byte = *(u_char*)(instruction_address() + 1); - } -#endif // _LP64 if ( ! ((test_byte == lea_instruction_code) LP64_ONLY(|| (test_byte == mov64_instruction_code) ))) { fatal ("not a lea reg, [reg+offs] instruction"); diff --git a/src/hotspot/cpu/x86/nativeInst_x86.hpp b/src/hotspot/cpu/x86/nativeInst_x86.hpp index 3a30047294429..d02387aa9ffbb 100644 --- a/src/hotspot/cpu/x86/nativeInst_x86.hpp +++ b/src/hotspot/cpu/x86/nativeInst_x86.hpp @@ -90,6 +90,7 @@ class NativeInstruction { void wrote(int offset); public: + bool has_rex2_prefix() const { return ubyte_at(0) == Assembler::REX2; } inline friend NativeInstruction* nativeInstruction_at(address address); }; @@ -178,19 +179,28 @@ inline NativeCall* nativeCall_before(address return_address) { return call; } +// Call with target address in a general purpose register(indirect absolute addressing). +// Encoding : FF /2 CALL r/m32 +// Primary Opcode: FF +// Opcode Extension(part of ModRM.REG): /2 +// Operand ModRM.RM = r/m32 class NativeCallReg: public NativeInstruction { public: enum Intel_specific_constants { instruction_code = 0xFF, instruction_offset = 0, return_address_offset_norex = 2, - return_address_offset_rex = 3 + return_address_offset_rex = 3, + return_address_offset_rex2 = 4 }; int next_instruction_offset() const { if (ubyte_at(0) == NativeCallReg::instruction_code) { return return_address_offset_norex; + } else if (has_rex2_prefix()) { + return return_address_offset_rex2; } else { + assert((ubyte_at(0) & 0xF0) == Assembler::REX, ""); return return_address_offset_rex; } } @@ -198,28 +208,38 @@ class NativeCallReg: public NativeInstruction { // An interface for accessing/manipulating native mov reg, imm32 instructions. // (used to manipulate inlined 32bit data dll calls, etc.) +// Instruction format for implied addressing mode immediate operand move to register instruction: +// [REX/REX2] [OPCODE] [IMM32] class NativeMovConstReg: public NativeInstruction { #ifdef AMD64 static const bool has_rex = true; static const int rex_size = 1; + static const int rex2_size = 2; #else static const bool has_rex = false; static const int rex_size = 0; + static const int rex2_size = 0; #endif // AMD64 public: enum Intel_specific_constants { - instruction_code = 0xB8, - instruction_size = 1 + rex_size + wordSize, - instruction_offset = 0, - data_offset = 1 + rex_size, - next_instruction_offset = instruction_size, - register_mask = 0x07 + instruction_code = 0xB8, + instruction_offset = 0, + instruction_size_rex = 1 + rex_size + wordSize, + instruction_size_rex2 = 1 + rex2_size + wordSize, + data_offset_rex = 1 + rex_size, + data_offset_rex2 = 1 + rex2_size, + next_instruction_offset_rex = instruction_size_rex, + next_instruction_offset_rex2 = instruction_size_rex2, + register_mask = 0x07 }; + int instruction_size() const { return has_rex2_prefix() ? instruction_size_rex2 : instruction_size_rex; } + int next_inst_offset() const { return has_rex2_prefix() ? next_instruction_offset_rex2 : next_instruction_offset_rex; } + int data_byte_offset() const { return has_rex2_prefix() ? data_offset_rex2 : data_offset_rex;} address instruction_address() const { return addr_at(instruction_offset); } - address next_instruction_address() const { return addr_at(next_instruction_offset); } - intptr_t data() const { return ptr_at(data_offset); } - void set_data(intptr_t x) { set_ptr_at(data_offset, x); } + address next_instruction_address() const { return addr_at(next_inst_offset()); } + intptr_t data() const { return ptr_at(data_byte_offset()); } + void set_data(intptr_t x) { set_ptr_at(data_byte_offset(), x); } void verify(); void print(); @@ -238,7 +258,10 @@ inline NativeMovConstReg* nativeMovConstReg_at(address address) { } inline NativeMovConstReg* nativeMovConstReg_before(address address) { - NativeMovConstReg* test = (NativeMovConstReg*)(address - NativeMovConstReg::instruction_size - NativeMovConstReg::instruction_offset); + int instruction_size = ((NativeInstruction*)(address))->has_rex2_prefix() ? + NativeMovConstReg::instruction_size_rex2 : + NativeMovConstReg::instruction_size_rex; + NativeMovConstReg* test = (NativeMovConstReg*)(address - instruction_size - NativeMovConstReg::instruction_offset); #ifdef ASSERT test->verify(); #endif @@ -279,35 +302,47 @@ class NativeMovRegMem: public NativeInstruction { instruction_prefix_wide_hi = Assembler::REX_WRXB, instruction_code_xor = 0x33, instruction_extended_prefix = 0x0F, + + // Legacy encoding MAP1 instructions promotable to REX2 encoding. instruction_code_mem2reg_movslq = 0x63, instruction_code_mem2reg_movzxb = 0xB6, instruction_code_mem2reg_movsxb = 0xBE, instruction_code_mem2reg_movzxw = 0xB7, instruction_code_mem2reg_movsxw = 0xBF, instruction_operandsize_prefix = 0x66, + + // Legacy encoding MAP0 instructions promotable to REX2 encoding. instruction_code_reg2mem = 0x89, instruction_code_mem2reg = 0x8b, instruction_code_reg2memb = 0x88, instruction_code_mem2regb = 0x8a, + instruction_code_lea = 0x8d, + instruction_code_float_s = 0xd9, instruction_code_float_d = 0xdd, instruction_code_long_volatile = 0xdf, + + // VEX/EVEX/Legacy encodeded MAP1 instructions promotable to REX2 encoding. instruction_code_xmm_ss_prefix = 0xf3, instruction_code_xmm_sd_prefix = 0xf2, + instruction_code_xmm_code = 0x0f, + + // Address operand load/store/ldp are promotable to REX2 to accomodate + // extended SIB encoding. instruction_code_xmm_load = 0x10, instruction_code_xmm_store = 0x11, instruction_code_xmm_lpd = 0x12, - instruction_code_lea = 0x8d, - instruction_VEX_prefix_2bytes = Assembler::VEX_2bytes, instruction_VEX_prefix_3bytes = Assembler::VEX_3bytes, instruction_EVEX_prefix_4bytes = Assembler::EVEX_4bytes, + instruction_REX2_prefix = Assembler::REX2, instruction_offset = 0, data_offset = 2, - next_instruction_offset = 4 + next_instruction_offset_rex = 4, + next_instruction_offset_rex2 = 5 }; // helper @@ -438,7 +473,8 @@ inline NativeJump* nativeJump_at(address address) { return jump; } -// Handles all kinds of jump on Intel. Long/far, conditional/unconditional +// Handles all kinds of jump on Intel. Long/far, conditional/unconditional with relative offsets +// barring register indirect jumps. class NativeGeneralJump: public NativeInstruction { public: enum Intel_specific_constants { @@ -538,7 +574,7 @@ inline bool NativeInstruction::is_cond_jump() { return (int_at(0) & 0xF0FF) = inline bool NativeInstruction::is_safepoint_poll() { #ifdef AMD64 const bool has_rex_prefix = ubyte_at(0) == NativeTstRegMem::instruction_rex_b_prefix; - const int test_offset = has_rex_prefix ? 1 : 0; + const int test_offset = has_rex2_prefix() ? 2 : (has_rex_prefix ? 1 : 0); #else const int test_offset = 0; #endif @@ -549,8 +585,14 @@ inline bool NativeInstruction::is_safepoint_poll() { inline bool NativeInstruction::is_mov_literal64() { #ifdef AMD64 - return ((ubyte_at(0) == Assembler::REX_W || ubyte_at(0) == Assembler::REX_WB) && - (ubyte_at(1) & (0xff ^ NativeMovConstReg::register_mask)) == 0xB8); + bool valid_rex_prefix = ubyte_at(0) == Assembler::REX_W || ubyte_at(0) == Assembler::REX_WB; + bool valid_rex2_prefix = ubyte_at(0) == Assembler::REX2 && + (ubyte_at(1) == Assembler::REX2BIT_W || + ubyte_at(1) == Assembler::REX2BIT_WB || + ubyte_at(1) == Assembler::REX2BIT_WB4); + + int opcode = has_rex2_prefix() ? ubyte_at(2) : ubyte_at(1); + return ((valid_rex_prefix || valid_rex2_prefix) && (opcode & (0xff ^ NativeMovConstReg::register_mask)) == 0xB8); #else return false; #endif // AMD64 diff --git a/src/hotspot/cpu/x86/register_x86.cpp b/src/hotspot/cpu/x86/register_x86.cpp index 2aae4a795e3c0..bb26ab6605123 100644 --- a/src/hotspot/cpu/x86/register_x86.cpp +++ b/src/hotspot/cpu/x86/register_x86.cpp @@ -35,7 +35,9 @@ const char * Register::RegisterImpl::name() const { static const char *const names[number_of_registers] = { #ifdef _LP64 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", - "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15", + "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", + "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31" #else "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi" #endif // _LP64 diff --git a/src/hotspot/cpu/x86/register_x86.hpp b/src/hotspot/cpu/x86/register_x86.hpp index 5449f0d97241a..6844fdc248d36 100644 --- a/src/hotspot/cpu/x86/register_x86.hpp +++ b/src/hotspot/cpu/x86/register_x86.hpp @@ -45,8 +45,8 @@ class Register { inline friend constexpr Register as_Register(int encoding); enum { - number_of_registers = LP64_ONLY( 16 ) NOT_LP64( 8 ), - number_of_byte_registers = LP64_ONLY( 16 ) NOT_LP64( 4 ), + number_of_registers = LP64_ONLY( 32 ) NOT_LP64( 8 ), + number_of_byte_registers = LP64_ONLY( 32 ) NOT_LP64( 4 ), max_slots_per_register = LP64_ONLY( 2 ) NOT_LP64( 1 ) }; @@ -76,6 +76,16 @@ class Register { int operator!=(const Register r) const { return _encoding != r._encoding; } constexpr const RegisterImpl* operator->() const { return RegisterImpl::first() + _encoding; } + + // Actually available GP registers for use, depending on actual CPU capabilities and flags. + static int available_gp_registers() { +#ifdef _LP64 + if (!UseAPX) { + return number_of_registers / 2; + } +#endif // _LP64 + return number_of_registers; + } }; extern const Register::RegisterImpl all_RegisterImpls[Register::number_of_registers + 1] INTERNAL_VISIBILITY; @@ -115,6 +125,22 @@ constexpr Register r12 = as_Register(12); constexpr Register r13 = as_Register(13); constexpr Register r14 = as_Register(14); constexpr Register r15 = as_Register(15); +constexpr Register r16 = as_Register(16); +constexpr Register r17 = as_Register(17); +constexpr Register r18 = as_Register(18); +constexpr Register r19 = as_Register(19); +constexpr Register r20 = as_Register(20); +constexpr Register r21 = as_Register(21); +constexpr Register r22 = as_Register(22); +constexpr Register r23 = as_Register(23); +constexpr Register r24 = as_Register(24); +constexpr Register r25 = as_Register(25); +constexpr Register r26 = as_Register(26); +constexpr Register r27 = as_Register(27); +constexpr Register r28 = as_Register(28); +constexpr Register r29 = as_Register(29); +constexpr Register r30 = as_Register(30); +constexpr Register r31 = as_Register(31); #endif // _LP64 diff --git a/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp b/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp index ac7baeaf74ff5..4029e486c9cdf 100644 --- a/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp +++ b/src/hotspot/cpu/x86/sharedRuntime_x86_64.cpp @@ -95,6 +95,7 @@ class RegisterSaver { // units because compiler frame slots are jints. #define XSAVE_AREA_BEGIN 160 #define XSAVE_AREA_YMM_BEGIN 576 +#define XSAVE_AREA_EGPRS 960 #define XSAVE_AREA_OPMASK_BEGIN 1088 #define XSAVE_AREA_ZMM_BEGIN 1152 #define XSAVE_AREA_UPPERBANK 1664 @@ -104,8 +105,8 @@ class RegisterSaver { #define DEF_OPMASK_OFFS(regnum) opmask ## regnum ## _off = opmask_off + (regnum)*8/BytesPerInt, opmask ## regnum ## H_off #define DEF_ZMM_UPPER_OFFS(regnum) zmm ## regnum ## _off = zmm_upper_off + (regnum-16)*64/BytesPerInt, zmm ## regnum ## H_off enum layout { - fpu_state_off = frame::arg_reg_save_area_bytes/BytesPerInt, // fxsave save area - xmm_off = fpu_state_off + XSAVE_AREA_BEGIN/BytesPerInt, // offset in fxsave save area + fpu_state_off = frame::arg_reg_save_area_bytes/BytesPerInt, // fxsave save area + xmm_off = fpu_state_off + XSAVE_AREA_BEGIN/BytesPerInt, // offset in fxsave save area DEF_XMM_OFFS(0), DEF_XMM_OFFS(1), // 2..15 are implied in range usage @@ -113,7 +114,24 @@ class RegisterSaver { DEF_YMM_OFFS(0), DEF_YMM_OFFS(1), // 2..15 are implied in range usage - opmask_off = xmm_off + (XSAVE_AREA_OPMASK_BEGIN - XSAVE_AREA_BEGIN)/BytesPerInt, + r31_off = xmm_off + (XSAVE_AREA_EGPRS - XSAVE_AREA_BEGIN)/BytesPerInt, + r31H_off, + r30_off, r30H_off, + r29_off, r29H_off, + r28_off, r28H_off, + r27_off, r27H_off, + r26_off, r26H_off, + r25_off, r25H_off, + r24_off, r24H_off, + r23_off, r23H_off, + r22_off, r22H_off, + r21_off, r21H_off, + r20_off, r20H_off, + r19_off, r19H_off, + r18_off, r18H_off, + r17_off, r17H_off, + r16_off, r16H_off, + opmask_off = xmm_off + (XSAVE_AREA_OPMASK_BEGIN - XSAVE_AREA_BEGIN)/BytesPerInt, DEF_OPMASK_OFFS(0), DEF_OPMASK_OFFS(1), // 2..7 are implied in range usage @@ -199,7 +217,13 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_ // to be under the return like a normal enter. __ enter(); // rsp becomes 16-byte aligned here - __ push_CPU_state(); // Push a multiple of 16 bytes + __ pushf(); + // Make sure rsp stays 16-byte aligned + __ subq(rsp, 8); + // Push CPU state in multiple of 16 bytes + __ save_legacy_gprs(); + __ push_FPU_state(); + // push cpu state handles this on EVEX enabled targets if (save_wide_vectors) { @@ -247,6 +271,17 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_ #endif } } + +#if COMPILER2_OR_JVMCI + if (UseAPX) { + int base_addr = XSAVE_AREA_EGPRS; + off = 0; + for(int n = 16; n < Register::number_of_registers; n++) { + __ movq(Address(rsp, base_addr+(off++*8)), as_Register(n)); + } + } +#endif + __ vzeroupper(); if (frame::arg_reg_save_area_bytes != 0) { // Allocate argument register save area @@ -279,6 +314,25 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_ map->set_callee_saved(STACK_OFFSET( r13_off ), r13->as_VMReg()); map->set_callee_saved(STACK_OFFSET( r14_off ), r14->as_VMReg()); map->set_callee_saved(STACK_OFFSET( r15_off ), r15->as_VMReg()); + + if (UseAPX) { + map->set_callee_saved(STACK_OFFSET( r16_off ), r16->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r17_off ), r17->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r18_off ), r18->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r19_off ), r19->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r20_off ), r20->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r21_off ), r21->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r22_off ), r22->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r23_off ), r23->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r24_off ), r24->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r25_off ), r25->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r26_off ), r26->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r27_off ), r27->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r28_off ), r28->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r29_off ), r29->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r30_off ), r30->as_VMReg()); + map->set_callee_saved(STACK_OFFSET( r31_off ), r31->as_VMReg()); + } // For both AVX and EVEX we will use the legacy FXSAVE area for xmm0..xmm15, // on EVEX enabled targets, we get it included in the xsave area off = xmm0_off; @@ -339,6 +393,24 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_ map->set_callee_saved(STACK_OFFSET( r13H_off ), r13->as_VMReg()->next()); map->set_callee_saved(STACK_OFFSET( r14H_off ), r14->as_VMReg()->next()); map->set_callee_saved(STACK_OFFSET( r15H_off ), r15->as_VMReg()->next()); + if (UseAPX) { + map->set_callee_saved(STACK_OFFSET( r16H_off ), r16->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r17H_off ), r17->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r18H_off ), r18->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r19H_off ), r19->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r20H_off ), r20->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r21H_off ), r21->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r22H_off ), r22->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r23H_off ), r23->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r24H_off ), r24->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r25H_off ), r25->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r26H_off ), r26->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r27H_off ), r27->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r28H_off ), r28->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r29H_off ), r29->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r30H_off ), r30->as_VMReg()->next()); + map->set_callee_saved(STACK_OFFSET( r31H_off ), r31->as_VMReg()->next()); + } // For both AVX and EVEX we will use the legacy FXSAVE area for xmm0..xmm15, // on EVEX enabled targets, we get it included in the xsave area off = xmm0H_off; @@ -428,8 +500,21 @@ void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_wi } } +#if COMPILER2_OR_JVMCI + if (UseAPX) { + int base_addr = XSAVE_AREA_EGPRS; + int off = 0; + for (int n = 16; n < Register::number_of_registers; n++) { + __ movq(as_Register(n), Address(rsp, base_addr+(off++*8))); + } + } +#endif + // Recover CPU state - __ pop_CPU_state(); + __ pop_FPU_state(); + __ restore_legacy_gprs(); + __ addq(rsp, 8); + __ popf(); // Get the rbp described implicitly by the calling convention (no oopMap) __ pop(rbp); } @@ -2543,6 +2628,9 @@ void SharedRuntime::generate_deopt_blob() { if (UseAVX > 2) { pad += 1024; } + if (UseAPX) { + pad += 1024; + } #if INCLUDE_JVMCI if (EnableJVMCI) { pad += 512; // Increase the buffer size when compiling for JVMCI @@ -3091,7 +3179,7 @@ SafepointBlob* SharedRuntime::generate_handler_blob(address call_ptr, int poll_t OopMap* map; // Allocate space for the code. Setup code generation tools. - CodeBuffer buffer("handler_blob", 2048, 1024); + CodeBuffer buffer("handler_blob", 2348, 1024); MacroAssembler* masm = new MacroAssembler(&buffer); address start = __ pc(); @@ -3247,7 +3335,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha // allocate space for the code ResourceMark rm; - CodeBuffer buffer(name, 1200, 512); + CodeBuffer buffer(name, 1552, 512); MacroAssembler* masm = new MacroAssembler(&buffer); int frame_size_in_words; diff --git a/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp b/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp index 7b9d49dd46140..82179f9022e92 100644 --- a/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp +++ b/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp @@ -40,13 +40,17 @@ #define __ _masm-> static bool is_valid_XMM(XMMRegister reg) { - return reg->is_valid() && (UseAVX >= 3 || (reg->encoding() < 16)); // why is this not covered by is_valid()? + return reg->is_valid() && (reg->encoding() < (UseAVX >= 3 ? 32 : 16)); // why is this not covered by is_valid()? +} + +static bool is_valid_gp(Register reg) { + return reg->is_valid() && (reg->encoding() < (UseAPX ? 32 : 16)); } // for callee saved regs, according to the caller's ABI static int compute_reg_save_area_size(const ABIDescriptor& abi) { int size = 0; - for (Register reg = as_Register(0); reg->is_valid(); reg = reg->successor()) { + for (Register reg = as_Register(0); is_valid_gp(reg); reg = reg->successor()) { if (reg == rbp || reg == rsp) continue; // saved/restored by prologue/epilogue if (!abi.is_volatile_reg(reg)) { size += 8; // bytes @@ -84,7 +88,7 @@ static void preserve_callee_saved_registers(MacroAssembler* _masm, const ABIDesc int offset = reg_save_area_offset; __ block_comment("{ preserve_callee_saved_regs "); - for (Register reg = as_Register(0); reg->is_valid(); reg = reg->successor()) { + for (Register reg = as_Register(0); is_valid_gp(reg); reg = reg->successor()) { if (reg == rbp || reg == rsp) continue; // saved/restored by prologue/epilogue if (!abi.is_volatile_reg(reg)) { __ movptr(Address(rsp, offset), reg); @@ -134,7 +138,7 @@ static void restore_callee_saved_registers(MacroAssembler* _masm, const ABIDescr int offset = reg_save_area_offset; __ block_comment("{ restore_callee_saved_regs "); - for (Register reg = as_Register(0); reg->is_valid(); reg = reg->successor()) { + for (Register reg = as_Register(0); is_valid_gp(reg); reg = reg->successor()) { if (reg == rbp || reg == rsp) continue; // saved/restored by prologue/epilogue if (!abi.is_volatile_reg(reg)) { __ movptr(reg, Address(rsp, offset)); diff --git a/src/hotspot/cpu/x86/vm_version_x86.cpp b/src/hotspot/cpu/x86/vm_version_x86.cpp index 103a7726276c7..02e147743cb1d 100644 --- a/src/hotspot/cpu/x86/vm_version_x86.cpp +++ b/src/hotspot/cpu/x86/vm_version_x86.cpp @@ -108,6 +108,7 @@ class VM_Version_StubGenerator: public StubCodeGenerator { VM_Version_StubGenerator(CodeBuffer *c) : StubCodeGenerator(c) {} +#if defined(_LP64) address clear_apx_test_state() { # define __ _masm-> address start = __ pc(); @@ -115,7 +116,6 @@ class VM_Version_StubGenerator: public StubCodeGenerator { // handling guarantees that preserved register values post signal handling were // re-instantiated by operating system and not because they were not modified externally. - /* FIXME Uncomment following code after OS enablement of bool save_apx = UseAPX; VM_Version::set_apx_cpuFeatures(); UseAPX = true; @@ -124,10 +124,10 @@ class VM_Version_StubGenerator: public StubCodeGenerator { __ mov64(r31, 0L); UseAPX = save_apx; VM_Version::clean_cpuFeatures(); - */ __ ret(0); return start; } +#endif address generate_get_cpu_info() { // Flags to test CPU type. @@ -419,7 +419,7 @@ class VM_Version_StubGenerator: public StubCodeGenerator { __ movl(Address(rsi, 8), rcx); __ movl(Address(rsi,12), rdx); -#ifndef PRODUCT +#if defined(_LP64) // // Check if OS has enabled XGETBV instruction to access XCR0 // (OSXSAVE feature flag) and CPU supports APX @@ -437,26 +437,22 @@ class VM_Version_StubGenerator: public StubCodeGenerator { __ cmpl(rax, 0x80000); __ jcc(Assembler::notEqual, vector_save_restore); - /* FIXME: Uncomment while integrating JDK-8329032 bool save_apx = UseAPX; VM_Version::set_apx_cpuFeatures(); UseAPX = true; __ mov64(r16, VM_Version::egpr_test_value()); __ mov64(r31, VM_Version::egpr_test_value()); - */ __ xorl(rsi, rsi); VM_Version::set_cpuinfo_segv_addr_apx(__ pc()); // Generate SEGV __ movl(rax, Address(rsi, 0)); VM_Version::set_cpuinfo_cont_addr_apx(__ pc()); - /* FIXME: Uncomment after integration of JDK-8329032 __ lea(rsi, Address(rbp, in_bytes(VM_Version::apx_save_offset()))); __ movq(Address(rsi, 0), r16); __ movq(Address(rsi, 8), r31); UseAPX = save_apx; - */ #endif __ bind(vector_save_restore); // @@ -2170,9 +2166,11 @@ int VM_Version::avx3_threshold() { FLAG_IS_DEFAULT(AVX3Threshold)) ? 0 : AVX3Threshold; } +#if defined(_LP64) void VM_Version::clear_apx_test_state() { clear_apx_test_state_stub(); } +#endif static bool _vm_version_initialized = false; @@ -2191,8 +2189,10 @@ void VM_Version::initialize() { detect_virt_stub = CAST_TO_FN_PTR(detect_virt_stub_t, g.generate_detect_virt()); +#if defined(_LP64) clear_apx_test_state_stub = CAST_TO_FN_PTR(clear_apx_test_state_t, g.clear_apx_test_state()); +#endif get_processor_features(); LP64_ONLY(Assembler::precompute_instructions();) @@ -3183,11 +3183,17 @@ bool VM_Version::os_supports_apx_egprs() { if (!supports_apx_f()) { return false; } + // Enable APX support for product builds after + // completion of planned features listed in JDK-8329030. +#if !defined(PRODUCT) if (_cpuid_info.apx_save[0] != egpr_test_value() || _cpuid_info.apx_save[1] != egpr_test_value()) { return false; } return true; +#else + return false; +#endif } uint VM_Version::cores_per_cpu() { diff --git a/src/hotspot/cpu/x86/vm_version_x86.hpp b/src/hotspot/cpu/x86/vm_version_x86.hpp index dc5fb960060bd..d58b5a9c09967 100644 --- a/src/hotspot/cpu/x86/vm_version_x86.hpp +++ b/src/hotspot/cpu/x86/vm_version_x86.hpp @@ -635,7 +635,7 @@ class VM_Version : public Abstract_VM_Version { static void set_cpuinfo_cont_addr_apx(address pc) { _cpuinfo_cont_addr_apx = pc; } static address cpuinfo_cont_addr_apx() { return _cpuinfo_cont_addr_apx; } - static void clear_apx_test_state(); + LP64_ONLY(static void clear_apx_test_state()); static void clean_cpuFeatures() { _features = 0; } static void set_avx_cpuFeatures() { _features = (CPU_SSE | CPU_SSE2 | CPU_AVX | CPU_VZEROUPPER ); } diff --git a/src/hotspot/cpu/x86/vmreg_x86.hpp b/src/hotspot/cpu/x86/vmreg_x86.hpp index fcf288fe2ed38..7d73eadeb0464 100644 --- a/src/hotspot/cpu/x86/vmreg_x86.hpp +++ b/src/hotspot/cpu/x86/vmreg_x86.hpp @@ -28,7 +28,8 @@ #include "register_x86.hpp" inline bool is_Register() { - return (unsigned int) value() < (unsigned int) ConcreteRegisterImpl::max_gpr; + int uarch_max_gpr = Register::max_slots_per_register * Register::available_gp_registers(); + return (unsigned int) value() < (unsigned int) uarch_max_gpr; } inline bool is_FloatRegister() { diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad index 34eb990340178..1490cfa60b34f 100644 --- a/src/hotspot/cpu/x86/x86_64.ad +++ b/src/hotspot/cpu/x86/x86_64.ad @@ -128,6 +128,53 @@ reg_def R14_H(SOC, SOE, Op_RegI, 14, r14->as_VMReg()->next()); reg_def R15 (SOC, SOE, Op_RegI, 15, r15->as_VMReg()); reg_def R15_H(SOC, SOE, Op_RegI, 15, r15->as_VMReg()->next()); +reg_def R16 (SOC, SOC, Op_RegI, 16, r16->as_VMReg()); +reg_def R16_H(SOC, SOC, Op_RegI, 16, r16->as_VMReg()->next()); + +reg_def R17 (SOC, SOC, Op_RegI, 17, r17->as_VMReg()); +reg_def R17_H(SOC, SOC, Op_RegI, 17, r17->as_VMReg()->next()); + +reg_def R18 (SOC, SOC, Op_RegI, 18, r18->as_VMReg()); +reg_def R18_H(SOC, SOC, Op_RegI, 18, r18->as_VMReg()->next()); + +reg_def R19 (SOC, SOC, Op_RegI, 19, r19->as_VMReg()); +reg_def R19_H(SOC, SOC, Op_RegI, 19, r19->as_VMReg()->next()); + +reg_def R20 (SOC, SOC, Op_RegI, 20, r20->as_VMReg()); +reg_def R20_H(SOC, SOC, Op_RegI, 20, r20->as_VMReg()->next()); + +reg_def R21 (SOC, SOC, Op_RegI, 21, r21->as_VMReg()); +reg_def R21_H(SOC, SOC, Op_RegI, 21, r21->as_VMReg()->next()); + +reg_def R22 (SOC, SOC, Op_RegI, 22, r22->as_VMReg()); +reg_def R22_H(SOC, SOC, Op_RegI, 22, r22->as_VMReg()->next()); + +reg_def R23 (SOC, SOC, Op_RegI, 23, r23->as_VMReg()); +reg_def R23_H(SOC, SOC, Op_RegI, 23, r23->as_VMReg()->next()); + +reg_def R24 (SOC, SOC, Op_RegI, 24, r24->as_VMReg()); +reg_def R24_H(SOC, SOC, Op_RegI, 24, r24->as_VMReg()->next()); + +reg_def R25 (SOC, SOC, Op_RegI, 25, r25->as_VMReg()); +reg_def R25_H(SOC, SOC, Op_RegI, 25, r25->as_VMReg()->next()); + +reg_def R26 (SOC, SOC, Op_RegI, 26, r26->as_VMReg()); +reg_def R26_H(SOC, SOC, Op_RegI, 26, r26->as_VMReg()->next()); + +reg_def R27 (SOC, SOC, Op_RegI, 27, r27->as_VMReg()); +reg_def R27_H(SOC, SOC, Op_RegI, 27, r27->as_VMReg()->next()); + +reg_def R28 (SOC, SOC, Op_RegI, 28, r28->as_VMReg()); +reg_def R28_H(SOC, SOC, Op_RegI, 28, r28->as_VMReg()->next()); + +reg_def R29 (SOC, SOC, Op_RegI, 29, r29->as_VMReg()); +reg_def R29_H(SOC, SOC, Op_RegI, 29, r29->as_VMReg()->next()); + +reg_def R30 (SOC, SOC, Op_RegI, 30, r30->as_VMReg()); +reg_def R30_H(SOC, SOC, Op_RegI, 30, r30->as_VMReg()->next()); + +reg_def R31 (SOC, SOC, Op_RegI, 31, r31->as_VMReg()); +reg_def R31_H(SOC, SOC, Op_RegI, 31, r31->as_VMReg()->next()); // Floating Point Registers @@ -154,6 +201,22 @@ alloc_class chunk0(R10, R10_H, R13, R13_H, R14, R14_H, R15, R15_H, + R16, R16_H, + R17, R17_H, + R18, R18_H, + R19, R19_H, + R20, R20_H, + R21, R21_H, + R22, R22_H, + R23, R23_H, + R24, R24_H, + R25, R25_H, + R26, R26_H, + R27, R27_H, + R28, R28_H, + R29, R29_H, + R30, R30_H, + R31, R31_H, RSP, RSP_H); @@ -167,7 +230,7 @@ alloc_class chunk0(R10, R10_H, // Empty register class. reg_class no_reg(); -// Class for all pointer/long registers +// Class for all pointer/long registers including APX extended GPRs. reg_class all_reg(RAX, RAX_H, RDX, RDX_H, RBP, RBP_H, @@ -183,9 +246,25 @@ reg_class all_reg(RAX, RAX_H, R12, R12_H, R13, R13_H, R14, R14_H, - R15, R15_H); - -// Class for all int registers + R15, R15_H, + R16, R16_H, + R17, R17_H, + R18, R18_H, + R19, R19_H, + R20, R20_H, + R21, R21_H, + R22, R22_H, + R23, R23_H, + R24, R24_H, + R25, R25_H, + R26, R26_H, + R27, R27_H, + R28, R28_H, + R29, R29_H, + R30, R30_H, + R31, R31_H); + +// Class for all int registers including APX extended GPRs. reg_class all_int_reg(RAX RDX, RBP, @@ -199,7 +278,23 @@ reg_class all_int_reg(RAX R11, R12, R13, - R14); + R14, + R16, + R17, + R18, + R19, + R20, + R21, + R22, + R23, + R24, + R25, + R26, + R27, + R28, + R29, + R30, + R31); // Class for all pointer registers reg_class any_reg %{ @@ -386,6 +481,8 @@ static bool need_r12_heapbase() { } void reg_mask_init() { + constexpr Register egprs[] = {r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r30, r31}; + // _ALL_REG_mask is generated by adlc from the all_reg register class below. // We derive a number of subsets from it. _ANY_REG_mask = _ALL_REG_mask; @@ -404,6 +501,12 @@ void reg_mask_init() { _PTR_REG_mask.Remove(OptoReg::as_OptoReg(rsp->as_VMReg()->next())); _PTR_REG_mask.Remove(OptoReg::as_OptoReg(r15->as_VMReg())); _PTR_REG_mask.Remove(OptoReg::as_OptoReg(r15->as_VMReg()->next())); + if (!UseAPX) { + for (uint i = 0; i < sizeof(egprs)/sizeof(Register); i++) { + _PTR_REG_mask.Remove(OptoReg::as_OptoReg(egprs[i]->as_VMReg())); + _PTR_REG_mask.Remove(OptoReg::as_OptoReg(egprs[i]->as_VMReg()->next())); + } + } _STACK_OR_PTR_REG_mask = _PTR_REG_mask; _STACK_OR_PTR_REG_mask.OR(STACK_OR_STACK_SLOTS_mask()); @@ -420,6 +523,7 @@ void reg_mask_init() { _PTR_NO_RAX_RBX_REG_mask.Remove(OptoReg::as_OptoReg(rbx->as_VMReg())); _PTR_NO_RAX_RBX_REG_mask.Remove(OptoReg::as_OptoReg(rbx->as_VMReg()->next())); + _LONG_REG_mask = _PTR_REG_mask; _STACK_OR_LONG_REG_mask = _LONG_REG_mask; _STACK_OR_LONG_REG_mask.OR(STACK_OR_STACK_SLOTS_mask()); @@ -441,6 +545,12 @@ void reg_mask_init() { _LONG_NO_RBP_R13_REG_mask.Remove(OptoReg::as_OptoReg(r13->as_VMReg()->next())); _INT_REG_mask = _ALL_INT_REG_mask; + if (!UseAPX) { + for (uint i = 0; i < sizeof(egprs)/sizeof(Register); i++) { + _INT_REG_mask.Remove(OptoReg::as_OptoReg(egprs[i]->as_VMReg())); + } + } + if (PreserveFramePointer) { _INT_REG_mask.Remove(OptoReg::as_OptoReg(rbp->as_VMReg())); } @@ -12320,7 +12430,6 @@ instruct safePoint_poll_tls(rFlagsReg cr, rRegP poll) format %{ "testl rax, [$poll]\t" "# Safepoint: poll for GC" %} ins_cost(125); - size(4); /* setting an explicit size will cause debug builds to assert if size is incorrect */ ins_encode %{ __ relocate(relocInfo::poll_type); address pre_pc = __ pc(); diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 49f05fe94b3f5..096b52a60e2af 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -2758,7 +2758,7 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { return Handle_Exception(exceptionInfo, VM_Version::cpuinfo_cont_addr()); } -#ifndef PRODUCT +#if !defined(PRODUCT) && defined(_LP64) if ((exception_code == EXCEPTION_ACCESS_VIOLATION) && VM_Version::is_cpuinfo_segv_addr_apx(pc)) { // Verify that OS save/restore APX registers. diff --git a/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp b/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp index 17f256eadb78a..437274a2cb126 100644 --- a/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp +++ b/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp @@ -416,7 +416,7 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, stub = VM_Version::cpuinfo_cont_addr(); } -#ifndef PRODUCT +#if !defined(PRODUCT) && defined(_LP64) if ((sig == SIGSEGV || sig == SIGBUS) && VM_Version::is_cpuinfo_segv_addr_apx(pc)) { // Verify that OS save/restore APX registers. stub = VM_Version::cpuinfo_cont_addr_apx(); diff --git a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp index 35e9321a2a7af..78988dd4fd005 100644 --- a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp +++ b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp @@ -248,7 +248,7 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, stub = VM_Version::cpuinfo_cont_addr(); } -#ifndef PRODUCT +#if !defined(PRODUCT) && defined(_LP64) if ((sig == SIGSEGV) && VM_Version::is_cpuinfo_segv_addr_apx(pc)) { // Verify that OS save/restore APX registers. stub = VM_Version::cpuinfo_cont_addr_apx(); diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java index c76ec64278ada..9f3fc0cdbd6a9 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java @@ -66,49 +66,68 @@ public class AMD64 extends Architecture { public static final Register r14 = new Register(14, 14, "r14", CPU); public static final Register r15 = new Register(15, 15, "r15", CPU); + public static final Register r16 = new Register(16, 16, "r16", CPU); + public static final Register r17 = new Register(17, 17, "r17", CPU); + public static final Register r18 = new Register(18, 18, "r18", CPU); + public static final Register r19 = new Register(19, 19, "r19", CPU); + public static final Register r20 = new Register(20, 20, "r20", CPU); + public static final Register r21 = new Register(21, 21, "r21", CPU); + public static final Register r22 = new Register(22, 22, "r22", CPU); + public static final Register r23 = new Register(23, 23, "r23", CPU); + public static final Register r24 = new Register(24, 24, "r24", CPU); + public static final Register r25 = new Register(25, 25, "r25", CPU); + public static final Register r26 = new Register(26, 26, "r26", CPU); + public static final Register r27 = new Register(27, 27, "r27", CPU); + public static final Register r28 = new Register(28, 28, "r28", CPU); + public static final Register r29 = new Register(29, 29, "r29", CPU); + public static final Register r30 = new Register(30, 30, "r30", CPU); + public static final Register r31 = new Register(31, 31, "r31", CPU); + public static final Register[] cpuRegisters = { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, - r8, r9, r10, r11, r12, r13, r14, r15 + r8, r9, r10, r11, r12, r13, r14, r15, + r16, r17, r18, r19, r20, r21, r22, r23, + r24, r25, r26, r27, r28, r29, r30, r31 }; public static final RegisterCategory XMM = new RegisterCategory("XMM"); // XMM registers - public static final Register xmm0 = new Register(16, 0, "xmm0", XMM); - public static final Register xmm1 = new Register(17, 1, "xmm1", XMM); - public static final Register xmm2 = new Register(18, 2, "xmm2", XMM); - public static final Register xmm3 = new Register(19, 3, "xmm3", XMM); - public static final Register xmm4 = new Register(20, 4, "xmm4", XMM); - public static final Register xmm5 = new Register(21, 5, "xmm5", XMM); - public static final Register xmm6 = new Register(22, 6, "xmm6", XMM); - public static final Register xmm7 = new Register(23, 7, "xmm7", XMM); - - public static final Register xmm8 = new Register(24, 8, "xmm8", XMM); - public static final Register xmm9 = new Register(25, 9, "xmm9", XMM); - public static final Register xmm10 = new Register(26, 10, "xmm10", XMM); - public static final Register xmm11 = new Register(27, 11, "xmm11", XMM); - public static final Register xmm12 = new Register(28, 12, "xmm12", XMM); - public static final Register xmm13 = new Register(29, 13, "xmm13", XMM); - public static final Register xmm14 = new Register(30, 14, "xmm14", XMM); - public static final Register xmm15 = new Register(31, 15, "xmm15", XMM); - - public static final Register xmm16 = new Register(32, 16, "xmm16", XMM); - public static final Register xmm17 = new Register(33, 17, "xmm17", XMM); - public static final Register xmm18 = new Register(34, 18, "xmm18", XMM); - public static final Register xmm19 = new Register(35, 19, "xmm19", XMM); - public static final Register xmm20 = new Register(36, 20, "xmm20", XMM); - public static final Register xmm21 = new Register(37, 21, "xmm21", XMM); - public static final Register xmm22 = new Register(38, 22, "xmm22", XMM); - public static final Register xmm23 = new Register(39, 23, "xmm23", XMM); - - public static final Register xmm24 = new Register(40, 24, "xmm24", XMM); - public static final Register xmm25 = new Register(41, 25, "xmm25", XMM); - public static final Register xmm26 = new Register(42, 26, "xmm26", XMM); - public static final Register xmm27 = new Register(43, 27, "xmm27", XMM); - public static final Register xmm28 = new Register(44, 28, "xmm28", XMM); - public static final Register xmm29 = new Register(45, 29, "xmm29", XMM); - public static final Register xmm30 = new Register(46, 30, "xmm30", XMM); - public static final Register xmm31 = new Register(47, 31, "xmm31", XMM); + public static final Register xmm0 = new Register(32, 0, "xmm0", XMM); + public static final Register xmm1 = new Register(33, 1, "xmm1", XMM); + public static final Register xmm2 = new Register(34, 2, "xmm2", XMM); + public static final Register xmm3 = new Register(35, 3, "xmm3", XMM); + public static final Register xmm4 = new Register(36, 4, "xmm4", XMM); + public static final Register xmm5 = new Register(37, 5, "xmm5", XMM); + public static final Register xmm6 = new Register(38, 6, "xmm6", XMM); + public static final Register xmm7 = new Register(39, 7, "xmm7", XMM); + + public static final Register xmm8 = new Register(40, 8, "xmm8", XMM); + public static final Register xmm9 = new Register(41, 9, "xmm9", XMM); + public static final Register xmm10 = new Register(42, 10, "xmm10", XMM); + public static final Register xmm11 = new Register(43, 11, "xmm11", XMM); + public static final Register xmm12 = new Register(44, 12, "xmm12", XMM); + public static final Register xmm13 = new Register(45, 13, "xmm13", XMM); + public static final Register xmm14 = new Register(46, 14, "xmm14", XMM); + public static final Register xmm15 = new Register(47, 15, "xmm15", XMM); + + public static final Register xmm16 = new Register(48, 16, "xmm16", XMM); + public static final Register xmm17 = new Register(49, 17, "xmm17", XMM); + public static final Register xmm18 = new Register(50, 18, "xmm18", XMM); + public static final Register xmm19 = new Register(51, 19, "xmm19", XMM); + public static final Register xmm20 = new Register(52, 20, "xmm20", XMM); + public static final Register xmm21 = new Register(53, 21, "xmm21", XMM); + public static final Register xmm22 = new Register(54, 22, "xmm22", XMM); + public static final Register xmm23 = new Register(55, 23, "xmm23", XMM); + + public static final Register xmm24 = new Register(56, 24, "xmm24", XMM); + public static final Register xmm25 = new Register(57, 25, "xmm25", XMM); + public static final Register xmm26 = new Register(58, 26, "xmm26", XMM); + public static final Register xmm27 = new Register(59, 27, "xmm27", XMM); + public static final Register xmm28 = new Register(60, 28, "xmm28", XMM); + public static final Register xmm29 = new Register(61, 29, "xmm29", XMM); + public static final Register xmm30 = new Register(62, 30, "xmm30", XMM); + public static final Register xmm31 = new Register(63, 31, "xmm31", XMM); public static final Register[] xmmRegistersSSE = { xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, @@ -124,14 +143,14 @@ public class AMD64 extends Architecture { public static final RegisterCategory MASK = new RegisterCategory("MASK", false); - public static final Register k0 = new Register(48, 0, "k0", MASK); - public static final Register k1 = new Register(49, 1, "k1", MASK); - public static final Register k2 = new Register(50, 2, "k2", MASK); - public static final Register k3 = new Register(51, 3, "k3", MASK); - public static final Register k4 = new Register(52, 4, "k4", MASK); - public static final Register k5 = new Register(53, 5, "k5", MASK); - public static final Register k6 = new Register(54, 6, "k6", MASK); - public static final Register k7 = new Register(55, 7, "k7", MASK); + public static final Register k0 = new Register(64, 0, "k0", MASK); + public static final Register k1 = new Register(65, 1, "k1", MASK); + public static final Register k2 = new Register(66, 2, "k2", MASK); + public static final Register k3 = new Register(67, 3, "k3", MASK); + public static final Register k4 = new Register(68, 4, "k4", MASK); + public static final Register k5 = new Register(69, 5, "k5", MASK); + public static final Register k6 = new Register(70, 6, "k6", MASK); + public static final Register k7 = new Register(71, 7, "k7", MASK); public static final RegisterArray valueRegistersSSE = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, @@ -143,6 +162,8 @@ public class AMD64 extends Architecture { public static final RegisterArray valueRegistersAVX512 = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15, + r16, r17, r18, r19, r20, r21, r22, r23, + r24, r25, r26, r27, r28, r29, r30, r31, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23, @@ -153,7 +174,7 @@ public class AMD64 extends Architecture { /** * Register used to construct an instruction-relative address. */ - public static final Register rip = new Register(56, -1, "rip", SPECIAL); + public static final Register rip = new Register(72, -1, "rip", SPECIAL); public static final RegisterArray allRegisters = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, From 880e458a1072589ae199cc9204dcce9eab0f4eaa Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 21 Jun 2024 00:24:55 +0000 Subject: [PATCH 063/102] 8333819: Move embedded external addresses from relocation info into separate global table Reviewed-by: dlong --- src/hotspot/share/code/nmethod.cpp | 1 + src/hotspot/share/code/nmethod.hpp | 1 + src/hotspot/share/code/oopRecorder.cpp | 46 ++++++++++++++++++++++- src/hotspot/share/code/oopRecorder.hpp | 27 ++++++++++--- src/hotspot/share/code/relocInfo.cpp | 20 ++-------- src/hotspot/share/runtime/init.cpp | 4 +- src/hotspot/share/runtime/mutexLocker.cpp | 5 +++ src/hotspot/share/runtime/mutexLocker.hpp | 2 + 8 files changed, 82 insertions(+), 24 deletions(-) diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index 7f91f69c9e38b..2f4999dc4e366 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -3996,6 +3996,7 @@ void nmethod::print_statistics() { DebugInformationRecorder::print_statistics(); pc_nmethod_stats.print_pc_stats(); Dependencies::print_statistics(); + ExternalsRecorder::print_statistics(); if (xtty != nullptr) xtty->tail("statistics"); } diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index e3ac422ca7093..ee0fe00433149 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -705,6 +705,7 @@ class nmethod : public CodeBlob { void copy_values(GrowableArray* oops); void copy_values(GrowableArray* metadata); + void copy_values(GrowableArray
    * metadata) {} // Nothing to do // Relocation support private: diff --git a/src/hotspot/share/code/oopRecorder.cpp b/src/hotspot/share/code/oopRecorder.cpp index bfcb4bad47597..b8ecc1eccc0d1 100644 --- a/src/hotspot/share/code/oopRecorder.cpp +++ b/src/hotspot/share/code/oopRecorder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,6 +31,7 @@ #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/jniHandles.inline.hpp" +#include "runtime/mutexLocker.hpp" #include "utilities/copy.hpp" #ifdef ASSERT @@ -211,3 +212,46 @@ OopRecorder::OopRecorder(Arena* arena, bool deduplicate): _oops(arena), _metadat _object_lookup = nullptr; } } + +// Explicitly instantiate +template class ValueRecorder
    ; + +ExternalsRecorder* ExternalsRecorder::_recorder = nullptr; + +ExternalsRecorder::ExternalsRecorder(): _arena(mtCode), _externals(&_arena) {} + +void ExternalsRecorder_init() { + ExternalsRecorder::initialize(); +} + +void ExternalsRecorder::initialize() { + // After Mutex and before CodeCache are initialized + assert(_recorder == nullptr, "should initialize only once"); + _recorder = new ExternalsRecorder(); +} + +int ExternalsRecorder::find_index(address adr) { + MutexLocker ml(ExternalsRecorder_lock, Mutex::_no_safepoint_check_flag); + assert(_recorder != nullptr, "sanity"); + return _recorder->_externals.find_index(adr); +} + +address ExternalsRecorder::at(int index) { + // find_index() may resize array by reallocating it and freeing old, + // we need loock here to make sure we not accessing to old freed array. + MutexLocker ml(ExternalsRecorder_lock, Mutex::_no_safepoint_check_flag); + assert(_recorder != nullptr, "sanity"); + return _recorder->_externals.at(index); +} + +int ExternalsRecorder::count() { + MutexLocker ml(ExternalsRecorder_lock, Mutex::_no_safepoint_check_flag); + assert(_recorder != nullptr, "sanity"); + return _recorder->_externals.count(); +} + +#ifndef PRODUCT +void ExternalsRecorder::print_statistics() { + tty->print_cr("External addresses table: %d entries", count()); +} +#endif diff --git a/src/hotspot/share/code/oopRecorder.hpp b/src/hotspot/share/code/oopRecorder.hpp index 41d2c0da5914d..7eded5410e334 100644 --- a/src/hotspot/share/code/oopRecorder.hpp +++ b/src/hotspot/share/code/oopRecorder.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,10 +133,10 @@ template class ValueRecorder : public StackObj { enum { null_index = 0, first_index = 1, index_cache_threshold = 20 }; GrowableArray* _handles; // ordered list (first is always nullptr) - GrowableArray* _no_finds; // all unfindable indexes; usually empty + GrowableArray* _no_finds; // all unfindable indexes; usually empty IndexCache* _indexes; // map: handle -> its probable index - Arena* _arena; - bool _complete; + Arena* _arena; + bool _complete; #ifdef ASSERT static int _find_index_calls, _hit_indexes, _missed_indexes; @@ -186,7 +186,7 @@ class OopRecorder : public ResourceObj { int allocate_oop_index(jobject h) { return _oops.allocate_index(h); } - virtual int find_index(jobject h) { + int find_index(jobject h) { return _object_lookup != nullptr ? _object_lookup->find_index(h, this) : _oops.find_index(h); } jobject oop_at(int index) { @@ -203,7 +203,7 @@ class OopRecorder : public ResourceObj { int allocate_metadata_index(Metadata* oop) { return _metadata.allocate_index(oop); } - virtual int find_index(Metadata* h) { + int find_index(Metadata* h) { return _metadata.find_index(h); } Metadata* metadata_at(int index) { @@ -243,5 +243,20 @@ class OopRecorder : public ResourceObj { #endif }; +// Class is used to record and retrive external addresses +// for Relocation info in compiled code and stubs. +class ExternalsRecorder : public CHeapObj { + private: + Arena _arena; + ValueRecorder
    _externals; + static ExternalsRecorder* _recorder; + ExternalsRecorder(); + public: + static void initialize(); + static int find_index(address adr); + static address at(int index); + static int count(); + static void print_statistics() PRODUCT_RETURN; +}; #endif // SHARE_CODE_OOPRECORDER_HPP diff --git a/src/hotspot/share/code/relocInfo.cpp b/src/hotspot/share/code/relocInfo.cpp index 5527436413cee..3b19b63f24469 100644 --- a/src/hotspot/share/code/relocInfo.cpp +++ b/src/hotspot/share/code/relocInfo.cpp @@ -454,27 +454,15 @@ void trampoline_stub_Relocation::unpack_data() { void external_word_Relocation::pack_data_to(CodeSection* dest) { short* p = (short*) dest->locs_end(); -#ifndef _LP64 - p = pack_1_int_to(p, (int32_t) (intptr_t)_target); -#else - jlong t = (jlong) _target; - int32_t lo = low(t); - int32_t hi = high(t); - p = pack_2_ints_to(p, lo, hi); -#endif /* _LP64 */ + int index = ExternalsRecorder::find_index(_target); + p = pack_1_int_to(p, index); dest->set_locs_end((relocInfo*) p); } void external_word_Relocation::unpack_data() { -#ifndef _LP64 - _target = (address) (intptr_t)unpack_1_int(); -#else - jint lo, hi; - unpack_2_ints(lo, hi); - jlong t = jlong_from(hi, lo);; - _target = (address) t; -#endif /* _LP64 */ + int index = unpack_1_int(); + _target = ExternalsRecorder::at(index); } diff --git a/src/hotspot/share/runtime/init.cpp b/src/hotspot/share/runtime/init.cpp index d37ae99b41886..368f4e62c7692 100644 --- a/src/hotspot/share/runtime/init.cpp +++ b/src/hotspot/share/runtime/init.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -57,6 +57,7 @@ void mutex_init(); void universe_oopstorage_init(); void perfMemory_init(); void SuspendibleThreadSet_init(); +void ExternalsRecorder_init(); // After mutex_init() and before CodeCache_init // Initialization done by Java thread in init_globals() void management_init(); @@ -107,6 +108,7 @@ void vm_init_globals() { universe_oopstorage_init(); perfMemory_init(); SuspendibleThreadSet_init(); + ExternalsRecorder_init(); // After mutex_init() and before CodeCache_init } diff --git a/src/hotspot/share/runtime/mutexLocker.cpp b/src/hotspot/share/runtime/mutexLocker.cpp index 2587375c52e68..add47738db0bc 100644 --- a/src/hotspot/share/runtime/mutexLocker.cpp +++ b/src/hotspot/share/runtime/mutexLocker.cpp @@ -123,6 +123,8 @@ Monitor* JfrThreadSampler_lock = nullptr; Mutex* CodeHeapStateAnalytics_lock = nullptr; +Mutex* ExternalsRecorder_lock = nullptr; + Monitor* ContinuationRelativize_lock = nullptr; Mutex* Metaspace_lock = nullptr; @@ -328,6 +330,9 @@ void mutex_init() { MUTEX_DEFL(CodeCache_lock , PaddedMonitor, VtableStubs_lock); MUTEX_DEFL(NMethodState_lock , PaddedMutex , CodeCache_lock); + // tty_lock is held when printing nmethod and its relocations which use this lock. + MUTEX_DEFL(ExternalsRecorder_lock , PaddedMutex , tty_lock); + MUTEX_DEFL(Threads_lock , PaddedMonitor, CompileThread_lock, true); MUTEX_DEFL(Compile_lock , PaddedMutex , MethodCompileQueue_lock); MUTEX_DEFL(Heap_lock , PaddedMonitor, AdapterHandlerLibrary_lock); diff --git a/src/hotspot/share/runtime/mutexLocker.hpp b/src/hotspot/share/runtime/mutexLocker.hpp index 91310364b8f0b..160e6c97db07f 100644 --- a/src/hotspot/share/runtime/mutexLocker.hpp +++ b/src/hotspot/share/runtime/mutexLocker.hpp @@ -142,6 +142,8 @@ extern Mutex* ClassLoaderDataGraph_lock; // protects CLDG list, needed f extern Mutex* CodeHeapStateAnalytics_lock; // lock print functions against concurrent analyze functions. // Only used locally in PrintCodeCacheLayout processing. +extern Mutex* ExternalsRecorder_lock; // used to guard access to the external addresses table + extern Monitor* ContinuationRelativize_lock; #if INCLUDE_JVMCI From 6a5cb0b2c49cb390ce8b87fd977ee79572df90fc Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Fri, 21 Jun 2024 07:04:26 +0000 Subject: [PATCH 064/102] 8334567: [test] runtime/os/TestTracePageSizes move ppc handling Reviewed-by: stuefe, lucy --- .../jtreg/runtime/os/TestTracePageSizes.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java b/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java index a94d9af4c27a5..e6fe18dce302a 100644 --- a/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java +++ b/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ * @library /test/lib * @build jdk.test.lib.Platform * @requires os.family == "linux" + * @requires os.arch != "ppc64le" * @run main/othervm -XX:+AlwaysPreTouch -Xlog:pagesize:ps-%p.log TestTracePageSizes */ @@ -51,6 +52,7 @@ * @library /test/lib * @build jdk.test.lib.Platform * @requires os.family == "linux" + * @requires os.arch != "ppc64le" * @requires vm.gc != "Z" & vm.gc != "Shenandoah" * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:-SegmentedCodeCache TestTracePageSizes * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:-SegmentedCodeCache -XX:+UseLargePages TestTracePageSizes @@ -63,6 +65,7 @@ * @library /test/lib * @build jdk.test.lib.Platform * @requires os.family == "linux" + * @requires os.arch != "ppc64le" * @requires vm.gc.G1 * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:+UseG1GC TestTracePageSizes * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:+UseG1GC -XX:+UseLargePages TestTracePageSizes @@ -75,6 +78,7 @@ * @library /test/lib * @build jdk.test.lib.Platform * @requires os.family == "linux" + * @requires os.arch != "ppc64le" * @requires vm.gc.Parallel * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:+UseParallelGC TestTracePageSizes * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:+UseParallelGC -XX:+UseLargePages TestTracePageSizes @@ -87,6 +91,7 @@ * @library /test/lib * @build jdk.test.lib.Platform * @requires os.family == "linux" + * @requires os.arch != "ppc64le" * @requires vm.gc.Serial * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:+UseSerialGC TestTracePageSizes * @run main/othervm -XX:+AlwaysPreTouch -Xmx128m -Xlog:pagesize:ps-%p.log -XX:+UseSerialGC -XX:+UseLargePages TestTracePageSizes @@ -261,12 +266,6 @@ public static void main(String args[]) throws Exception { throw new SkippedException("Kernel older than 3.8 - skipping this test."); } - // For similar reasons, we skip the test on ppc platforms, since there the smaps - // format may follow a different logic. - if (Platform.isPPC()) { - throw new SkippedException("PPC - skipping this test."); - } - // Parse /proc/self/smaps to compare with values logged in the VM. parseSmaps(); From bdd96604ae55ba0cd3cd3363e2ba44205d8aa3aa Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Fri, 21 Jun 2024 07:36:02 +0000 Subject: [PATCH 065/102] 8323196: jdk/jfr/api/consumer/filestream/TestOrdered.java failed with "Events are not ordered! Reuse = false" Reviewed-by: mgronlun --- .../api/consumer/filestream/TestOrdered.java | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java b/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java index 8edb74b847ae1..58f23350dd07e 100644 --- a/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java +++ b/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import jdk.jfr.Event; @@ -143,28 +144,43 @@ private static void printTimestamp(Instant timestamp) { } private static Path makeUnorderedRecording() throws Exception { - CyclicBarrier barrier = new CyclicBarrier(THREAD_COUNT + 1); - - try (Recording r = new Recording()) { - r.start(); - List emitters = new ArrayList<>(); - for (int i = 0; i < THREAD_COUNT; i++) { - Emitter e = new Emitter(barrier); - e.start(); - emitters.add(e); - } - // Thread buffers should now have one event each - barrier.await(); - // Add another event to each thread buffer, so - // events are bound to come out of order when they - // are flushed - for (Emitter e : emitters) { - e.join(); + while (true) { + CyclicBarrier barrier = new CyclicBarrier(THREAD_COUNT + 1); + try (Recording r = new Recording()) { + r.start(); + List emitters = new ArrayList<>(); + for (int i = 0; i < THREAD_COUNT; i++) { + Emitter e = new Emitter(barrier); + e.start(); + emitters.add(e); + } + // Thread buffers should now have one event each + barrier.await(); + // Add another event to each thread buffer, so + // events are bound to come out of order when they + // are flushed + for (Emitter e : emitters) { + e.join(); + } + r.stop(); + Path p = Utils.createTempFile("recording", ".jfr"); + r.dump(p); + // Order is only guaranteed within a segment. + int segments = countSegments(p); + if (segments < 2) { + return p; + } + System.out.println("File contains more than one segment (" + segments + "). Retrying."); } - r.stop(); - Path p = Utils.createTempFile("recording", ".jfr"); - r.dump(p); - return p; + } + } + + private static int countSegments(Path file) throws Exception { + AtomicInteger segments = new AtomicInteger(); + try (EventStream es = EventStream.openFile(file)) { + es.onFlush(segments::incrementAndGet); + es.start(); + return segments.get(); } } } From ed149062d0e8407710f083aa85d28d27c4a45ecc Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Fri, 21 Jun 2024 08:38:42 +0000 Subject: [PATCH 066/102] 8333361: ubsan,test : libHeapMonitorTest.cpp:518:9: runtime error: null pointer passed as argument 2, which is declared to never be null Reviewed-by: asteiner, lucy, amenkov --- .../serviceability/jvmti/HeapMonitor/libHeapMonitorTest.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/libHeapMonitorTest.cpp b/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/libHeapMonitorTest.cpp index 035aaef827e34..b70f4834f23d2 100644 --- a/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/libHeapMonitorTest.cpp +++ b/test/hotspot/jtreg/serviceability/jvmti/HeapMonitor/libHeapMonitorTest.cpp @@ -515,7 +515,9 @@ static void event_storage_augment_storage(EventStorage* storage) { ObjectTrace** new_objects = reinterpret_cast(malloc(new_max * sizeof(*new_objects))); int current_count = storage->live_object_count; - memcpy(new_objects, storage->live_objects, current_count * sizeof(*new_objects)); + if (storage->live_objects != nullptr) { + memcpy(new_objects, storage->live_objects, current_count * sizeof(*new_objects)); + } free(storage->live_objects); storage->live_objects = new_objects; storage->live_object_size = new_max; From d2bebffb1fd26fae4526afd33a818ee776b7102e Mon Sep 17 00:00:00 2001 From: Daniel Fuchs Date: Fri, 21 Jun 2024 09:43:49 +0000 Subject: [PATCH 067/102] 8327370: (ch) sun.nio.ch.Poller.register throws AssertionError Co-authored-by: Alan Bateman Reviewed-by: alanb, jpai, djelinski --- src/java.base/share/classes/sun/nio/ch/Poller.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/sun/nio/ch/Poller.java b/src/java.base/share/classes/sun/nio/ch/Poller.java index a24b0cf924a23..9d3a0e7d32c76 100644 --- a/src/java.base/share/classes/sun/nio/ch/Poller.java +++ b/src/java.base/share/classes/sun/nio/ch/Poller.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -190,7 +190,12 @@ private void poll(int fdVal, long nanos, BooleanSupplier supplier) throws IOExce private void register(int fdVal) throws IOException { Thread previous = map.put(fdVal, Thread.currentThread()); assert previous == null; - implRegister(fdVal); + try { + implRegister(fdVal); + } catch (Throwable t) { + map.remove(fdVal); + throw t; + } } /** From 711e7238196a4ef9211ed4cca15c7c1d774df019 Mon Sep 17 00:00:00 2001 From: Tejesh R Date: Fri, 21 Jun 2024 10:36:05 +0000 Subject: [PATCH 068/102] 6967482: TAB-key does not work in JTables after selecting details-view in JFileChooser 8166352: FilePane.createDetailsView() removes JTable TAB, SHIFT-TAB functionality Reviewed-by: achung, prr --- .../share/classes/sun/swing/FilePane.java | 7 - .../swing/JFileChooser/TABTestONFCExit.java | 167 ++++++++++++++++++ 2 files changed, 167 insertions(+), 7 deletions(-) create mode 100644 test/jdk/javax/swing/JFileChooser/TABTestONFCExit.java diff --git a/src/java.desktop/share/classes/sun/swing/FilePane.java b/src/java.desktop/share/classes/sun/swing/FilePane.java index ffefbb60416bd..e97dcb3b88185 100644 --- a/src/java.desktop/share/classes/sun/swing/FilePane.java +++ b/src/java.desktop/share/classes/sun/swing/FilePane.java @@ -1317,13 +1317,6 @@ public void tableChanged(TableModelEvent e) { detailsTable.addFocusListener(repaintListener); } - // TAB/SHIFT-TAB should transfer focus and ENTER should select an item. - // We don't want them to navigate within the table - ActionMap am = SwingUtilities.getUIActionMap(detailsTable); - am.remove("selectNextRowCell"); - am.remove("selectPreviousRowCell"); - am.remove("selectNextColumnCell"); - am.remove("selectPreviousColumnCell"); detailsTable.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null); detailsTable.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, diff --git a/test/jdk/javax/swing/JFileChooser/TABTestONFCExit.java b/test/jdk/javax/swing/JFileChooser/TABTestONFCExit.java new file mode 100644 index 0000000000000..16fcc9d12080b --- /dev/null +++ b/test/jdk/javax/swing/JFileChooser/TABTestONFCExit.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Point; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; + +import javax.swing.AbstractButton; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JTable; +import javax.swing.JToggleButton; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; +import javax.swing.UIManager; +import javax.swing.table.DefaultTableModel; + +import java.util.function.Predicate; + +/* + * @test + * @bug 6967482 + * @key headful + * @summary Test to check if TAB is working on JTable after JFileChooser is + * closed + * @run main TABTestONFCExit + */ + +public class TABTestONFCExit { + private static JTable table; + private static JFileChooser fc; + private static JFrame frame; + private static Robot robot; + private static volatile Point loc; + private static volatile Rectangle rect; + private static volatile int selectedColumnBeforeTabPress; + private static volatile int selectedColumnAfterTabPress; + + public static void main(String[] args) throws Exception { + robot = new Robot(); + robot.setAutoDelay(50); + UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); + try { + SwingUtilities.invokeAndWait(TABTestONFCExit::initialize); + robot.waitForIdle(); + robot.delay(100); + + SwingUtilities.invokeAndWait(TABTestONFCExit::clickDetails); + robot.waitForIdle(); + robot.delay(100); + + SwingUtilities.invokeAndWait(() -> { + loc = table.getLocationOnScreen(); + rect = table.getCellRect(0, 0, true); + }); + + onClick(loc, rect); + + SwingUtilities.invokeAndWait(() -> + selectedColumnBeforeTabPress = table.getSelectedColumn()); + + robot.keyPress(KeyEvent.VK_TAB); + robot.keyRelease(KeyEvent.VK_TAB); + robot.waitForIdle(); + robot.delay(100); + + SwingUtilities.invokeAndWait(() -> + selectedColumnAfterTabPress = table.getSelectedColumn()); + robot.waitForIdle(); + robot.delay(100); + + if (selectedColumnAfterTabPress == selectedColumnBeforeTabPress) { + throw new RuntimeException("TAB failed to move cell!"); + } + System.out.println("Test Passed" ); + + } finally { + SwingUtilities.invokeAndWait(() -> { + if (frame != null) { + frame.dispose(); + } + }); + } + } + + private static void onClick(Point loc, Rectangle cellRect) { + robot.mouseMove(loc.x + cellRect.x + cellRect.width / 2, + loc.y + cellRect.y + cellRect.height / 2); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + robot.waitForIdle(); + robot.delay(100); + } + + private static void initialize() { + frame = new JFrame("Tab Test"); + fc = new JFileChooser(); + frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + frame.add(getJTable(), BorderLayout.NORTH); + frame.add(fc, BorderLayout.SOUTH); + frame.pack(); + frame.setVisible(true); + } + + private static JTable getJTable() { + if (table == null) { + table = new JTable(); + table.setModel(new DefaultTableModel(5, 5)); + } + return table; + } + private static void clickDetails() { + AbstractButton details = findDetailsButton(fc); + if (details == null) { + throw new Error("Couldn't find 'Details' button in JFileChooser"); + } + details.doClick(); + } + + private static AbstractButton findDetailsButton(final Container container) { + Component result = findComponent(container, + c -> c instanceof JToggleButton button + && "Details".equals(button.getToolTipText())); + return (AbstractButton) result; + } + + private static Component findComponent(final Container container, + final Predicate predicate) { + for (Component child : container.getComponents()) { + if (predicate.test(child)) { + return child; + } + if (child instanceof Container cont && cont.getComponentCount() > 0) { + Component result = findComponent(cont, predicate); + if (result != null) { + return result; + } + } + } + return null; + } +} From 08ace27da1d9cd215c77471eabf41417ff6282d2 Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Fri, 21 Jun 2024 10:44:51 +0000 Subject: [PATCH 069/102] 8332314: Add window size configuration option to JavaShellToolBuilder interface Reviewed-by: jlahoda --- .../jshell/tool/ConsoleIOContext.java | 12 +++++------ .../jdk/internal/jshell/tool/JShellTool.java | 8 ++++++-- .../jshell/tool/JShellToolBuilder.java | 16 +++++++++++++-- .../jdk/jshell/tool/JavaShellToolBuilder.java | 20 ++++++++++++++++++- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java index 2812dc19695da..a2b1ca0d2d058 100644 --- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/ConsoleIOContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -121,7 +121,7 @@ class ConsoleIOContext extends IOContext { String prefix = ""; ConsoleIOContext(JShellTool repl, InputStream cmdin, PrintStream cmdout, - boolean interactive) throws Exception { + boolean interactive, Size size) throws Exception { this.repl = repl; Map variables = new HashMap<>(); this.input = new StopDetectingInputStream(() -> repl.stop(), @@ -143,7 +143,6 @@ public int readBuffered(byte[] b) throws IOException { terminal = new TestTerminal(nonBlockingInput, cmdout); enableHighlighter = Boolean.getBoolean("test.enable.highlighter"); } else { - Size size = null; terminal = new ProgrammaticInTerminal(nonBlockingInput, cmdout, interactive, size); if (!interactive) { @@ -1312,6 +1311,7 @@ private History getHistory() { private static class ProgrammaticInTerminal extends LineDisciplineTerminal { + protected static final int DEFAULT_WIDTH = 80; protected static final int DEFAULT_HEIGHT = 24; private final NonBlockingReader inputReader; @@ -1320,9 +1320,9 @@ private static class ProgrammaticInTerminal extends LineDisciplineTerminal { public ProgrammaticInTerminal(InputStream input, OutputStream output, boolean interactive, Size size) throws Exception { this(input, output, interactive ? "ansi" : "dumb", - size != null ? size : new Size(80, DEFAULT_HEIGHT), + size != null ? size : new Size(DEFAULT_WIDTH, DEFAULT_HEIGHT), size != null ? size - : interactive ? new Size(80, DEFAULT_HEIGHT) + : interactive ? new Size(DEFAULT_WIDTH, DEFAULT_HEIGHT) : new Size(Integer.MAX_VALUE - 1, DEFAULT_HEIGHT)); } @@ -1366,7 +1366,7 @@ private static Size computeSize() { } catch (Throwable ex) { // ignore } - return new Size(80, h); + return new Size(DEFAULT_WIDTH, h); } public TestTerminal(InputStream input, OutputStream output) throws Exception { this(input, output, computeSize()); diff --git a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java index 0e9b3bf8bfb00..2d06ffc529d45 100644 --- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java @@ -80,6 +80,7 @@ import jdk.internal.jshell.debug.InternalDebugControl; import jdk.internal.jshell.tool.IOContext.InputInterruptedException; +import jdk.internal.org.jline.terminal.Size; import jdk.jshell.DeclarationSnippet; import jdk.jshell.Diag; import jdk.jshell.EvalException; @@ -166,6 +167,7 @@ public class JShellTool implements MessageHandler { final Map envvars; final Locale locale; final boolean interactiveTerminal; + final Size windowSize; final Feedback feedback = new Feedback(); @@ -181,12 +183,13 @@ public class JShellTool implements MessageHandler { * @param prefs persistence implementation to use * @param envvars environment variable mapping to use * @param locale locale to use + * @param windowSize window size hint, or null */ JShellTool(InputStream cmdin, PrintStream cmdout, PrintStream cmderr, PrintStream console, InputStream userin, PrintStream userout, PrintStream usererr, PersistentStorage prefs, Map envvars, Locale locale, - boolean interactiveTerminal) { + boolean interactiveTerminal, Size windowSize) { this.cmdin = cmdin; this.cmdout = cmdout; this.cmderr = cmderr; @@ -203,6 +206,7 @@ public int read() throws IOException { this.envvars = envvars; this.locale = locale; this.interactiveTerminal = interactiveTerminal; + this.windowSize = windowSize; } private ResourceBundle versionRB = null; @@ -998,7 +1002,7 @@ public void run() { }; Runtime.getRuntime().addShutdownHook(shutdownHook); // execute from user input - try (IOContext in = new ConsoleIOContext(this, cmdin, console, interactiveTerminal)) { + try (IOContext in = new ConsoleIOContext(this, cmdin, console, interactiveTerminal, windowSize)) { int indent; try { String indentValue = indent(); diff --git a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellToolBuilder.java b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellToolBuilder.java index 52e042d365a02..8c787a6c294d8 100644 --- a/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellToolBuilder.java +++ b/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellToolBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,7 @@ import java.util.Set; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; +import jdk.internal.org.jline.terminal.Size; import jdk.jshell.tool.JavaShellToolBuilder; /** @@ -53,6 +54,7 @@ public class JShellToolBuilder implements JavaShellToolBuilder { private Locale locale = Locale.getDefault(); private boolean interactiveTerminal; private boolean capturePrompt = false; + private Size windowSize = null; /** * Set the input channels. @@ -215,6 +217,16 @@ public JavaShellToolBuilder interactiveTerminal(boolean terminal) { return this; } + @Override + public JavaShellToolBuilder windowSize(int columns, int rows) { + if (columns <= 0) + throw new IllegalArgumentException("columns = " + columns); + if (rows <= 0) + throw new IllegalArgumentException("rows = " + rows); + this.windowSize = new Size(columns, rows); + return this; + } + /** * Create a tool instance for testing. Not in JavaShellToolBuilder. * @@ -228,7 +240,7 @@ public JShellTool rawTool() { vars = System.getenv(); } JShellTool sh = new JShellTool(cmdIn, cmdOut, cmdErr, console, userIn, - userOut, userErr, prefs, vars, locale, interactiveTerminal); + userOut, userErr, prefs, vars, locale, interactiveTerminal, windowSize); sh.testPrompt = capturePrompt; return sh; } diff --git a/src/jdk.jshell/share/classes/jdk/jshell/tool/JavaShellToolBuilder.java b/src/jdk.jshell/share/classes/jdk/jshell/tool/JavaShellToolBuilder.java index c4b4bf66b336a..06dd4d8ce1c62 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/tool/JavaShellToolBuilder.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/tool/JavaShellToolBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -209,6 +209,24 @@ default JavaShellToolBuilder interactiveTerminal(boolean terminal) { return this; } + /** + * Provide a hint of the display window's dimensions when using an interactive terminal. + * + *

    + * When the input stream for this Java Shell is {@code System.in}, this setting is ignored. + * + * @implSpec Implementations may choose to ignore this method. The default implementation + * of this method returns {@code this}. + * + * @param columns number of displayed columns + * @param rows number of displayed rows + * @return the {@code JavaShellToolBuilder} instance + * @since 24 + */ + default JavaShellToolBuilder windowSize(int columns, int rows) { + return this; + } + /** * Run an instance of the Java shell tool as configured by the other methods * in this interface. This call is not destructive, more than one call of From dbf5a9a4006020ddebcce89692ce8826b6b2db46 Mon Sep 17 00:00:00 2001 From: Doug Simon Date: Fri, 21 Jun 2024 13:43:03 +0000 Subject: [PATCH 070/102] 8334706: [JVMCI] APX registers incorrectly exposed on AMD64 Reviewed-by: yzheng, never --- .../share/classes/jdk/vm/ci/amd64/AMD64.java | 9 ++++----- .../share/classes/jdk/vm/ci/code/Architecture.java | 8 ++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java index 9f3fc0cdbd6a9..83401fed62033 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/amd64/AMD64.java @@ -83,11 +83,10 @@ public class AMD64 extends Architecture { public static final Register r30 = new Register(30, 30, "r30", CPU); public static final Register r31 = new Register(31, 31, "r31", CPU); + // The set of common CPU registers available on all x64 platforms. public static final Register[] cpuRegisters = { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, - r8, r9, r10, r11, r12, r13, r14, r15, - r16, r17, r18, r19, r20, r21, r22, r23, - r24, r25, r26, r27, r28, r29, r30, r31 + r8, r9, r10, r11, r12, r13, r14, r15 }; public static final RegisterCategory XMM = new RegisterCategory("XMM"); @@ -162,8 +161,6 @@ public class AMD64 extends Architecture { public static final RegisterArray valueRegistersAVX512 = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15, - r16, r17, r18, r19, r20, r21, r22, r23, - r24, r25, r26, r27, r28, r29, r30, r31, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23, @@ -179,6 +176,8 @@ public class AMD64 extends Architecture { public static final RegisterArray allRegisters = new RegisterArray( rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15, + r16, r17, r18, r19, r20, r21, r22, r23, + r24, r25, r26, r27, r28, r29, r30, r31, xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, xmm16, xmm17, xmm18, xmm19, xmm20, xmm21, xmm22, xmm23, diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java index 0b00628aceaf3..f14855cd6b995 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/code/Architecture.java @@ -26,6 +26,7 @@ import java.util.Set; import jdk.vm.ci.code.Register.RegisterCategory; +import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.meta.JavaKind; import jdk.vm.ci.meta.PlatformKind; @@ -81,6 +82,13 @@ public abstract class Architecture { protected Architecture(String name, PlatformKind wordKind, ByteOrder byteOrder, boolean unalignedMemoryAccess, RegisterArray registers, int implicitMemoryBarriers, int nativeCallDisplacementOffset, int returnAddressSize) { + // registers is expected to mention all registers in order of their encoding. + for (int i = 0; i < registers.size(); ++i) { + if (registers.get(i).number != i) { + Register reg = registers.get(i); + throw new JVMCIError("%s: %d != %d", reg, reg.number, i); + } + } this.name = name; this.registers = registers; this.wordKind = wordKind; From 9f8de221d7f0186718411ab3f5217e3883237e84 Mon Sep 17 00:00:00 2001 From: Kevin Walls Date: Fri, 21 Jun 2024 13:51:06 +0000 Subject: [PATCH 071/102] 8327793: Deprecate jstatd for removal Reviewed-by: alanb, cjplummer --- src/jdk.jstatd/share/classes/module-info.java | 3 ++- src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java | 4 +++- test/jdk/sun/tools/jstatd/JstatdTest.java | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/jdk.jstatd/share/classes/module-info.java b/src/jdk.jstatd/share/classes/module-info.java index ade59da4248cd..e9a9521ac73fc 100644 --- a/src/jdk.jstatd/share/classes/module-info.java +++ b/src/jdk.jstatd/share/classes/module-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,7 @@ * @moduleGraph * @since 9 */ +@Deprecated(since="24", forRemoval=true) module jdk.jstatd { requires java.rmi; requires jdk.internal.jvmstat; diff --git a/src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java b/src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java index 5dc7f1fa2fbce..cfd1212a67aba 100644 --- a/src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java +++ b/src/jdk.jstatd/share/classes/sun/tools/jstatd/Jstatd.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -80,6 +80,8 @@ public static void main(String[] args) { int rmiPort = 0; int argc = 0; + System.err.println("WARNING: jstatd is deprecated and will be removed in a future release."); + for ( ; (argc < args.length) && (args[argc].startsWith("-")); argc++) { String arg = args[argc]; diff --git a/test/jdk/sun/tools/jstatd/JstatdTest.java b/test/jdk/sun/tools/jstatd/JstatdTest.java index b2ac3804f6805..5041bc40d7510 100644 --- a/test/jdk/sun/tools/jstatd/JstatdTest.java +++ b/test/jdk/sun/tools/jstatd/JstatdTest.java @@ -356,7 +356,7 @@ private void runTest(boolean useShortSyntax) throws Throwable { OutputAnalyzer output = jstatdThread.getOutput(); List stdout = output.asLinesWithoutVMWarnings(); output.reportDiagnosticSummary(); - assertEquals(stdout.size(), 1, "Output should contain one line"); + assertEquals(stdout.size(), 2, "Output should contain two lines"); // includes deprecation warning assertTrue(stdout.get(0).startsWith("jstatd started"), "List should start with 'jstatd started'"); assertNotEquals(output.getExitValue(), 0, "jstatd process exited with unexpected exit code"); From 75bea280b9adb6dac9fefafbb3f4b212f100fbb5 Mon Sep 17 00:00:00 2001 From: Ferenc Rakoczi Date: Fri, 21 Jun 2024 14:16:23 +0000 Subject: [PATCH 072/102] 8333867: SHA3 performance can be improved Reviewed-by: kvn, valeriep --- src/hotspot/share/opto/library_call.cpp | 4 +- .../sun/security/provider/DigestBase.java | 4 +- .../classes/sun/security/provider/SHA3.java | 105 ++++++++---------- 3 files changed, 51 insertions(+), 62 deletions(-) diff --git a/src/hotspot/share/opto/library_call.cpp b/src/hotspot/share/opto/library_call.cpp index b3253a817a408..596e637652dfb 100644 --- a/src/hotspot/share/opto/library_call.cpp +++ b/src/hotspot/share/opto/library_call.cpp @@ -7681,7 +7681,7 @@ bool LibraryCallKit::inline_digestBase_implCompress(vmIntrinsics::ID id) { break; case vmIntrinsics::_sha3_implCompress: assert(UseSHA3Intrinsics, "need SHA3 instruction support"); - state = get_state_from_digest_object(digestBase_obj, T_BYTE); + state = get_state_from_digest_object(digestBase_obj, T_LONG); stubAddr = StubRoutines::sha3_implCompress(); stubName = "sha3_implCompress"; block_size = get_block_size_from_digest_object(digestBase_obj); @@ -7781,7 +7781,7 @@ bool LibraryCallKit::inline_digestBase_implCompressMB(int predicate) { klass_digestBase_name = "sun/security/provider/SHA3"; stub_name = "sha3_implCompressMB"; stub_addr = StubRoutines::sha3_implCompressMB(); - elem_type = T_BYTE; + elem_type = T_LONG; } break; default: diff --git a/src/java.base/share/classes/sun/security/provider/DigestBase.java b/src/java.base/share/classes/sun/security/provider/DigestBase.java index dbe59396ac0b6..2aaf0a2fac6fd 100644 --- a/src/java.base/share/classes/sun/security/provider/DigestBase.java +++ b/src/java.base/share/classes/sun/security/provider/DigestBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -61,7 +61,7 @@ abstract class DigestBase extends MessageDigestSpi implements Cloneable { private final int digestLength; // size of the input to the compression function in bytes - private final int blockSize; + protected final int blockSize; // buffer to store partial blocks, blockSize bytes large // Subclasses should not access this array directly except possibly in their // implDigest() method. See MD5.java as an example. diff --git a/src/java.base/share/classes/sun/security/provider/SHA3.java b/src/java.base/share/classes/sun/security/provider/SHA3.java index 2b8bf8afbedaf..eaccf2a88e922 100644 --- a/src/java.base/share/classes/sun/security/provider/SHA3.java +++ b/src/java.base/share/classes/sun/security/provider/SHA3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,13 +25,14 @@ package sun.security.provider; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.nio.ByteOrder; import java.security.ProviderException; import java.util.Arrays; import java.util.Objects; import jdk.internal.vm.annotation.IntrinsicCandidate; -import static sun.security.provider.ByteArrayAccess.b2lLittle; -import static sun.security.provider.ByteArrayAccess.l2bLittle; /** * This class implements the Secure Hash Algorithm SHA-3 developed by @@ -48,7 +49,7 @@ abstract class SHA3 extends DigestBase { private static final int WIDTH = 200; // in bytes, e.g. 1600 bits - private static final int DM = 5; // dimension of lanes + private static final int DM = 5; // dimension of state matrix private static final int NR = 24; // number of rounds @@ -65,8 +66,11 @@ abstract class SHA3 extends DigestBase { }; private final byte suffix; - private byte[] state = new byte[WIDTH]; - private long[] lanes = new long[DM*DM]; + private long[] state = new long[DM*DM]; + + static final VarHandle asLittleEndian + = MethodHandles.byteArrayViewVarHandle(long[].class, + ByteOrder.LITTLE_ENDIAN).withInvokeExactBehavior(); /** * Creates a new SHA-3 object. @@ -91,10 +95,12 @@ void implCompress(byte[] b, int ofs) { @IntrinsicCandidate private void implCompress0(byte[] b, int ofs) { - for (int i = 0; i < buffer.length; i++) { - state[i] ^= b[ofs++]; - } - keccak(); + for (int i = 0; i < blockSize / 8; i++) { + state[i] ^= (long) asLittleEndian.get(b, ofs); + ofs += 8; + } + + keccak(); } /** @@ -102,29 +108,43 @@ private void implCompress0(byte[] b, int ofs) { * DigestBase calls implReset() when necessary. */ void implDigest(byte[] out, int ofs) { + byte[] byteState = new byte[8]; int numOfPadding = - setPaddingBytes(suffix, buffer, (int)(bytesProcessed % buffer.length)); + setPaddingBytes(suffix, buffer, (int)(bytesProcessed % blockSize)); if (numOfPadding < 1) { throw new ProviderException("Incorrect pad size: " + numOfPadding); } implCompress(buffer, 0); - int availableBytes = buffer.length; + int availableBytes = blockSize; // i.e. buffer.length int numBytes = engineGetDigestLength(); while (numBytes > availableBytes) { - System.arraycopy(state, 0, out, ofs, availableBytes); + for (int i = 0; i < availableBytes / 8 ; i++) { + asLittleEndian.set(out, ofs, state[i]); + ofs += 8; + } numBytes -= availableBytes; - ofs += availableBytes; keccak(); } - System.arraycopy(state, 0, out, ofs, numBytes); + int numLongs = (numBytes + 7) / 8; + + for (int i = 0; i < numLongs - 1; i++) { + asLittleEndian.set(out, ofs, state[i]); + ofs += 8; + } + if (numBytes == numLongs * 8) { + asLittleEndian.set(out, ofs, state[numLongs - 1]); + } else { + asLittleEndian.set(byteState, 0, state[numLongs - 1]); + System.arraycopy(byteState, 0, + out, ofs, numBytes - (numLongs - 1) * 8); + } } /** * Resets the internal state to start a new hash. */ void implReset() { - Arrays.fill(state, (byte)0); - Arrays.fill(lanes, 0L); + Arrays.fill(state, 0L); } /** @@ -144,46 +164,19 @@ private static int setPaddingBytes(byte suffix, byte[] in, int len) { return (in.length - len); } - /** - * Utility function for transforming the specified byte array 's' - * into array of lanes 'm' as defined in section 3.1.2. - */ - private static void bytes2Lanes(byte[] s, long[] m) { - int sOfs = 0; - // Conversion traverses along x-axis before y-axis - for (int y = 0; y < DM; y++, sOfs += 40) { - b2lLittle(s, sOfs, m, DM*y, 40); - } - } - - /** - * Utility function for transforming the specified array of - * lanes 'm' into a byte array 's' as defined in section 3.1.3. - */ - private static void lanes2Bytes(long[] m, byte[] s) { - int sOfs = 0; - // Conversion traverses along x-axis before y-axis - for (int y = 0; y < DM; y++, sOfs += 40) { - l2bLittle(m, DM*y, s, sOfs, 40); - } - } - /** * The function Keccak as defined in section 5.2 with * rate r = 1600 and capacity c. */ private void keccak() { - // convert the 200-byte state into 25 lanes - bytes2Lanes(state, lanes); - long a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; long a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24; // move data into local variables - a0 = lanes[0]; a1 = lanes[1]; a2 = lanes[2]; a3 = lanes[3]; a4 = lanes[4]; - a5 = lanes[5]; a6 = lanes[6]; a7 = lanes[7]; a8 = lanes[8]; a9 = lanes[9]; - a10 = lanes[10]; a11 = lanes[11]; a12 = lanes[12]; a13 = lanes[13]; a14 = lanes[14]; - a15 = lanes[15]; a16 = lanes[16]; a17 = lanes[17]; a18 = lanes[18]; a19 = lanes[19]; - a20 = lanes[20]; a21 = lanes[21]; a22 = lanes[22]; a23 = lanes[23]; a24 = lanes[24]; + a0 = state[0]; a1 = state[1]; a2 = state[2]; a3 = state[3]; a4 = state[4]; + a5 = state[5]; a6 = state[6]; a7 = state[7]; a8 = state[8]; a9 = state[9]; + a10 = state[10]; a11 = state[11]; a12 = state[12]; a13 = state[13]; a14 = state[14]; + a15 = state[15]; a16 = state[16]; a17 = state[17]; a18 = state[18]; a19 = state[19]; + a20 = state[20]; a21 = state[21]; a22 = state[22]; a23 = state[23]; a24 = state[24]; // process the lanes through step mappings for (int ir = 0; ir < NR; ir++) { @@ -287,20 +280,16 @@ private void keccak() { a0 ^= RC_CONSTANTS[ir]; } - lanes[0] = a0; lanes[1] = a1; lanes[2] = a2; lanes[3] = a3; lanes[4] = a4; - lanes[5] = a5; lanes[6] = a6; lanes[7] = a7; lanes[8] = a8; lanes[9] = a9; - lanes[10] = a10; lanes[11] = a11; lanes[12] = a12; lanes[13] = a13; lanes[14] = a14; - lanes[15] = a15; lanes[16] = a16; lanes[17] = a17; lanes[18] = a18; lanes[19] = a19; - lanes[20] = a20; lanes[21] = a21; lanes[22] = a22; lanes[23] = a23; lanes[24] = a24; - - // convert the resulting 25 lanes back into 200-byte state - lanes2Bytes(lanes, state); + state[0] = a0; state[1] = a1; state[2] = a2; state[3] = a3; state[4] = a4; + state[5] = a5; state[6] = a6; state[7] = a7; state[8] = a8; state[9] = a9; + state[10] = a10; state[11] = a11; state[12] = a12; state[13] = a13; state[14] = a14; + state[15] = a15; state[16] = a16; state[17] = a17; state[18] = a18; state[19] = a19; + state[20] = a20; state[21] = a21; state[22] = a22; state[23] = a23; state[24] = a24; } public Object clone() throws CloneNotSupportedException { SHA3 copy = (SHA3) super.clone(); copy.state = copy.state.clone(); - copy.lanes = new long[DM*DM]; return copy; } From c41293a70834a79c79e859ebcdb8869884ac87dc Mon Sep 17 00:00:00 2001 From: Jie Fu Date: Fri, 21 Jun 2024 14:23:38 +0000 Subject: [PATCH 073/102] 8334695: Fix build failure without zgc after JDK-8333300 Reviewed-by: dnsimon, chagedorn --- src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp | 4 +++- src/hotspot/share/jvmci/jvmciCompilerToVM.hpp | 4 +++- src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp | 4 +++- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp index 21095692d19dc..8eff2590bfcea 100644 --- a/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp +++ b/src/hotspot/cpu/x86/jvmciCodeInstaller_x86.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -220,6 +220,7 @@ bool CodeInstaller::pd_relocate(address pc, jint mark) { // see comment above for POLL_FAR _instructions->relocate(pc, relocInfo::poll_return_type, Assembler::imm_operand); return true; +#if INCLUDE_ZGC case Z_BARRIER_RELOCATION_FORMAT_LOAD_GOOD_BEFORE_SHL: _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatLoadGoodBeforeShl); return true; @@ -241,6 +242,7 @@ bool CodeInstaller::pd_relocate(address pc, jint mark) { case Z_BARRIER_RELOCATION_FORMAT_STORE_GOOD_AFTER_MOV: _instructions->relocate(pc, barrier_Relocation::spec(), ZBarrierRelocationFormatStoreGoodAfterMov); return true; +#endif default: return false; } diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp index b7ae365c1936d..2208813f170d6 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -104,7 +104,9 @@ class CompilerToVM { static int sizeof_narrowKlass; static int sizeof_arrayOopDesc; static int sizeof_BasicLock; +#if INCLUDE_ZGC static int sizeof_ZStoreBarrierEntry; +#endif static address dsin; static address dcos; diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp index 220667ad2ced0..8595ac193fb8b 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -123,7 +123,9 @@ int CompilerToVM::Data::sizeof_ConstantPool = sizeof(ConstantPool); int CompilerToVM::Data::sizeof_narrowKlass = sizeof(narrowKlass); int CompilerToVM::Data::sizeof_arrayOopDesc = sizeof(arrayOopDesc); int CompilerToVM::Data::sizeof_BasicLock = sizeof(BasicLock); +#if INCLUDE_ZGC int CompilerToVM::Data::sizeof_ZStoreBarrierEntry = sizeof(ZStoreBarrierEntry); +#endif address CompilerToVM::Data::dsin; address CompilerToVM::Data::dcos; diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index 73bac7bd0909c..fea308503cf71 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -121,7 +121,7 @@ static_field(CompilerToVM::Data, sizeof_narrowKlass, int) \ static_field(CompilerToVM::Data, sizeof_arrayOopDesc, int) \ static_field(CompilerToVM::Data, sizeof_BasicLock, int) \ - static_field(CompilerToVM::Data, sizeof_ZStoreBarrierEntry, int) \ + ZGC_ONLY(static_field(CompilerToVM::Data, sizeof_ZStoreBarrierEntry, int)) \ \ static_field(CompilerToVM::Data, dsin, address) \ static_field(CompilerToVM::Data, dcos, address) \ From 93d98027649615afeeeb6a9510230d9655a74a8f Mon Sep 17 00:00:00 2001 From: SendaoYan Date: Fri, 21 Jun 2024 15:48:38 +0000 Subject: [PATCH 074/102] 8334715: [riscv] Mixed use of tab and whitespace in riscv.ad Reviewed-by: chagedorn, amitkumar --- src/hotspot/cpu/riscv/riscv.ad | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 533b548c88109..798caee7375d8 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -242,7 +242,7 @@ reg_def V0_H ( SOC, SOC, Op_VecA, 0, v0->as_VMReg()->next() ); reg_def V0_J ( SOC, SOC, Op_VecA, 0, v0->as_VMReg()->next(2) ); reg_def V0_K ( SOC, SOC, Op_VecA, 0, v0->as_VMReg()->next(3) ); -reg_def V1 ( SOC, SOC, Op_VecA, 1, v1->as_VMReg() ); +reg_def V1 ( SOC, SOC, Op_VecA, 1, v1->as_VMReg() ); reg_def V1_H ( SOC, SOC, Op_VecA, 1, v1->as_VMReg()->next() ); reg_def V1_J ( SOC, SOC, Op_VecA, 1, v1->as_VMReg()->next(2) ); reg_def V1_K ( SOC, SOC, Op_VecA, 1, v1->as_VMReg()->next(3) ); @@ -262,7 +262,7 @@ reg_def V4_H ( SOC, SOC, Op_VecA, 4, v4->as_VMReg()->next() ); reg_def V4_J ( SOC, SOC, Op_VecA, 4, v4->as_VMReg()->next(2) ); reg_def V4_K ( SOC, SOC, Op_VecA, 4, v4->as_VMReg()->next(3) ); -reg_def V5 ( SOC, SOC, Op_VecA, 5, v5->as_VMReg() ); +reg_def V5 ( SOC, SOC, Op_VecA, 5, v5->as_VMReg() ); reg_def V5_H ( SOC, SOC, Op_VecA, 5, v5->as_VMReg()->next() ); reg_def V5_J ( SOC, SOC, Op_VecA, 5, v5->as_VMReg()->next(2) ); reg_def V5_K ( SOC, SOC, Op_VecA, 5, v5->as_VMReg()->next(3) ); @@ -272,7 +272,7 @@ reg_def V6_H ( SOC, SOC, Op_VecA, 6, v6->as_VMReg()->next() ); reg_def V6_J ( SOC, SOC, Op_VecA, 6, v6->as_VMReg()->next(2) ); reg_def V6_K ( SOC, SOC, Op_VecA, 6, v6->as_VMReg()->next(3) ); -reg_def V7 ( SOC, SOC, Op_VecA, 7, v7->as_VMReg() ); +reg_def V7 ( SOC, SOC, Op_VecA, 7, v7->as_VMReg() ); reg_def V7_H ( SOC, SOC, Op_VecA, 7, v7->as_VMReg()->next() ); reg_def V7_J ( SOC, SOC, Op_VecA, 7, v7->as_VMReg()->next(2) ); reg_def V7_K ( SOC, SOC, Op_VecA, 7, v7->as_VMReg()->next(3) ); From 8e1d2b091c9a311d98a0b886a803fb18d4405d8a Mon Sep 17 00:00:00 2001 From: Rajan Halade Date: Fri, 21 Jun 2024 16:37:57 +0000 Subject: [PATCH 075/102] 8334441: Mark tests in jdk_security_infra group as manual Reviewed-by: clanger, mullan --- test/jdk/ProblemList.txt | 2 - test/jdk/TEST.groups | 5 +- .../certification/CAInterop.java | 268 +++++++++--------- .../certification/CertignaCA.java | 6 +- .../certification/DTrustCA.java | 6 +- .../certification/DigicertCSRootG5.java | 6 +- .../certification/EmSignRootG2CA.java | 6 +- .../certification/HaricaCA.java | 6 +- .../certification/LuxTrustCA.java | 6 +- .../javax/net/ssl/HttpsURLConnectionTest.java | 2 +- 10 files changed, 158 insertions(+), 155 deletions(-) diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 4ea08fa2bbc18..546f95b0054b1 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -620,8 +620,6 @@ javax/net/ssl/SSLSession/CertMsgCheck.java 8326705 generic- sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 8316183,8333317 generic-all -security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java#teliasonerarootcav1 8333640 generic-all - ############################################################################ # jdk_sound diff --git a/test/jdk/TEST.groups b/test/jdk/TEST.groups index fa868699aab38..0a8d27484652a 100644 --- a/test/jdk/TEST.groups +++ b/test/jdk/TEST.groups @@ -251,6 +251,8 @@ jdk_security = \ :jdk_security3 \ :jdk_security4 +# Tests in this group are manual as they depend on external infra +# and may fail with external reasons, for instance - change in CA test portal. jdk_security_infra = \ security/infra @@ -618,6 +620,7 @@ jdk_core_manual_no_input = \ javax/xml/jaxp/datatype/8033980/GregorianCalAndDurSerDataUtil.java jdk_security_manual_no_input = \ + :jdk_security_infra \ com/sun/crypto/provider/Cipher/DES/PerformanceTest.java \ com/sun/crypto/provider/Cipher/AEAD/GCMIncrementByte4.java \ com/sun/crypto/provider/Cipher/AEAD/GCMIncrementDirect4.java \ @@ -661,4 +664,4 @@ jdk_containers_extended = \ jdk_core_no_security = \ :jdk_core \ - -:jdk_security \ No newline at end of file + -:jdk_security diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java index 9f071bc145087..889926077a9fe 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CAInterop.java @@ -27,12 +27,12 @@ * @summary Interoperability tests with Actalis CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp * CAInterop actalisauthenticationrootca OCSP - * @run main/othervm/timeout=180 -Djava.security.debug=certpath,ocsp + * @run main/othervm/manual/timeout=180 -Djava.security.debug=certpath,ocsp * -Dcom.sun.security.ocsp.useget=false * CAInterop actalisauthenticationrootca OCSP - * @run main/othervm/timeout=180 -Djava.security.debug=certpath,ocsp + * @run main/othervm/manual/timeout=180 -Djava.security.debug=certpath,ocsp * CAInterop actalisauthenticationrootca CRL */ @@ -42,9 +42,9 @@ * @summary Interoperability tests with Amazon's CA1 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop amazonrootca1 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca1 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop amazonrootca1 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop amazonrootca1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop amazonrootca1 CRL */ /* @@ -53,9 +53,9 @@ * @summary Interoperability tests with Amazon's CA2 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop amazonrootca2 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca2 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop amazonrootca2 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop amazonrootca2 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca2 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop amazonrootca2 CRL */ /* @@ -64,9 +64,9 @@ * @summary Interoperability tests with Amazon's CA3 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop amazonrootca3 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca3 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop amazonrootca3 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop amazonrootca3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop amazonrootca3 CRL */ /* @@ -75,9 +75,9 @@ * @summary Interoperability tests with Amazon's CA4 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop amazonrootca4 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca4 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop amazonrootca4 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop amazonrootca4 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop amazonrootca4 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop amazonrootca4 CRL */ /* @@ -86,9 +86,9 @@ * @summary Interoperability tests with Buypass Class 2 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop buypassclass2ca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop buypassclass2ca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop buypassclass2ca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop buypassclass2ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop buypassclass2ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop buypassclass2ca CRL */ /* @@ -97,9 +97,9 @@ * @summary Interoperability tests with Buypass Class 3 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop buypassclass3ca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop buypassclass3ca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop buypassclass3ca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop buypassclass3ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop buypassclass3ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop buypassclass3ca CRL */ /* @@ -108,9 +108,9 @@ * @summary Interoperability tests with Comodo RSA CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop comodorsaca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop comodorsaca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop comodorsaca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop comodorsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop comodorsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop comodorsaca CRL */ /* @@ -119,9 +119,9 @@ * @summary Interoperability tests with Comodo ECC CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop comodoeccca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop comodoeccca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop comodoeccca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop comodoeccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop comodoeccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop comodoeccca CRL */ /* @@ -130,9 +130,9 @@ * @summary Interoperability tests with Comodo userTrust RSA CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop usertrustrsaca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop usertrustrsaca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop usertrustrsaca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop usertrustrsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop usertrustrsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop usertrustrsaca CRL */ /* @@ -141,9 +141,9 @@ * @summary Interoperability tests with Comodo userTrust ECC CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop usertrusteccca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop usertrusteccca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop usertrusteccca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop usertrusteccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop usertrusteccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop usertrusteccca CRL */ /* @@ -152,8 +152,8 @@ * @summary Interoperability tests with Let's Encrypt ISRG Root X1 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop letsencryptisrgx1 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop letsencryptisrgx1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop letsencryptisrgx1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop letsencryptisrgx1 DEFAULT */ /* @@ -162,8 +162,8 @@ * @summary Interoperability tests with Let's Encrypt ISRG Root X2 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop letsencryptisrgx2 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop letsencryptisrgx2 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop letsencryptisrgx2 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop letsencryptisrgx2 DEFAULT */ /* @@ -172,9 +172,9 @@ * @summary Interoperability tests with GlobalSign R6 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop globalsignrootcar6 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsignrootcar6 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop globalsignrootcar6 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop globalsignrootcar6 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsignrootcar6 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop globalsignrootcar6 CRL */ /* @@ -183,9 +183,9 @@ * @summary Interoperability tests with Entrust CAs * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop entrustrootcaec1 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop entrustrootcaec1 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop entrustrootcaec1 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop entrustrootcaec1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop entrustrootcaec1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop entrustrootcaec1 CRL */ /* @@ -194,9 +194,9 @@ * @summary Interoperability tests with Entrust CAs * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop entrustrootcag4 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop entrustrootcag4 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop entrustrootcag4 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop entrustrootcag4 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop entrustrootcag4 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop entrustrootcag4 CRL */ /* @@ -205,9 +205,9 @@ * @summary Interoperability tests with GoDaddy CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop godaddyrootg2ca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop godaddyrootg2ca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop godaddyrootg2ca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop godaddyrootg2ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop godaddyrootg2ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop godaddyrootg2ca CRL */ /* @@ -216,9 +216,9 @@ * @summary Interoperability tests with Starfield CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop starfieldrootg2ca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop starfieldrootg2ca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop starfieldrootg2ca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop starfieldrootg2ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop starfieldrootg2ca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop starfieldrootg2ca CRL */ /* @@ -227,8 +227,8 @@ * @summary Interoperability tests with Google's GlobalSign R4 and GTS Root certificates * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop globalsigneccrootcar4 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsigneccrootcar4 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop globalsigneccrootcar4 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsigneccrootcar4 DEFAULT */ /* @@ -237,8 +237,8 @@ * @summary Interoperability tests with Google's GlobalSign R4 and GTS Root certificates * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop gtsrootcar1 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootcar1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop gtsrootcar1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootcar1 DEFAULT */ /* @@ -247,8 +247,8 @@ * @summary Interoperability tests with Google's GlobalSign R4 and GTS Root certificates * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop gtsrootcar2 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootcar2 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop gtsrootcar2 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootcar2 DEFAULT */ /* @@ -257,8 +257,8 @@ * @summary Interoperability tests with Google's GlobalSign R4 and GTS Root certificates * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop gtsrootecccar3 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootecccar3 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop gtsrootecccar3 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootecccar3 DEFAULT */ /* @@ -267,8 +267,8 @@ * @summary Interoperability tests with Google's GlobalSign R4 and GTS Root certificates * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootecccar4 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop gtsrootecccar4 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop gtsrootecccar4 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop gtsrootecccar4 DEFAULT */ /* @@ -277,9 +277,9 @@ * @summary Interoperability tests with Microsoft TLS root CAs * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop microsoftecc2017 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop microsoftecc2017 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop microsoftecc2017 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop microsoftecc2017 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop microsoftecc2017 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop microsoftecc2017 CRL */ /* @@ -288,9 +288,9 @@ * @summary Interoperability tests with Microsoft TLS root CAs * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop microsoftrsa2017 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop microsoftrsa2017 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop microsoftrsa2017 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop microsoftrsa2017 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop microsoftrsa2017 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop microsoftrsa2017 CRL */ /* @@ -299,9 +299,9 @@ * @summary Interoperability tests with QuoVadis Root CA1 G3 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop quovadisrootca1g3 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop quovadisrootca1g3 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop quovadisrootca1g3 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop quovadisrootca1g3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop quovadisrootca1g3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop quovadisrootca1g3 CRL */ /* @@ -310,9 +310,9 @@ * @summary Interoperability tests with QuoVadis Root CA2 G3 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop quovadisrootca2g3 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop quovadisrootca2g3 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop quovadisrootca2g3 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop quovadisrootca2g3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop quovadisrootca2g3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop quovadisrootca2g3 CRL */ /* @@ -321,9 +321,9 @@ * @summary Interoperability tests with QuoVadis Root CA3 G3 CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop quovadisrootca3g3 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop quovadisrootca3g3 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop quovadisrootca3g3 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop quovadisrootca3g3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop quovadisrootca3g3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop quovadisrootca3g3 CRL */ /* @@ -332,9 +332,9 @@ * @summary Interoperability tests with DigiCert TLS ECC P384 Root G5 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop digicerttlseccrootg5 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop digicerttlseccrootg5 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop digicerttlseccrootg5 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop digicerttlseccrootg5 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop digicerttlseccrootg5 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop digicerttlseccrootg5 CRL */ /* @@ -343,9 +343,9 @@ * @summary Interoperability tests with DigiCert TLS RSA4096 Root G5 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop digicerttlsrsarootg5 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop digicerttlsrsarootg5 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop digicerttlsrsarootg5 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop digicerttlsrsarootg5 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop digicerttlsrsarootg5 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop digicerttlsrsarootg5 CRL */ /* @@ -354,9 +354,9 @@ * @summary Interoperability tests with SSL.com's RSA CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop sslrootrsaca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop sslrootrsaca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop sslrootrsaca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop sslrootrsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop sslrootrsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop sslrootrsaca CRL */ /* @@ -365,9 +365,9 @@ * @summary Interoperability tests with SSL.com's EV RSA CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop sslrootevrsaca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop sslrootevrsaca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop sslrootevrsaca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop sslrootevrsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop sslrootevrsaca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop sslrootevrsaca CRL */ /* @@ -376,9 +376,9 @@ * @summary Interoperability tests with SSL.com's ECC CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop sslrooteccca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop sslrooteccca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop sslrooteccca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop sslrooteccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop sslrooteccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop sslrooteccca CRL */ /* @@ -387,9 +387,9 @@ * @summary Interoperability tests with TeliaSonera Root CA v1 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop teliasonerarootcav1 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop teliasonerarootcav1 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop teliasonerarootcav1 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop teliasonerarootcav1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop teliasonerarootcav1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop teliasonerarootcav1 CRL */ /* @@ -398,9 +398,9 @@ * @summary Interoperability tests with TWCA Global Root CA from TAIWAN-CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop twcaglobalrootca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop twcaglobalrootca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop twcaglobalrootca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop twcaglobalrootca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop twcaglobalrootca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop twcaglobalrootca CRL */ /* @@ -409,9 +409,9 @@ * @summary Interoperability tests with Certigna Root CAs from Dhimyotis * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop certignarootca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop certignarootca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop certignarootca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop certignarootca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop certignarootca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop certignarootca CRL */ /* @@ -420,9 +420,9 @@ * @summary Interoperability tests with AffirmTrust Commercial CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop affirmtrustcommercialca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustcommercialca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop affirmtrustcommercialca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop affirmtrustcommercialca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustcommercialca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop affirmtrustcommercialca CRL */ /* @@ -431,9 +431,9 @@ * @summary Interoperability tests with AffirmTrust Networking CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop affirmtrustnetworkingca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustnetworkingca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop affirmtrustnetworkingca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop affirmtrustnetworkingca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustnetworkingca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop affirmtrustnetworkingca CRL */ /* @@ -442,9 +442,9 @@ * @summary Interoperability tests with AffirmTrust Premium CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop affirmtrustpremiumca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustpremiumca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop affirmtrustpremiumca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop affirmtrustpremiumca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustpremiumca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop affirmtrustpremiumca CRL */ /* @@ -453,9 +453,9 @@ * @summary Interoperability tests with AffirmTrust Premium ECC CA * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop affirmtrustpremiumeccca OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustpremiumeccca OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop affirmtrustpremiumeccca CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop affirmtrustpremiumeccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop affirmtrustpremiumeccca OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop affirmtrustpremiumeccca CRL */ /* @@ -464,9 +464,9 @@ * @summary Interoperability tests with Telia Root CA V2 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop teliarootcav2 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop teliarootcav2 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop teliarootcav2 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop teliarootcav2 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop teliarootcav2 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop teliarootcav2 CRL */ /* @@ -475,9 +475,9 @@ * @summary Interoperability tests with eMudhra Root CA G1 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop emsignrootcag1 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop emsignrootcag1 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop emsignrootcag1 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop emsignrootcag1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop emsignrootcag1 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop emsignrootcag1 CRL */ /* @@ -486,9 +486,9 @@ * @summary Interoperability tests with eMudhra ECC Root CA G3 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop emsigneccrootcag3 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop emsigneccrootcag3 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop emsigneccrootcag3 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop emsigneccrootcag3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop emsigneccrootcag3 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop emsigneccrootcag3 CRL */ /* @@ -497,8 +497,8 @@ * @summary Interoperability tests with Certainly Root R1 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop certainlyrootr1 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop certainlyrootr1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop certainlyrootr1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop certainlyrootr1 DEFAULT */ /* @@ -507,8 +507,8 @@ * @summary Interoperability tests with Certainly Root E1 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop certainlyroote1 DEFAULT - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop certainlyroote1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop certainlyroote1 DEFAULT + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop certainlyroote1 DEFAULT */ /* @@ -517,9 +517,9 @@ * @summary Interoperability tests with GlobalSign Root R46 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop globalsignr46 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsignr46 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop globalsignr46 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop globalsignr46 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsignr46 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop globalsignr46 CRL */ /* @@ -528,13 +528,15 @@ * @summary Interoperability tests with GlobalSign Root E46 * @library /test/lib * @build jtreg.SkippedException ValidatePathWithURL CAInterop - * @run main/othervm -Djava.security.debug=certpath,ocsp CAInterop globalsigne46 OCSP - * @run main/othervm -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsigne46 OCSP - * @run main/othervm -Djava.security.debug=certpath CAInterop globalsigne46 CRL + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp CAInterop globalsigne46 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath,ocsp -Dcom.sun.security.ocsp.useget=false CAInterop globalsigne46 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CAInterop globalsigne46 CRL */ /** - * Collection of certificate validation tests for interoperability with external CAs + * Collection of certificate validation tests for interoperability with external CAs. + * These tests are marked as manual as they depend on external infrastructure and may fail + * with external reasons, for instance - change in CA test portal. */ public class CAInterop { diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CertignaCA.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CertignaCA.java index f1dd2d6229a47..eb09d56a14e56 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CertignaCA.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/CertignaCA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ * @bug 8245654 8256895 * @summary Interoperability tests with Certigna Root CAs from Dhimyotis * @build ValidatePathWithParams - * @run main/othervm -Djava.security.debug=certpath CertignaCA OCSP - * @run main/othervm -Djava.security.debug=certpath CertignaCA CRL + * @run main/othervm/manual -Djava.security.debug=certpath CertignaCA OCSP + * @run main/othervm/manual -Djava.security.debug=certpath CertignaCA CRL */ public class CertignaCA { // Owner: CN=Certigna Services CA, OID.2.5.4.97=NTRFR-48146308100036, diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DTrustCA.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DTrustCA.java index 152e77907bb30..13a2e8044dac7 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DTrustCA.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DTrustCA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,8 +27,8 @@ * @summary Interoperability tests with "D-Trust Root Class 3 CA 2 2009" and * "D-Trust Root Class 3 CA 2 EV 2009" CAs * @build ValidatePathWithParams - * @run main/othervm -Djava.security.debug=certpath DTrustCA OCSP - * @run main/othervm -Djava.security.debug=certpath DTrustCA CRL + * @run main/othervm/manual -Djava.security.debug=certpath DTrustCA OCSP + * @run main/othervm/manual -Djava.security.debug=certpath DTrustCA CRL */ public class DTrustCA { diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DigicertCSRootG5.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DigicertCSRootG5.java index 30ad81b1755c8..4b45bb857ba45 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DigicertCSRootG5.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/DigicertCSRootG5.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ * @bug 8318759 * @summary Interoperability tests with Digicert CS Root G5 certificates * @build ValidatePathWithParams - * @run main/othervm -Djava.security.debug=ocsp,certpath DigicertCSRootG5 OCSP - * @run main/othervm -Djava.security.debug=certpath DigicertCSRootG5 CRL + * @run main/othervm/manual -Djava.security.debug=ocsp,certpath DigicertCSRootG5 OCSP + * @run main/othervm/manual -Djava.security.debug=certpath DigicertCSRootG5 CRL */ public class DigicertCSRootG5 { diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/EmSignRootG2CA.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/EmSignRootG2CA.java index 8f5df9cce755b..14e48a6e78fb1 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/EmSignRootG2CA.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/EmSignRootG2CA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ * @bug 8319187 * @summary Interoperability tests with eMudhra emSign Root CA G2 CS root * @build ValidatePathWithParams - * @run main/othervm -Djava.security.debug=certpath EmSignRootG2CA OCSP - * @run main/othervm -Djava.security.debug=certpath EmSignRootG2CA CRL + * @run main/othervm/manual -Djava.security.debug=certpath EmSignRootG2CA OCSP + * @run main/othervm/manual -Djava.security.debug=certpath EmSignRootG2CA CRL */ public class EmSignRootG2CA { diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/HaricaCA.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/HaricaCA.java index 247502e6e6cfe..744e9b6bf34ed 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/HaricaCA.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/HaricaCA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ * @bug 8256421 * @summary Interoperability tests with Harica CAs * @build ValidatePathWithParams - * @run main/othervm -Djava.security.debug=certpath HaricaCA OCSP - * @run main/othervm -Djava.security.debug=certpath HaricaCA CRL + * @run main/othervm/manual -Djava.security.debug=certpath HaricaCA OCSP + * @run main/othervm/manual -Djava.security.debug=certpath HaricaCA CRL */ /* diff --git a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/LuxTrustCA.java b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/LuxTrustCA.java index 469501c70c2f6..3e9631848c247 100644 --- a/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/LuxTrustCA.java +++ b/test/jdk/security/infra/java/security/cert/CertPathValidator/certification/LuxTrustCA.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,8 @@ * @bug 8232019 8256895 * @summary Interoperability tests with LuxTrust Global Root 2 CA * @build ValidatePathWithParams - * @run main/othervm -Djava.security.debug=certpath LuxTrustCA OCSP - * @run main/othervm -Djava.security.debug=certpath LuxTrustCA CRL + * @run main/othervm/manual -Djava.security.debug=certpath LuxTrustCA OCSP + * @run main/othervm/manual -Djava.security.debug=certpath LuxTrustCA CRL */ /* diff --git a/test/jdk/security/infra/javax/net/ssl/HttpsURLConnectionTest.java b/test/jdk/security/infra/javax/net/ssl/HttpsURLConnectionTest.java index 7aeb67e842d5b..7e08d6cd4fefe 100644 --- a/test/jdk/security/infra/javax/net/ssl/HttpsURLConnectionTest.java +++ b/test/jdk/security/infra/javax/net/ssl/HttpsURLConnectionTest.java @@ -28,7 +28,7 @@ * KEYCHAINSTORE-ROOT trust store * @library /test/lib * @requires os.family == "mac" - * @run main/othervm HttpsURLConnectionTest https://github.com KeychainStore-Root + * @run main/othervm/manual HttpsURLConnectionTest https://github.com KeychainStore-Root */ import java.io.*; import java.net.*; From 689cee3d0950e15e88a1f6738bfded00655dca9c Mon Sep 17 00:00:00 2001 From: Prasanta Sadhukhan Date: Fri, 21 Jun 2024 18:02:57 +0000 Subject: [PATCH 076/102] 8334509: Cancelling PageDialog does not return the same PageFormat object Reviewed-by: aivanov, prr --- .../native/libawt/windows/awt_PrintJob.cpp | 16 ++--- .../PrinterJob/PageDialogCancelTest.java | 58 +++++++++++++++++++ 2 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 test/jdk/java/awt/print/PrinterJob/PageDialogCancelTest.java diff --git a/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp b/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp index c761533621870..9f126bded9418 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_PrintJob.cpp @@ -522,6 +522,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) AwtComponent *awtParent = (parent != NULL) ? (AwtComponent *)JNI_GET_PDATA(parent) : NULL; HWND hwndOwner = awtParent ? awtParent->GetHWnd() : NULL; + jboolean doIt = JNI_FALSE; PAGESETUPDLG setup; memset(&setup, 0, sizeof(setup)); @@ -577,7 +578,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) */ if ((setup.hDevMode == NULL) && (setup.hDevNames == NULL)) { CLEANUP_SHOW; - return JNI_FALSE; + return doIt; } } else { int measure = PSD_INTHOUSANDTHSOFINCHES; @@ -605,7 +606,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) pageFormatToSetup(env, self, page, &setup, AwtPrintControl::getPrintDC(env, self)); if (env->ExceptionCheck()) { CLEANUP_SHOW; - return JNI_FALSE; + return doIt; } setup.lpfnPageSetupHook = reinterpret_cast(pageDlgHook); @@ -619,7 +620,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) jobject paper = getPaper(env, page); if (paper == NULL) { CLEANUP_SHOW; - return JNI_FALSE; + return doIt; } int units = setup.Flags & PSD_INTHOUSANDTHSOFINCHES ? MM_HIENGLISH : @@ -661,7 +662,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) setPaperValues(env, paper, &paperSize, &margins, units); if (env->ExceptionCheck()) { CLEANUP_SHOW; - return JNI_FALSE; + return doIt; } /* * Put the updated Paper instance and the orientation into @@ -670,7 +671,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) setPaper(env, page, paper); if (env->ExceptionCheck()) { CLEANUP_SHOW; - return JNI_FALSE; + return doIt; } setPageFormatOrientation(env, page, orientation); if (env->ExceptionCheck()) { @@ -684,12 +685,13 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) jboolean err = setPrintPaperSize(env, self, devmode->dmPaperSize); if (err) { CLEANUP_SHOW; - return JNI_FALSE; + return doIt; } } } ::GlobalUnlock(setup.hDevMode); } + doIt = JNI_TRUE; } AwtDialog::CheckUninstallModalHook(); @@ -708,7 +710,7 @@ Java_sun_awt_windows_WPageDialogPeer__1show(JNIEnv *env, jobject peer) CLEANUP_SHOW; - return JNI_TRUE; + return doIt; CATCH_BAD_ALLOC_RET(0); } diff --git a/test/jdk/java/awt/print/PrinterJob/PageDialogCancelTest.java b/test/jdk/java/awt/print/PrinterJob/PageDialogCancelTest.java new file mode 100644 index 0000000000000..f9ce1b7c196a0 --- /dev/null +++ b/test/jdk/java/awt/print/PrinterJob/PageDialogCancelTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8334366 + * @key headful printer + * @summary Verifies original pageobject is returned unmodified + * on cancelling pagedialog + * @requires (os.family == "windows") + * @run main PageDialogCancelTest + */ + +import java.awt.Robot; +import java.awt.event.KeyEvent; +import java.awt.print.PageFormat; +import java.awt.print.PrinterJob; + +public class PageDialogCancelTest { + + public static void main(String[] args) throws Exception { + PrinterJob pj = PrinterJob.getPrinterJob(); + PageFormat oldFormat = new PageFormat(); + Robot robot = new Robot(); + Thread t1 = new Thread(() -> { + robot.delay(2000); + robot.keyPress(KeyEvent.VK_ESCAPE); + robot.keyRelease(KeyEvent.VK_ESCAPE); + robot.waitForIdle(); + }); + t1.start(); + PageFormat newFormat = pj.pageDialog(oldFormat); + if (!newFormat.equals(oldFormat)) { + throw new RuntimeException("Original PageFormat not returned on cancelling PageDialog"); + } + } +} + From 1ff5acdafff1ccd3e64c70eebbfbff75e0d783eb Mon Sep 17 00:00:00 2001 From: Nizar Benalla Date: Fri, 21 Jun 2024 20:13:26 +0000 Subject: [PATCH 077/102] 8332099: since-checker - Add @ since to package-info in jdk.jsobject Reviewed-by: prr --- .../share/classes/netscape/javascript/package-info.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/jdk.jsobject/share/classes/netscape/javascript/package-info.java b/src/jdk.jsobject/share/classes/netscape/javascript/package-info.java index d3770732bc001..fcc97132a5074 100644 --- a/src/jdk.jsobject/share/classes/netscape/javascript/package-info.java +++ b/src/jdk.jsobject/share/classes/netscape/javascript/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,8 @@ * The classes in this package were initially specified by Netscape, and are the * de facto standard mechanism for calling JavaScript from the Java runtime. *

    + * + * @since 1.5 */ package netscape.javascript; From 7e55ed3b106ed08956d2d38b7c99fb81704667c9 Mon Sep 17 00:00:00 2001 From: Chen Liang Date: Fri, 21 Jun 2024 22:38:38 +0000 Subject: [PATCH 078/102] 8333748: javap crash - Fatal error: Unmatched bit position 0x2 for location CLASS Reviewed-by: asotona --- .../com/sun/tools/javap/AttributeWriter.java | 4 +- .../com/sun/tools/javap/BasicWriter.java | 42 +++++- .../com/sun/tools/javap/ClassWriter.java | 70 ++-------- .../tools/javap/UndefinedAccessFlagTest.java | 128 ++++++++++++++++++ 4 files changed, 184 insertions(+), 60 deletions(-) create mode 100644 test/langtools/tools/javap/UndefinedAccessFlagTest.java diff --git a/src/jdk.jdeps/share/classes/com/sun/tools/javap/AttributeWriter.java b/src/jdk.jdeps/share/classes/com/sun/tools/javap/AttributeWriter.java index 839ac2fd041b7..3b9336c499d9c 100644 --- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/AttributeWriter.java +++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/AttributeWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -208,7 +208,7 @@ public void write(Attribute a, CodeAttribute lr) { indent(+1); first = false; } - for (var flag : info.flags()) { + for (var flag : maskToAccessFlagsReportUnknown(access_flags, AccessFlag.Location.INNER_CLASS)) { if (flag.sourceModifier() && (flag != AccessFlag.ABSTRACT || !info.has(AccessFlag.INTERFACE))) { print(Modifier.toString(flag.mask()) + " "); diff --git a/src/jdk.jdeps/share/classes/com/sun/tools/javap/BasicWriter.java b/src/jdk.jdeps/share/classes/com/sun/tools/javap/BasicWriter.java index 8629957f907fd..64eecf920829a 100644 --- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/BasicWriter.java +++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/BasicWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,12 @@ package com.sun.tools.javap; import java.io.PrintWriter; +import java.lang.classfile.AccessFlags; +import java.lang.reflect.AccessFlag; +import java.lang.reflect.Modifier; +import java.util.EnumMap; +import java.util.Map; +import java.util.Set; import java.util.function.Supplier; /* @@ -38,6 +44,26 @@ * deletion without notice. */ public class BasicWriter { + private static final Map LOCATION_MASKS; + + static { + var map = new EnumMap(AccessFlag.Location.class); + for (var loc : AccessFlag.Location.values()) { + map.put(loc, 0); + } + + for (var flag : AccessFlag.values()) { + for (var loc : flag.locations()) { + map.compute(loc, (_, v) -> v | flag.mask()); + } + } + + // Peculiarities from AccessFlag.maskToAccessFlag + map.compute(AccessFlag.Location.METHOD, (_, v) -> v | Modifier.STRICT); + + LOCATION_MASKS = map; + } + protected BasicWriter(Context context) { lineWriter = LineWriter.instance(context); out = context.get(PrintWriter.class); @@ -46,6 +72,20 @@ protected BasicWriter(Context context) { throw new AssertionError(); } + protected Set flagsReportUnknown(AccessFlags flags) { + return maskToAccessFlagsReportUnknown(flags.flagsMask(), flags.location()); + } + + protected Set maskToAccessFlagsReportUnknown(int mask, AccessFlag.Location location) { + try { + return AccessFlag.maskToAccessFlags(mask, location); + } catch (IllegalArgumentException ex) { + mask &= LOCATION_MASKS.get(location); + report("Access Flags: " + ex.getMessage()); + return AccessFlag.maskToAccessFlags(mask, location); + } + } + protected void print(String s) { lineWriter.print(s); } diff --git a/src/jdk.jdeps/share/classes/com/sun/tools/javap/ClassWriter.java b/src/jdk.jdeps/share/classes/com/sun/tools/javap/ClassWriter.java index edf3d803af321..2483e99e49ad9 100644 --- a/src/jdk.jdeps/share/classes/com/sun/tools/javap/ClassWriter.java +++ b/src/jdk.jdeps/share/classes/com/sun/tools/javap/ClassWriter.java @@ -417,7 +417,7 @@ protected void writeField(FieldModel f) { return; var flags = AccessFlags.ofField(f.flags().flagsMask()); - writeModifiers(flags.flags().stream().filter(fl -> fl.sourceModifier()) + writeModifiers(flagsReportUnknown(flags).stream().filter(fl -> fl.sourceModifier()) .map(fl -> Modifier.toString(fl.mask())).toList()); print(() -> sigPrinter.print( f.findAttribute(Attributes.signature()) @@ -446,7 +446,7 @@ protected void writeField(FieldModel f) { if (options.verbose) writeList(String.format("flags: (0x%04x) ", flags.flagsMask()), - flags.flags().stream().map(fl -> "ACC_" + fl.name()).toList(), + flagsReportUnknown(flags).stream().map(fl -> "ACC_" + fl.name()).toList(), "\n"); if (options.showAllAttrs) { @@ -478,7 +478,7 @@ protected void writeMethod(MethodModel m) { int flags = m.flags().flagsMask(); var modifiers = new ArrayList(); - for (var f : AccessFlags.ofMethod(flags).flags()) + for (var f : flagsReportUnknown(m.flags())) if (f.sourceModifier()) modifiers.add(Modifier.toString(f.mask())); String name = "???"; @@ -561,7 +561,7 @@ protected void writeMethod(MethodModel m) { StringBuilder sb = new StringBuilder(); String sep = ""; sb.append(String.format("flags: (0x%04x) ", flags)); - for (var f : AccessFlags.ofMethod(flags).flags()) { + for (var f : flagsReportUnknown(m.flags())) { sb.append(sep).append("ACC_").append(f.name()); sep = ", "; } @@ -794,17 +794,9 @@ else switch (c) { } } - private static Set getClassModifiers(int mask) { - return getModifiers(AccessFlags.ofClass((mask & ACC_INTERFACE) != 0 - ? mask & ~ACC_ABSTRACT : mask).flags()); - } - - private static Set getMethodModifiers(int mask) { - return getModifiers(AccessFlags.ofMethod(mask).flags()); - } - - private static Set getFieldModifiers(int mask) { - return getModifiers(AccessFlags.ofField(mask).flags()); + private Set getClassModifiers(int mask) { + return getModifiers(flagsReportUnknown(AccessFlags.ofClass((mask & ACC_INTERFACE) != 0 + ? mask & ~ACC_ABSTRACT : mask))); } private static Set getModifiers(Set flags) { @@ -814,16 +806,16 @@ private static Set getModifiers(Set flags) return s; } - private static Set getClassFlags(int mask) { - return getFlags(mask, AccessFlags.ofClass(mask).flags()); + private Set getClassFlags(int mask) { + return getFlags(mask, flagsReportUnknown(AccessFlags.ofClass(mask))); } - private static Set getMethodFlags(int mask) { - return getFlags(mask, AccessFlags.ofMethod(mask).flags()); + private Set getMethodFlags(int mask) { + return getFlags(mask, flagsReportUnknown(AccessFlags.ofMethod(mask))); } - private static Set getFieldFlags(int mask) { - return getFlags(mask, AccessFlags.ofField(mask).flags()); + private Set getFieldFlags(int mask) { + return getFlags(mask, flagsReportUnknown(AccessFlags.ofField(mask))); } private static Set getFlags(int mask, Set flags) { @@ -840,42 +832,6 @@ private static Set getFlags(int mask, Set return s; } - public static enum AccessFlag { - ACC_PUBLIC (ClassFile.ACC_PUBLIC, "public", true, true, true, true ), - ACC_PRIVATE (ClassFile.ACC_PRIVATE, "private", false, true, true, true ), - ACC_PROTECTED (ClassFile.ACC_PROTECTED, "protected", false, true, true, true ), - ACC_STATIC (ClassFile.ACC_STATIC, "static", false, true, true, true ), - ACC_FINAL (ClassFile.ACC_FINAL, "final", true, true, true, true ), - ACC_SUPER (ClassFile.ACC_SUPER, null, true, false, false, false), - ACC_SYNCHRONIZED(ClassFile.ACC_SYNCHRONIZED, "synchronized", false, false, false, true ), - ACC_VOLATILE (ClassFile.ACC_VOLATILE, "volatile", false, false, true, false), - ACC_BRIDGE (ClassFile.ACC_BRIDGE, null, false, false, false, true ), - ACC_TRANSIENT (ClassFile.ACC_TRANSIENT, "transient", false, false, true, false), - ACC_VARARGS (ClassFile.ACC_VARARGS, null, false, false, false, true ), - ACC_NATIVE (ClassFile.ACC_NATIVE, "native", false, false, false, true ), - ACC_INTERFACE (ClassFile.ACC_INTERFACE, null, true, true, false, false), - ACC_ABSTRACT (ClassFile.ACC_ABSTRACT, "abstract", true, true, false, true ), - ACC_STRICT (ClassFile.ACC_STRICT, "strictfp", false, false, false, true ), - ACC_SYNTHETIC (ClassFile.ACC_SYNTHETIC, null, true, true, true, true ), - ACC_ANNOTATION (ClassFile.ACC_ANNOTATION, null, true, true, false, false), - ACC_ENUM (ClassFile.ACC_ENUM, null, true, true, true, false), - ACC_MODULE (ClassFile.ACC_MODULE, null, true, false, false, false); - - public final int flag; - public final String modifier; - public final boolean isClass, isInnerClass, isField, isMethod; - - AccessFlag(int flag, String modifier, boolean isClass, - boolean isInnerClass, boolean isField, boolean isMethod) { - this.flag = flag; - this.modifier = modifier; - this.isClass = isClass; - this.isInnerClass = isInnerClass; - this.isField = isField; - this.isMethod = isMethod; - } - } - private final Options options; private final AttributeWriter attrWriter; private final CodeWriter codeWriter; diff --git a/test/langtools/tools/javap/UndefinedAccessFlagTest.java b/test/langtools/tools/javap/UndefinedAccessFlagTest.java new file mode 100644 index 0000000000000..bb531fa369c16 --- /dev/null +++ b/test/langtools/tools/javap/UndefinedAccessFlagTest.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test 8333748 + * @summary javap should not fail if reserved access flag bits are set to 1 + * @library /tools/lib + * @modules jdk.jdeps/com.sun.tools.javap + * @enablePreview + * @run junit UndefinedAccessFlagTest + */ + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import toolbox.JavapTask; +import toolbox.Task; +import toolbox.ToolBox; + +import java.lang.classfile.AccessFlags; +import java.lang.classfile.ClassModel; +import java.lang.classfile.FieldModel; +import java.lang.classfile.MethodModel; +import java.lang.classfile.attribute.InnerClassInfo; +import java.lang.classfile.attribute.InnerClassesAttribute; +import java.nio.file.Files; +import java.nio.file.Path; + +import static java.lang.classfile.ClassFile.*; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class UndefinedAccessFlagTest { + + final ToolBox toolBox = new ToolBox(); + + enum TestLocation { + NONE(false), CLASS, FIELD, METHOD, INNER_CLASS(false); + + final boolean fails; + TestLocation() { this(true); } + TestLocation(boolean fails) { this.fails = fails; } + } + + @ParameterizedTest + @EnumSource(TestLocation.class) + void test(TestLocation location) throws Throwable { + var cf = of(); + ClassModel cm; + try (var is = UndefinedAccessFlagTest.class.getResourceAsStream( + "/UndefinedAccessFlagTest$SampleInnerClass.class" + )) { + cm = cf.parse(is.readAllBytes()); + } + var bytes = cf.transform(cm, (cb, ce) -> { + switch (ce) { + case AccessFlags flags when location == TestLocation.CLASS -> cb + .withFlags(flags.flagsMask() | ACC_PRIVATE); + case FieldModel f when location == TestLocation.FIELD -> cb + .transformField(f, (fb, fe) -> { + if (fe instanceof AccessFlags flags) { + fb.withFlags(flags.flagsMask() | ACC_SYNCHRONIZED); + } else { + fb.with(fe); + } + }); + case MethodModel m when location == TestLocation.METHOD -> cb + .transformMethod(m, (mb, me) -> { + if (me instanceof AccessFlags flags) { + mb.withFlags(flags.flagsMask() | ACC_INTERFACE); + } else { + mb.with(me); + } + }); + case InnerClassesAttribute attr when location == TestLocation.INNER_CLASS -> cb + .with(InnerClassesAttribute.of(attr.classes().stream() + .map(ic -> InnerClassInfo.of(ic.innerClass(), ic.outerClass(), ic.innerName(), ic.flagsMask() | 0x0020)) + .toList())); + default -> cb.with(ce); + } + }); + + Files.write(Path.of("transformed.class"), bytes); + + var lines = new JavapTask(toolBox) + .classes("transformed.class") + .options("-c", "-p", "-v") + .run(location.fails ? Task.Expect.FAIL : Task.Expect.SUCCESS) + .writeAll() + .getOutputLines(Task.OutputKind.DIRECT); + + // No termination when access flag error happens + assertTrue(lines.stream().anyMatch(l -> l.contains("java.lang.String field;"))); + assertTrue(lines.stream().anyMatch(l -> l.contains("UndefinedAccessFlagTest$SampleInnerClass();"))); + assertTrue(lines.stream().anyMatch(l -> l.contains("void method();"))); + assertTrue(lines.stream().anyMatch(l -> l.contains("SampleInnerClass=class UndefinedAccessFlagTest$SampleInnerClass of class UndefinedAccessFlagTest"))); + + // Remove non-error lines + assertTrue(lines.removeIf(st -> !st.startsWith("Error:"))); + // Desired locations has errors + assertTrue(location == TestLocation.NONE || !lines.isEmpty()); + // Access Flag errors only + assertTrue(lines.stream().allMatch(l -> l.contains("Access Flags:")), () -> String.join("\n", lines)); + } + + static class SampleInnerClass { + String field; + void method() {} + } +} From 72ca7bafcd49a98c1fe09da72e4e47683f052e9d Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Sat, 22 Jun 2024 12:16:50 +0000 Subject: [PATCH 079/102] 8334708: FFM: two javadoc problems Reviewed-by: mcimadamore --- src/java.base/share/classes/java/lang/foreign/Linker.java | 2 +- src/java.base/share/classes/java/lang/foreign/MemoryLayout.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/lang/foreign/Linker.java b/src/java.base/share/classes/java/lang/foreign/Linker.java index 545a83984f867..fd6e820d01662 100644 --- a/src/java.base/share/classes/java/lang/foreign/Linker.java +++ b/src/java.base/share/classes/java/lang/foreign/Linker.java @@ -222,7 +222,7 @@ *
      * MemoryLayout.structLayout(
      *     ValueLayout.JAVA_INT.withName("x"),
    - *     MemoryLayout.paddingLayout(32),
    + *     MemoryLayout.paddingLayout(4),
      *     ValueLayout.JAVA_LONG.withName("y")
      * );
      * 
    diff --git a/src/java.base/share/classes/java/lang/foreign/MemoryLayout.java b/src/java.base/share/classes/java/lang/foreign/MemoryLayout.java index 372b10aab1389..989fc134a2628 100644 --- a/src/java.base/share/classes/java/lang/foreign/MemoryLayout.java +++ b/src/java.base/share/classes/java/lang/foreign/MemoryLayout.java @@ -369,7 +369,7 @@ * int size = ... * MemorySegment points = ... * for (int i = 0 ; i < size ; i++) { - * ... POINT_ARR_X.get(segment, 0L, (long)i) ... + * ... POINT_ARR_X.get(points, 0L, (long)i) ... * } * } * From 652784c803863f40ee3d81695a19e705365cb800 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Sj=C3=B6len?= Date: Sun, 23 Jun 2024 08:19:28 +0000 Subject: [PATCH 080/102] 8334392: Switch RNG in NMT's treap Reviewed-by: stuefe, azafari, gziemski --- src/hotspot/share/nmt/nmtTreap.hpp | 24 +++++++++++------------ test/hotspot/gtest/nmt/test_nmt_treap.cpp | 12 ++++++++---- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/hotspot/share/nmt/nmtTreap.hpp b/src/hotspot/share/nmt/nmtTreap.hpp index 97a5cddcb81ed..99c8655525c95 100644 --- a/src/hotspot/share/nmt/nmtTreap.hpp +++ b/src/hotspot/share/nmt/nmtTreap.hpp @@ -25,13 +25,12 @@ #ifndef SHARE_NMT_NMTTREAP_HPP #define SHARE_NMT_NMTTREAP_HPP -#include "memory/allocation.hpp" #include "runtime/os.hpp" #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/growableArray.hpp" #include "utilities/macros.hpp" -#include +#include "utilities/powerOfTwo.hpp" // A Treap is a self-balanced binary tree where each node is equipped with a // priority. It adds the invariant that the priority of a parent P is strictly larger @@ -84,16 +83,16 @@ class Treap { private: ALLOCATOR _allocator; TreapNode* _root; + + // A random number + static constexpr const uint64_t _initial_seed = 0xC8DD2114AE0543A3; uint64_t _prng_seed; int _node_count; uint64_t prng_next() { - // Taken directly off of JFRPrng - static const constexpr uint64_t PrngMult = 0x5DEECE66DLL; - static const constexpr uint64_t PrngAdd = 0xB; - static const constexpr uint64_t PrngModPower = 48; - static const constexpr uint64_t PrngModMask = (static_cast(1) << PrngModPower) - 1; - _prng_seed = (PrngMult * _prng_seed + PrngAdd) & PrngModMask; + uint64_t first_half = os::next_random(_prng_seed); + uint64_t second_half = os::next_random(_prng_seed >> 32); + _prng_seed = first_half | (second_half << 32); return _prng_seed; } @@ -173,9 +172,9 @@ class Treap { #ifdef ASSERT void verify_self() { // A balanced binary search tree should have a depth on the order of log(N). - // We take the ceiling of log_2(N + 1) * 2.5 as our maximum bound. + // We take the ceiling of log_2(N + 1) * 3 as our maximum bound. // For comparison, a RB-tree has a proven max depth of log_2(N + 1) * 2. - const int expected_maximum_depth = ceil((log(this->_node_count+1) / log(2)) * 2.5); + const int expected_maximum_depth = ceil(log2i(this->_node_count+1) * 3); // Find the maximum depth through DFS and ensure that the priority invariant holds. int maximum_depth_found = 0; @@ -225,11 +224,10 @@ class Treap { public: NONCOPYABLE(Treap); - Treap(uint64_t seed = static_cast(os::random()) - | (static_cast(os::random()) << 32)) + Treap() : _allocator(), _root(nullptr), - _prng_seed(seed), + _prng_seed(_initial_seed), _node_count(0) {} ~Treap() { diff --git a/test/hotspot/gtest/nmt/test_nmt_treap.cpp b/test/hotspot/gtest/nmt/test_nmt_treap.cpp index 9cd7f36aad6a7..3c98029d28f58 100644 --- a/test/hotspot/gtest/nmt/test_nmt_treap.cpp +++ b/test/hotspot/gtest/nmt/test_nmt_treap.cpp @@ -300,7 +300,9 @@ TEST_VM_F(TreapTest, VerifyItThroughStressTest) { } else { treap.remove(i); } - verify_it(treap); + if (i % 100 == 0) { + verify_it(treap); + } } for (int i = 0; i < ten_thousand; i++) { int r = os::random(); @@ -309,14 +311,16 @@ TEST_VM_F(TreapTest, VerifyItThroughStressTest) { } else { treap.remove(i); } - verify_it(treap); + if (i % 100 == 0) { + verify_it(treap); + } } } { // Make a very large treap and verify at the end struct Nothing {}; TreapCHeap treap; - constexpr const int five_million = 5000000; - for (int i = 0; i < five_million; i++) { + constexpr const int one_hundred_thousand = 100000; + for (int i = 0; i < one_hundred_thousand; i++) { treap.upsert(i, Nothing()); } verify_it(treap); From eb110bdc6e8bcb87b9b8b24ac66eb9b4c57106fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Sj=C3=B6len?= Date: Sun, 23 Jun 2024 12:33:38 +0000 Subject: [PATCH 081/102] 8334180: NMT gtests introduced with 8312132 should be labeled as NMT Reviewed-by: gziemski, stuefe --- src/hotspot/share/nmt/memoryFileTracker.hpp | 4 ++-- src/hotspot/share/nmt/nmtTreap.hpp | 4 ++-- src/hotspot/share/nmt/vmatree.hpp | 2 +- .../gtest/nmt/test_nmt_memoryfiletracker.cpp | 4 ++-- .../gtest/nmt/test_nmt_nativecallstackstorage.cpp | 6 +++--- test/hotspot/gtest/nmt/test_nmt_treap.cpp | 14 +++++++------- test/hotspot/gtest/nmt/test_vmatree.cpp | 12 ++++++------ 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/hotspot/share/nmt/memoryFileTracker.hpp b/src/hotspot/share/nmt/memoryFileTracker.hpp index f662893af0a6b..432b6f9d99e1e 100644 --- a/src/hotspot/share/nmt/memoryFileTracker.hpp +++ b/src/hotspot/share/nmt/memoryFileTracker.hpp @@ -40,7 +40,7 @@ // storage with its own memory space separate from the process. // A typical example of such a file is a memory mapped file. class MemoryFileTracker { - friend class MemoryFileTrackerTest; + friend class NMTMemoryFileTrackerTest; // Provide caching of stacks. NativeCallStackStorage _stack_storage; @@ -48,7 +48,7 @@ class MemoryFileTracker { public: class MemoryFile : public CHeapObj { friend MemoryFileTracker; - friend class MemoryFileTrackerTest; + friend class NMTMemoryFileTrackerTest; const char* _descriptive_name; VirtualMemorySnapshot _summary; VMATree _tree; diff --git a/src/hotspot/share/nmt/nmtTreap.hpp b/src/hotspot/share/nmt/nmtTreap.hpp index 99c8655525c95..700634974393a 100644 --- a/src/hotspot/share/nmt/nmtTreap.hpp +++ b/src/hotspot/share/nmt/nmtTreap.hpp @@ -52,8 +52,8 @@ template class Treap { - friend class VMATreeTest; - friend class TreapTest; + friend class NMTVMATreeTest; + friend class NMTTreapTest; public: class TreapNode { friend Treap; diff --git a/src/hotspot/share/nmt/vmatree.hpp b/src/hotspot/share/nmt/vmatree.hpp index b8946b3b8c155..a93c282f4d272 100644 --- a/src/hotspot/share/nmt/vmatree.hpp +++ b/src/hotspot/share/nmt/vmatree.hpp @@ -38,7 +38,7 @@ // or from committed memory of a certain MEMFLAGS to committed memory of a different MEMFLAGS. // The set of points is stored in a balanced binary tree for efficient querying and updating. class VMATree { - friend class VMATreeTest; + friend class NMTVMATreeTest; // A position in memory. public: using position = size_t; diff --git a/test/hotspot/gtest/nmt/test_nmt_memoryfiletracker.cpp b/test/hotspot/gtest/nmt/test_nmt_memoryfiletracker.cpp index 018b9c49d544e..d32c8192f2cd0 100644 --- a/test/hotspot/gtest/nmt/test_nmt_memoryfiletracker.cpp +++ b/test/hotspot/gtest/nmt/test_nmt_memoryfiletracker.cpp @@ -27,7 +27,7 @@ #include "nmt/memTracker.hpp" #include "unittest.hpp" -class MemoryFileTrackerTest : public testing::Test { +class NMTMemoryFileTrackerTest : public testing::Test { public: size_t sz(int x) { return (size_t) x; } void basics() { @@ -48,6 +48,6 @@ class MemoryFileTrackerTest : public testing::Test { }; }; -TEST_VM_F(MemoryFileTrackerTest, Basics) { +TEST_VM_F(NMTMemoryFileTrackerTest, Basics) { this->basics(); } diff --git a/test/hotspot/gtest/nmt/test_nmt_nativecallstackstorage.cpp b/test/hotspot/gtest/nmt/test_nmt_nativecallstackstorage.cpp index 92c2dde210415..71e924b7b9dc7 100644 --- a/test/hotspot/gtest/nmt/test_nmt_nativecallstackstorage.cpp +++ b/test/hotspot/gtest/nmt/test_nmt_nativecallstackstorage.cpp @@ -29,9 +29,9 @@ using NCSS = NativeCallStackStorage; -class NativeCallStackStorageTest : public testing::Test {}; +class NMTNativeCallStackStorageTest : public testing::Test {}; -TEST_VM_F(NativeCallStackStorageTest, DoNotStoreStackIfNotDetailed) { +TEST_VM_F(NMTNativeCallStackStorageTest, DoNotStoreStackIfNotDetailed) { NativeCallStack ncs{}; NCSS ncss(false); NCSS::StackIndex si = ncss.push(ncs); @@ -40,7 +40,7 @@ TEST_VM_F(NativeCallStackStorageTest, DoNotStoreStackIfNotDetailed) { EXPECT_TRUE(ncs_received.is_empty()); } -TEST_VM_F(NativeCallStackStorageTest, CollisionsReceiveDifferentIndexes) { +TEST_VM_F(NMTNativeCallStackStorageTest, CollisionsReceiveDifferentIndexes) { constexpr const int nr_of_stacks = 10; NativeCallStack ncs_arr[nr_of_stacks]; for (int i = 0; i < nr_of_stacks; i++) { diff --git a/test/hotspot/gtest/nmt/test_nmt_treap.cpp b/test/hotspot/gtest/nmt/test_nmt_treap.cpp index 3c98029d28f58..6e04cfce1a82d 100644 --- a/test/hotspot/gtest/nmt/test_nmt_treap.cpp +++ b/test/hotspot/gtest/nmt/test_nmt_treap.cpp @@ -28,7 +28,7 @@ #include "runtime/os.hpp" #include "unittest.hpp" -class TreapTest : public testing::Test { +class NMTTreapTest : public testing::Test { public: struct Cmp { static int cmp(int a, int b) { @@ -147,15 +147,15 @@ class TreapTest : public testing::Test { } }; -TEST_VM_F(TreapTest, InsertingDuplicatesResultsInOneValue) { +TEST_VM_F(NMTTreapTest, InsertingDuplicatesResultsInOneValue) { this->inserting_duplicates_results_in_one_value(); } -TEST_VM_F(TreapTest, TreapOughtNotLeak) { +TEST_VM_F(NMTTreapTest, TreapOughtNotLeak) { this->treap_ought_not_leak(); } -TEST_VM_F(TreapTest, TestVisitors) { +TEST_VM_F(NMTTreapTest, TestVisitors) { { // Tests with 'default' ordering (ascending) TreapCHeap treap; using Node = TreapCHeap::TreapNode; @@ -259,11 +259,11 @@ TEST_VM_F(TreapTest, TestVisitors) { } } -TEST_VM_F(TreapTest, TestFind) { +TEST_VM_F(NMTTreapTest, TestFind) { test_find(); } -TEST_VM_F(TreapTest, TestClosestLeq) { +TEST_VM_F(NMTTreapTest, TestClosestLeq) { using Node = TreapCHeap::TreapNode; { TreapCHeap treap; @@ -289,7 +289,7 @@ TEST_VM_F(TreapTest, TestClosestLeq) { #ifdef ASSERT -TEST_VM_F(TreapTest, VerifyItThroughStressTest) { +TEST_VM_F(NMTTreapTest, VerifyItThroughStressTest) { { // Repeatedly verify a treap of moderate size TreapCHeap treap; constexpr const int ten_thousand = 10000; diff --git a/test/hotspot/gtest/nmt/test_vmatree.cpp b/test/hotspot/gtest/nmt/test_vmatree.cpp index 17eb61352cd0f..1c1bc31b5b498 100644 --- a/test/hotspot/gtest/nmt/test_vmatree.cpp +++ b/test/hotspot/gtest/nmt/test_vmatree.cpp @@ -34,14 +34,14 @@ using Tree = VMATree; using Node = Tree::TreapNode; using NCS = NativeCallStackStorage; -class VMATreeTest : public testing::Test { +class NMTVMATreeTest : public testing::Test { public: NCS ncs; constexpr static const int si_len = 2; NCS::StackIndex si[si_len]; NativeCallStack stacks[si_len]; - VMATreeTest() : ncs(true) { + NMTVMATreeTest() : ncs(true) { stacks[0] = make_stack(0xA); stacks[1] = make_stack(0xB); si[0] = ncs.push(stacks[0]); @@ -172,7 +172,7 @@ class VMATreeTest : public testing::Test { -TEST_VM_F(VMATreeTest, OverlappingReservationsResultInTwoNodes) { +TEST_VM_F(NMTVMATreeTest, OverlappingReservationsResultInTwoNodes) { VMATree::RegionData rd{si[0], mtTest}; Tree tree; for (int i = 99; i >= 0; i--) { @@ -182,7 +182,7 @@ TEST_VM_F(VMATreeTest, OverlappingReservationsResultInTwoNodes) { } // Low-level tests inspecting the state of the tree. -TEST_VM_F(VMATreeTest, LowLevel) { +TEST_VM_F(NMTVMATreeTest, LowLevel) { adjacent_2_nodes(VMATree::empty_regiondata); remove_all_leaves_empty_tree(VMATree::empty_regiondata); commit_middle(VMATree::empty_regiondata); @@ -268,7 +268,7 @@ TEST_VM_F(VMATreeTest, LowLevel) { } // Tests for summary accounting -TEST_VM_F(VMATreeTest, SummaryAccounting) { +TEST_VM_F(NMTVMATreeTest, SummaryAccounting) { { // Fully enclosed re-reserving works correctly. Tree::RegionData rd(NCS::StackIndex(), mtTest); Tree::RegionData rd2(NCS::StackIndex(), mtNMT); @@ -416,7 +416,7 @@ struct SimpleVMATracker : public CHeapObj { constexpr const size_t SimpleVMATracker::num_pages; -TEST_VM_F(VMATreeTest, TestConsistencyWithSimpleTracker) { +TEST_VM_F(NMTVMATreeTest, TestConsistencyWithSimpleTracker) { // In this test we use ASSERT macros from gtest instead of EXPECT // as any error will propagate and become larger as the test progresses. SimpleVMATracker* tr = new SimpleVMATracker(); From 7baddc202a9ab2b85401aa05f827678b514ebf55 Mon Sep 17 00:00:00 2001 From: SendaoYan Date: Sun, 23 Jun 2024 18:00:28 +0000 Subject: [PATCH 082/102] 8334339: Test java/nio/file/attribute/BasicFileAttributeView/CreationTime.java fails on alinux3 Reviewed-by: alanb --- .../BasicFileAttributeView/CreationTime.java | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/test/jdk/java/nio/file/attribute/BasicFileAttributeView/CreationTime.java b/test/jdk/java/nio/file/attribute/BasicFileAttributeView/CreationTime.java index 1898f584bcd63..ad85da7ae63b1 100644 --- a/test/jdk/java/nio/file/attribute/BasicFileAttributeView/CreationTime.java +++ b/test/jdk/java/nio/file/attribute/BasicFileAttributeView/CreationTime.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,15 +21,24 @@ * questions. */ -/* @test - * @bug 8011536 8151430 8316304 +/* @test id=tmp + * @bug 8011536 8151430 8316304 8334339 * @summary Basic test for creationTime attribute on platforms/file systems - * that support it. + * that support it, tests using /tmp directory. * @library ../.. /test/lib * @build jdk.test.lib.Platform * @run main CreationTime */ +/* @test id=cwd + * @summary Basic test for creationTime attribute on platforms/file systems + * that support it, tests using the test scratch directory, the test + * scratch directory maybe at diff disk partition to /tmp on linux. + * @library ../.. /test/lib + * @build jdk.test.lib.Platform + * @run main CreationTime . + */ + import java.lang.foreign.Linker; import java.nio.file.Path; import java.nio.file.Files; @@ -38,6 +47,7 @@ import java.io.IOException; import jdk.test.lib.Platform; +import jtreg.SkippedException; public class CreationTime { @@ -68,8 +78,14 @@ static void test(Path top) throws IOException { FileTime creationTime = creationTime(file); Instant now = Instant.now(); if (Math.abs(creationTime.toMillis()-now.toEpochMilli()) > 10000L) { - err.println("File creation time reported as: " + creationTime); - throw new RuntimeException("Expected to be close to: " + now); + System.out.println("creationTime.toMillis() == " + creationTime.toMillis()); + // If the file system doesn't support birth time, then skip this test + if (creationTime.toMillis() == 0) { + throw new SkippedException("birth time not support for: " + file); + } else { + err.println("File creation time reported as: " + creationTime); + throw new RuntimeException("Expected to be close to: " + now); + } } /** @@ -95,7 +111,7 @@ static void test(Path top) throws IOException { // Creation time updates are not supported on Linux supportsCreationTimeWrite = false; } - System.out.println("supportsCreationTimeRead == " + supportsCreationTimeRead); + System.out.println(top + " supportsCreationTimeRead == " + supportsCreationTimeRead); /** * If the creation-time attribute is supported then change the file's @@ -127,7 +143,12 @@ static void test(Path top) throws IOException { public static void main(String[] args) throws IOException { // create temporary directory to run tests - Path dir = TestUtil.createTemporaryDirectory(); + Path dir; + if (args.length == 0) { + dir = TestUtil.createTemporaryDirectory(); + } else { + dir = TestUtil.createTemporaryDirectory(args[0]); + } try { test(dir); } finally { From a4582a8957d604b50249e1f59679393966456a14 Mon Sep 17 00:00:00 2001 From: Zhao Song Date: Mon, 24 Jun 2024 05:15:32 +0000 Subject: [PATCH 083/102] 8334166: Enable binary check Reviewed-by: kcr, ihse, prr, erikj --- .jcheck/conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jcheck/conf b/.jcheck/conf index ecc41e341d926..f666ff69d5ee3 100644 --- a/.jcheck/conf +++ b/.jcheck/conf @@ -5,7 +5,7 @@ version=24 [checks] error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace,problemlists -warning=issuestitle +warning=issuestitle,binary [repository] tags=(?:jdk-(?:[1-9]([0-9]*)(?:\.(?:0|[1-9][0-9]*)){0,4})(?:\+(?:(?:[0-9]+))|(?:-ga)))|(?:jdk[4-9](?:u\d{1,3})?-(?:(?:b\d{2,3})|(?:ga)))|(?:hs\d\d(?:\.\d{1,2})?-b\d\d) From 863b2a991df9204560c4680fc10dd0f68b260217 Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Mon, 24 Jun 2024 06:06:45 +0000 Subject: [PATCH 084/102] 8329994: Zap alignment padding bits for ArrayOops in non-release builds Reviewed-by: ayang, sjohanss --- src/hotspot/share/gc/shared/memAllocator.cpp | 15 +++++++++++++++ src/hotspot/share/gc/shared/memAllocator.hpp | 1 + src/hotspot/share/gc/z/zObjArrayAllocator.cpp | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/hotspot/share/gc/shared/memAllocator.cpp b/src/hotspot/share/gc/shared/memAllocator.cpp index 156b55c104621..318ab00188b3d 100644 --- a/src/hotspot/share/gc/shared/memAllocator.cpp +++ b/src/hotspot/share/gc/shared/memAllocator.cpp @@ -388,6 +388,7 @@ oop ObjArrayAllocator::initialize(HeapWord* mem) const { assert(_length >= 0, "length should be non-negative"); if (_do_zero) { mem_clear(mem); + mem_zap_start_padding(mem); mem_zap_end_padding(mem); } arrayOopDesc::set_length(mem, _length); @@ -395,6 +396,20 @@ oop ObjArrayAllocator::initialize(HeapWord* mem) const { } #ifndef PRODUCT +void ObjArrayAllocator::mem_zap_start_padding(HeapWord* mem) const { + const BasicType element_type = ArrayKlass::cast(_klass)->element_type(); + const size_t base_offset_in_bytes = arrayOopDesc::base_offset_in_bytes(element_type); + const size_t header_size_in_bytes = arrayOopDesc::header_size_in_bytes(); + + const address base = reinterpret_cast
    (mem) + base_offset_in_bytes; + const address header_end = reinterpret_cast
    (mem) + header_size_in_bytes; + + if (header_end < base) { + const size_t padding_in_bytes = base - header_end; + Copy::fill_to_bytes(header_end, padding_in_bytes, heapPaddingByteVal); + } +} + void ObjArrayAllocator::mem_zap_end_padding(HeapWord* mem) const { const size_t length_in_bytes = static_cast(_length) << ArrayKlass::cast(_klass)->log2_element_size(); const BasicType element_type = ArrayKlass::cast(_klass)->element_type(); diff --git a/src/hotspot/share/gc/shared/memAllocator.hpp b/src/hotspot/share/gc/shared/memAllocator.hpp index a0450af4450ec..ec67616adbaaf 100644 --- a/src/hotspot/share/gc/shared/memAllocator.hpp +++ b/src/hotspot/share/gc/shared/memAllocator.hpp @@ -94,6 +94,7 @@ class ObjArrayAllocator: public MemAllocator { const int _length; const bool _do_zero; + void mem_zap_start_padding(HeapWord* mem) const PRODUCT_RETURN; void mem_zap_end_padding(HeapWord* mem) const PRODUCT_RETURN; public: diff --git a/src/hotspot/share/gc/z/zObjArrayAllocator.cpp b/src/hotspot/share/gc/z/zObjArrayAllocator.cpp index 1b2f3804e3d24..ad19f273dcf0f 100644 --- a/src/hotspot/share/gc/z/zObjArrayAllocator.cpp +++ b/src/hotspot/share/gc/z/zObjArrayAllocator.cpp @@ -139,6 +139,8 @@ oop ZObjArrayAllocator::initialize(HeapWord* mem) const { return true; }; + mem_zap_start_padding(mem); + if (!initialize_memory()) { // Re-color with 11 remset bits if we got intercepted by a GC safepoint const bool result = initialize_memory(); From 13dce296fc3924b269757ce1279c57afe18faeeb Mon Sep 17 00:00:00 2001 From: Richard Reingruber Date: Mon, 24 Jun 2024 06:33:39 +0000 Subject: [PATCH 085/102] 8334560: [PPC64]: postalloc_expand_java_dynamic_call_sched does not copy all fields Reviewed-by: mbaesken, mdoerr --- src/hotspot/cpu/ppc/ppc.ad | 1 + test/jdk/com/sun/jdi/EATests.java | 91 +++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) diff --git a/src/hotspot/cpu/ppc/ppc.ad b/src/hotspot/cpu/ppc/ppc.ad index 8917b344e54cb..38485da958132 100644 --- a/src/hotspot/cpu/ppc/ppc.ad +++ b/src/hotspot/cpu/ppc/ppc.ad @@ -3429,6 +3429,7 @@ encode %{ call->_oop_map = _oop_map; call->_jvms = _jvms; call->_jvmadj = _jvmadj; + call->_has_ea_local_in_scope = _has_ea_local_in_scope; call->_in_rms = _in_rms; call->_nesting = _nesting; call->_override_symbolic_info = _override_symbolic_info; diff --git a/test/jdk/com/sun/jdi/EATests.java b/test/jdk/com/sun/jdi/EATests.java index cd80d01a07f11..7285948165989 100644 --- a/test/jdk/com/sun/jdi/EATests.java +++ b/test/jdk/com/sun/jdi/EATests.java @@ -289,6 +289,7 @@ public static void main(String[] args) { // Relocking test cases new EARelockingSimpleTarget() .run(); new EARelockingSimpleWithAccessInOtherThreadTarget() .run(); + new EARelockingSimpleWithAccessInOtherThread_02_DynamicCall_Target() .run(); new EARelockingRecursiveTarget() .run(); new EARelockingNestedInflatedTarget() .run(); new EARelockingNestedInflated_02Target() .run(); @@ -413,6 +414,7 @@ protected void runTests() throws Exception { // Relocking test cases new EARelockingSimple() .run(this); new EARelockingSimpleWithAccessInOtherThread() .run(this); + new EARelockingSimpleWithAccessInOtherThread_02_DynamicCall() .run(this); new EARelockingRecursive() .run(this); new EARelockingNestedInflated() .run(this); new EARelockingNestedInflated_02() .run(this); @@ -1851,6 +1853,95 @@ public int getExpectedIResult() { ///////////////////////////////////////////////////////////////////////////// +// The debugger reads and publishes an object with eliminated locking to an instance field. +// A 2nd thread in the debuggee finds it there and changes its state using a synchronized method. +// Without eager relocking the accesses are unsynchronized which can be observed. +// This is a variant of EARelockingSimpleWithAccessInOtherThread with a dynamic call (not devirtualized). +class EARelockingSimpleWithAccessInOtherThread_02_DynamicCall extends EATestCaseBaseDebugger { + + public void runTestCase() throws Exception { + BreakpointEvent bpe = resumeTo(TARGET_TESTCASE_BASE_NAME, "dontinline_brkpt", "()V"); + printStack(bpe.thread()); + String l1ClassName = EARelockingSimpleWithAccessInOtherThread_02_DynamicCall_Target.SyncCounter.class.getName(); + ObjectReference ctr = getLocalRef(bpe.thread().frame(2), l1ClassName, "l1"); + setField(testCase, "sharedCounter", ctr); + terminateEndlessLoop(); + } +} + +class EARelockingSimpleWithAccessInOtherThread_02_DynamicCall_Target extends EATestCaseBaseTarget { + + public static final BrkPtDispatchA[] disp = + {new BrkPtDispatchA(), new BrkPtDispatchB(), new BrkPtDispatchC(), new BrkPtDispatchD()}; + + public static class BrkPtDispatchA { + public EATestCaseBaseTarget testCase; + public void dontinline_brkpt() { testCase.dontinline_brkpt(); } + } + + public static class BrkPtDispatchB extends BrkPtDispatchA { + @Override + public void dontinline_brkpt() { testCase.dontinline_brkpt(); } + } + + public static class BrkPtDispatchC extends BrkPtDispatchA { + @Override + public void dontinline_brkpt() { testCase.dontinline_brkpt(); } + } + + public static class BrkPtDispatchD extends BrkPtDispatchA { + @Override + public void dontinline_brkpt() { + testCase.dontinline_brkpt(); + } + } + + public static class SyncCounter { + private int val; + public synchronized int inc() { return val++; } + } + + public volatile SyncCounter sharedCounter; + + @Override + public void setUp() { + super.setUp(); + testMethodDepth = 2; + for (BrkPtDispatchA d : disp) { + d.testCase = this; + } + doLoop = true; + new Thread(() -> { + while (doLoop) { + SyncCounter ctr = sharedCounter; + if (ctr != null) { + ctr.inc(); + } + } + }).start(); + } + + public int dispCount; + public void dontinline_testMethod() { + SyncCounter l1 = new SyncCounter(); + synchronized (l1) { // Eliminated locking + l1.inc(); + // Use different types for the subsequent call to prevent devirtualization. + BrkPtDispatchA d = disp[(dispCount++) & 3]; + d.dontinline_brkpt(); // Dynamic call. Debugger publishes l1 to sharedCounter. + iResult = l1.inc(); // Changes by the 2nd thread will be observed if l1 + // was not relocked before passing it to the debugger. + } + } + + @Override + public int getExpectedIResult() { + return 1; + } +} + +///////////////////////////////////////////////////////////////////////////// + // Test recursive locking class EARelockingRecursiveTarget extends EATestCaseBaseTarget { From edf7f055ee010a2c19bce26c15726d5b58e2e832 Mon Sep 17 00:00:00 2001 From: Emanuel Peter Date: Mon, 24 Jun 2024 07:14:57 +0000 Subject: [PATCH 086/102] 8334083: C2 SuperWord: TestCompatibleUseDefTypeSize.java fails with -XX:+AlignVector after JDK-8325155 Reviewed-by: chagedorn, kvn --- .../loopopts/superword/TestCompatibleUseDefTypeSize.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestCompatibleUseDefTypeSize.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestCompatibleUseDefTypeSize.java index e1aa91369d473..43580f4dee246 100644 --- a/test/hotspot/jtreg/compiler/loopopts/superword/TestCompatibleUseDefTypeSize.java +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestCompatibleUseDefTypeSize.java @@ -359,6 +359,7 @@ static Object[] test2(byte[] src, char[] dst) { IRNode.ADD_VI, "> 0", IRNode.STORE_VECTOR, "> 0"}, applyIfPlatform = {"64-bit", "true"}, + applyIf = {"AlignVector", "false"}, // a[i] and a[i+1] cannot both be aligned. applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"}) // Used to not vectorize because of "alignment boundaries". // Assume 64 byte vector width: @@ -376,6 +377,7 @@ static Object[] test3(int[] a, int[] b) { IRNode.ADD_VI, "> 0", IRNode.STORE_VECTOR, "> 0"}, applyIfPlatform = {"64-bit", "true"}, + applyIf = {"AlignVector", "false"}, // a[i] and a[i+1] cannot both be aligned. applyIfCPUFeatureOr = {"sse4.1", "true", "asimd", "true"}) // same as test3, but hand-unrolled static Object[] test4(int[] a, int[] b) { From 05a63d80b9c1e312512c707ccf6b255c16a9edf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Sj=C3=B6len?= Date: Mon, 24 Jun 2024 07:51:01 +0000 Subject: [PATCH 087/102] 8334489: Add function os::used_memory Reviewed-by: eosterlund, dholmes, stuefe --- src/hotspot/share/runtime/os.cpp | 17 +++++++++++++++++ src/hotspot/share/runtime/os.hpp | 1 + 2 files changed, 18 insertions(+) diff --git a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp index bdf93e1d3b403..9860251fc3308 100644 --- a/src/hotspot/share/runtime/os.cpp +++ b/src/hotspot/share/runtime/os.cpp @@ -78,6 +78,10 @@ #include "utilities/macros.hpp" #include "utilities/powerOfTwo.hpp" +#ifdef LINUX +#include "osContainer_linux.hpp" +#endif + #ifndef _WINDOWS # include #endif @@ -2064,6 +2068,19 @@ static void assert_nonempty_range(const char* addr, size_t bytes) { p2i(addr), p2i(addr) + bytes); } +julong os::used_memory() { +#ifdef LINUX + if (OSContainer::is_containerized()) { + jlong mem_usage = OSContainer::memory_usage_in_bytes(); + if (mem_usage > 0) { + return mem_usage; + } + } +#endif + return os::physical_memory() - os::available_memory(); +} + + bool os::commit_memory(char* addr, size_t bytes, bool executable) { assert_nonempty_range(addr, bytes); bool res = pd_commit_memory(addr, bytes, executable); diff --git a/src/hotspot/share/runtime/os.hpp b/src/hotspot/share/runtime/os.hpp index ce7a07d4c43a0..f3f44ddb2e659 100644 --- a/src/hotspot/share/runtime/os.hpp +++ b/src/hotspot/share/runtime/os.hpp @@ -336,6 +336,7 @@ class os: AllStatic { // than "free" memory (`MemFree` in `/proc/meminfo`) because Linux can free memory // aggressively (e.g. clear caches) so that it becomes available. static julong available_memory(); + static julong used_memory(); static julong free_memory(); static jlong total_swap_space(); From 05ff3185edd25b381a97f6879f496e97b62dddc2 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Mon, 24 Jun 2024 08:46:10 +0000 Subject: [PATCH 088/102] 8334594: Generational ZGC: Deadlock after OopMap rewrites in 8331572 Reviewed-by: stefank, eosterlund, coleenp, zgu --- src/hotspot/share/gc/shared/gcVMOperations.cpp | 2 +- .../share/gc/shenandoah/shenandoahVMOperations.cpp | 2 +- src/hotspot/share/gc/x/xDriver.cpp | 2 +- src/hotspot/share/gc/z/zGeneration.cpp | 2 +- src/hotspot/share/interpreter/oopMapCache.cpp | 9 ++++++--- src/hotspot/share/interpreter/oopMapCache.hpp | 4 ++-- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/hotspot/share/gc/shared/gcVMOperations.cpp b/src/hotspot/share/gc/shared/gcVMOperations.cpp index 4cf1a4ccbafd0..4cc75f4745991 100644 --- a/src/hotspot/share/gc/shared/gcVMOperations.cpp +++ b/src/hotspot/share/gc/shared/gcVMOperations.cpp @@ -132,7 +132,7 @@ bool VM_GC_Operation::doit_prologue() { void VM_GC_Operation::doit_epilogue() { // GC thread root traversal likely used OopMapCache a lot, which // might have created lots of old entries. Trigger the cleanup now. - OopMapCache::trigger_cleanup(); + OopMapCache::try_trigger_cleanup(); if (Universe::has_reference_pending_list()) { Heap_lock->notify_all(); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp b/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp index af221550c69ab..9d2782502fefc 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahVMOperations.cpp @@ -44,7 +44,7 @@ void VM_ShenandoahOperation::doit_epilogue() { assert(!ShenandoahHeap::heap()->has_gc_state_changed(), "GC State was not synchronized to java threads."); // GC thread root traversal likely used OopMapCache a lot, which // might have created lots of old entries. Trigger the cleanup now. - OopMapCache::trigger_cleanup(); + OopMapCache::try_trigger_cleanup(); } bool VM_ShenandoahReferenceOperation::doit_prologue() { diff --git a/src/hotspot/share/gc/x/xDriver.cpp b/src/hotspot/share/gc/x/xDriver.cpp index c477f4a135c32..3e6fd03134e12 100644 --- a/src/hotspot/share/gc/x/xDriver.cpp +++ b/src/hotspot/share/gc/x/xDriver.cpp @@ -134,7 +134,7 @@ class VM_XOperation : public VM_Operation { // GC thread root traversal likely used OopMapCache a lot, which // might have created lots of old entries. Trigger the cleanup now. - OopMapCache::trigger_cleanup(); + OopMapCache::try_trigger_cleanup(); } bool gc_locked() const { diff --git a/src/hotspot/share/gc/z/zGeneration.cpp b/src/hotspot/share/gc/z/zGeneration.cpp index 5c3afa9db8cc6..be86550d32171 100644 --- a/src/hotspot/share/gc/z/zGeneration.cpp +++ b/src/hotspot/share/gc/z/zGeneration.cpp @@ -456,7 +456,7 @@ class VM_ZOperation : public VM_Operation { // GC thread root traversal likely used OopMapCache a lot, which // might have created lots of old entries. Trigger the cleanup now. - OopMapCache::trigger_cleanup(); + OopMapCache::try_trigger_cleanup(); } bool success() const { diff --git a/src/hotspot/share/interpreter/oopMapCache.cpp b/src/hotspot/share/interpreter/oopMapCache.cpp index cae0efae9b26d..7b60e4869e368 100644 --- a/src/hotspot/share/interpreter/oopMapCache.cpp +++ b/src/hotspot/share/interpreter/oopMapCache.cpp @@ -592,10 +592,13 @@ bool OopMapCache::has_cleanup_work() { return Atomic::load(&_old_entries) != nullptr; } -void OopMapCache::trigger_cleanup() { - if (has_cleanup_work()) { - MutexLocker ml(Service_lock, Mutex::_no_safepoint_check_flag); +void OopMapCache::try_trigger_cleanup() { + // See we can take the lock for the notification without blocking. + // This allows triggering the cleanup from GC paths, that can hold + // the service lock for e.g. oop iteration in service thread. + if (has_cleanup_work() && Service_lock->try_lock_without_rank_check()) { Service_lock->notify_all(); + Service_lock->unlock(); } } diff --git a/src/hotspot/share/interpreter/oopMapCache.hpp b/src/hotspot/share/interpreter/oopMapCache.hpp index 3c124631377ef..46c85f6e87985 100644 --- a/src/hotspot/share/interpreter/oopMapCache.hpp +++ b/src/hotspot/share/interpreter/oopMapCache.hpp @@ -183,8 +183,8 @@ class OopMapCache : public CHeapObj { // Check if we need to clean up old entries static bool has_cleanup_work(); - // Request cleanup if work is needed - static void trigger_cleanup(); + // Request cleanup if work is needed and notification is currently possible + static void try_trigger_cleanup(); // Clean up the old entries static void cleanup(); From ca5a438e5a4612c66f70c70a9d425eca0e49e84d Mon Sep 17 00:00:00 2001 From: Christian Hagedorn Date: Mon, 24 Jun 2024 08:58:02 +0000 Subject: [PATCH 089/102] 8334571: Extract control dependency rewiring out of PhaseIdealLoop::dominated_by() into separate method Reviewed-by: roland, kvn --- src/hotspot/share/opto/loopPredicate.cpp | 52 ++++++++++++++---------- src/hotspot/share/opto/loopnode.hpp | 4 +- src/hotspot/share/opto/loopopts.cpp | 39 ++++++++++-------- 3 files changed, 56 insertions(+), 39 deletions(-) diff --git a/src/hotspot/share/opto/loopPredicate.cpp b/src/hotspot/share/opto/loopPredicate.cpp index bccc01a86ddb0..998d3a27178e1 100644 --- a/src/hotspot/share/opto/loopPredicate.cpp +++ b/src/hotspot/share/opto/loopPredicate.cpp @@ -1152,7 +1152,6 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod ParsePredicateSuccessProj* parse_predicate_proj, CountedLoopNode* cl, ConNode* zero, Invariance& invar, Deoptimization::DeoptReason reason) { // Following are changed to nonnull when a predicate can be hoisted - IfProjNode* new_predicate_proj = nullptr; IfNode* iff = if_success_proj->in(0)->as_If(); Node* test = iff->in(1); if (!test->is_Bool()) { //Conv2B, ... @@ -1163,10 +1162,9 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod if (invar.is_invariant(bol)) { C->print_method(PHASE_BEFORE_LOOP_PREDICATION_IC, 4, iff); // Invariant test - new_predicate_proj = create_new_if_for_predicate(parse_predicate_proj, nullptr, - reason, - iff->Opcode()); - Node* ctrl = new_predicate_proj->in(0)->as_If()->in(0); + IfProjNode* hoisted_check_predicate_proj = create_new_if_for_predicate(parse_predicate_proj, nullptr, reason, + iff->Opcode()); + Node* ctrl = hoisted_check_predicate_proj->in(0)->as_If()->in(0); BoolNode* hoisted_check_predicate_bool = invar.clone(bol, ctrl)->as_Bool(); // Negate test if necessary (Parse Predicates always have IfTrue as success projection and IfFalse as uncommon trap) @@ -1177,11 +1175,16 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod register_new_node(hoisted_check_predicate_bool, ctrl); negated = true; } - IfNode* new_predicate_iff = new_predicate_proj->in(0)->as_If(); + IfNode* new_predicate_iff = hoisted_check_predicate_proj->in(0)->as_If(); _igvn.hash_delete(new_predicate_iff); new_predicate_iff->set_req(1, hoisted_check_predicate_bool); - C->print_method(PHASE_AFTER_LOOP_PREDICATION_IC, 4, new_predicate_proj->in(0)); + invar.map_ctrl(if_success_proj, hoisted_check_predicate_proj); // Mark hoisted check as invariant + + // Eliminate the old If in the loop body. + dominated_by(hoisted_check_predicate_proj, iff, negated); + + C->print_method(PHASE_AFTER_LOOP_PREDICATION_IC, 4, hoisted_check_predicate_proj->in(0)); #ifndef PRODUCT if (TraceLoopPredicate) { @@ -1193,10 +1196,10 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod } #endif } else if (cl != nullptr && loop->is_range_check_if(if_success_proj, this, invar DEBUG_ONLY(COMMA parse_predicate_proj))) { - range_check_predicate = true; C->print_method(PHASE_BEFORE_LOOP_PREDICATION_RC, 4, iff); // Range check for counted loops assert(if_success_proj->is_IfTrue(), "trap must be on false projection for a range check"); + IfTrueNode* hoisted_check_proj = if_success_proj->as_IfTrue(); const Node* cmp = bol->in(1)->as_Cmp(); Node* idx = cmp->in(1); assert(!invar.is_invariant(idx), "index is variant"); @@ -1265,10 +1268,18 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod // Fall through into rest of the cleanup code which will move any dependent nodes to the skeleton predicates of the // upper bound test. We always need to create skeleton predicates in order to properly remove dead loops when later // splitting the predicated loop into (unreachable) sub-loops (i.e. done by unrolling, peeling, pre/main/post etc.). - new_predicate_proj = add_template_assertion_predicate(iff, loop, if_success_proj, parse_predicate_proj, upper_bound_proj, scale, - offset, init, limit, stride, rng, overflow, reason); + IfTrueNode* template_assertion_predicate_proj = + add_template_assertion_predicate(iff, loop, hoisted_check_proj, parse_predicate_proj, upper_bound_proj, scale, + offset, init, limit, stride, rng, overflow, reason); + + // Eliminate the old range check in the loop body. + // When a range check is eliminated, data dependent nodes (Load and range check CastII nodes) are now dependent on 2 + // Hoisted Check Predicates (one for the start of the loop, one for the end) but we can only keep track of one control + // dependency: pin the data dependent nodes. + eliminate_hoisted_range_check(hoisted_check_proj, template_assertion_predicate_proj); + invar.map_ctrl(hoisted_check_proj, template_assertion_predicate_proj); // Mark hoisted check as invariant - C->print_method(PHASE_AFTER_LOOP_PREDICATION_RC, 4, new_predicate_proj->in(0)); + C->print_method(PHASE_AFTER_LOOP_PREDICATION_RC, 4, template_assertion_predicate_proj->in(0)); #ifndef PRODUCT if (TraceLoopOpts && !TraceLoopPredicate) { @@ -1281,24 +1292,21 @@ bool PhaseIdealLoop::loop_predication_impl_helper(IdealLoopTree* loop, IfProjNod // with uncommon trap. return false; } - assert(new_predicate_proj != nullptr, "sanity"); - // Success - attach condition (new_predicate_bol) to predicate if - invar.map_ctrl(if_success_proj, new_predicate_proj); // so that invariance test can be appropriate - - // Eliminate the old If in the loop body - // If a range check is eliminated, data dependent nodes (Load and range check CastII nodes) are now dependent on 2 - // Hoisted Check Predicates (one for the start of the loop, one for the end) but we can only keep track of one control - // dependency: pin the data dependent nodes. - dominated_by(new_predicate_proj, iff, if_success_proj->_con != new_predicate_proj->_con, range_check_predicate); C->set_major_progress(); return true; } +void PhaseIdealLoop::eliminate_hoisted_range_check(IfTrueNode* hoisted_check_proj, + IfTrueNode* template_assertion_predicate_proj) { + _igvn.replace_input_of(hoisted_check_proj->in(0), 1, _igvn.intcon(1)); + rewire_safe_outputs_to_dominator(hoisted_check_proj, template_assertion_predicate_proj, true); +} + // Each newly created Hoisted Check Predicate is accompanied by two Template Assertion Predicates. Later, we initialize // them by making a copy of them when splitting a loop into sub loops. The Assertion Predicates ensure that dead sub // loops are removed properly. -IfProjNode* PhaseIdealLoop::add_template_assertion_predicate(IfNode* iff, IdealLoopTree* loop, IfProjNode* if_proj, +IfTrueNode* PhaseIdealLoop::add_template_assertion_predicate(IfNode* iff, IdealLoopTree* loop, IfProjNode* if_proj, ParsePredicateSuccessProj* parse_predicate_proj, IfProjNode* upper_bound_proj, const int scale, Node* offset, Node* init, Node* limit, const jint stride, @@ -1312,7 +1320,7 @@ IfProjNode* PhaseIdealLoop::add_template_assertion_predicate(IfNode* iff, IdealL Node* opaque_bol = new Opaque4Node(C, bol, _igvn.intcon(1)); // This will go away once loop opts are over C->add_template_assertion_predicate_opaq(opaque_bol); register_new_node(opaque_bol, upper_bound_proj); - IfProjNode* new_proj = create_new_if_for_predicate(parse_predicate_proj, nullptr, reason, overflow ? Op_If : iff->Opcode()); + IfTrueNode* new_proj = create_new_if_for_predicate(parse_predicate_proj, nullptr, reason, overflow ? Op_If : iff->Opcode()); _igvn.replace_input_of(new_proj->in(0), 1, opaque_bol); assert(opaque_init->outcnt() > 0, "should be used"); diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp index 8d9d4b3e0e543..17145c825a420 100644 --- a/src/hotspot/share/opto/loopnode.hpp +++ b/src/hotspot/share/opto/loopnode.hpp @@ -1377,10 +1377,11 @@ class PhaseIdealLoop : public PhaseTransform { void loop_predication_follow_branches(Node *c, IdealLoopTree *loop, float loop_trip_cnt, PathFrequency& pf, Node_Stack& stack, VectorSet& seen, Node_List& if_proj_list); - IfProjNode* add_template_assertion_predicate(IfNode* iff, IdealLoopTree* loop, IfProjNode* if_proj, + IfTrueNode* add_template_assertion_predicate(IfNode* iff, IdealLoopTree* loop, IfProjNode* if_proj, ParsePredicateSuccessProj* parse_predicate_proj, IfProjNode* upper_bound_proj, int scale, Node* offset, Node* init, Node* limit, jint stride, Node* rng, bool& overflow, Deoptimization::DeoptReason reason); + void eliminate_hoisted_range_check(IfTrueNode* hoisted_check_proj, IfTrueNode* template_assertion_predicate_proj); Node* add_range_check_elimination_assertion_predicate(IdealLoopTree* loop, Node* predicate_proj, int scale_con, Node* offset, Node* limit, int stride_con, Node* value, bool is_template); @@ -1535,6 +1536,7 @@ class PhaseIdealLoop : public PhaseTransform { // Mark an IfNode as being dominated by a prior test, // without actually altering the CFG (and hence IDOM info). void dominated_by(IfProjNode* prevdom, IfNode* iff, bool flip = false, bool pin_array_access_nodes = false); + void rewire_safe_outputs_to_dominator(Node* source, Node* dominator, bool pin_array_access_nodes); // Split Node 'n' through merge point RegionNode* split_thru_region(Node* n, RegionNode* region); diff --git a/src/hotspot/share/opto/loopopts.cpp b/src/hotspot/share/opto/loopopts.cpp index 23b2edce6549a..182947e552e88 100644 --- a/src/hotspot/share/opto/loopopts.cpp +++ b/src/hotspot/share/opto/loopopts.cpp @@ -340,24 +340,31 @@ void PhaseIdealLoop::dominated_by(IfProjNode* prevdom, IfNode* iff, bool flip, b // I can assume this path reaches an infinite loop. In this case it's not // important to optimize the data Nodes - either the whole compilation will // be tossed or this path (and all data Nodes) will go dead. - if (iff->outcnt() != 2) return; + if (iff->outcnt() != 2) { + return; + } // Make control-dependent data Nodes on the live path (path that will remain // once the dominated IF is removed) become control-dependent on the // dominating projection. Node* dp = iff->proj_out_or_null(pop == Op_IfTrue); - if (dp == nullptr) + if (dp == nullptr) { return; + } + + rewire_safe_outputs_to_dominator(dp, prevdom, pin_array_access_nodes); +} - IdealLoopTree* old_loop = get_loop(dp); +void PhaseIdealLoop::rewire_safe_outputs_to_dominator(Node* source, Node* dominator, const bool pin_array_access_nodes) { + IdealLoopTree* old_loop = get_loop(source); - for (DUIterator_Fast imax, i = dp->fast_outs(imax); i < imax; i++) { - Node* cd = dp->fast_out(i); // Control-dependent node + for (DUIterator_Fast imax, i = source->fast_outs(imax); i < imax; i++) { + Node* out = source->fast_out(i); // Control-dependent node // Do not rewire Div and Mod nodes which could have a zero divisor to avoid skipping their zero check. - if (cd->depends_only_on_test() && _igvn.no_dependent_zero_check(cd)) { - assert(cd->in(0) == dp, ""); - _igvn.replace_input_of(cd, 0, prevdom); + if (out->depends_only_on_test() && _igvn.no_dependent_zero_check(out)) { + assert(out->in(0) == source, "must be control dependent on source"); + _igvn.replace_input_of(out, 0, dominator); if (pin_array_access_nodes) { // Because of Loop Predication, Loads and range check Cast nodes that are control dependent on this range // check (that is about to be removed) now depend on multiple dominating Hoisted Check Predicates. After the @@ -365,21 +372,21 @@ void PhaseIdealLoop::dominated_by(IfProjNode* prevdom, IfNode* iff, bool flip, b // in the graph. To ensure that these Loads/Casts do not float above any of the dominating checks (even when the // lowest dominating check is later replaced by yet another dominating check), we need to pin them at the lowest // dominating check. - Node* clone = cd->pin_array_access_node(); + Node* clone = out->pin_array_access_node(); if (clone != nullptr) { - clone = _igvn.register_new_node_with_optimizer(clone, cd); - _igvn.replace_node(cd, clone); - cd = clone; + clone = _igvn.register_new_node_with_optimizer(clone, out); + _igvn.replace_node(out, clone); + out = clone; } } - set_early_ctrl(cd, false); - IdealLoopTree* new_loop = get_loop(get_ctrl(cd)); + set_early_ctrl(out, false); + IdealLoopTree* new_loop = get_loop(get_ctrl(out)); if (old_loop != new_loop) { if (!old_loop->_child) { - old_loop->_body.yank(cd); + old_loop->_body.yank(out); } if (!new_loop->_child) { - new_loop->_body.push(cd); + new_loop->_body.push(out); } } --i; From 9d4a4bd2c2a4bd16bbc80b602b15b448c52220f6 Mon Sep 17 00:00:00 2001 From: Matthew Donovan Date: Mon, 24 Jun 2024 11:15:33 +0000 Subject: [PATCH 090/102] 8324841: PKCS11 tests still skip execution Reviewed-by: valeriep --- test/jdk/sun/security/pkcs11/PKCS11Test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jdk/sun/security/pkcs11/PKCS11Test.java b/test/jdk/sun/security/pkcs11/PKCS11Test.java index ffd1c42fd88f4..2810040e376a6 100644 --- a/test/jdk/sun/security/pkcs11/PKCS11Test.java +++ b/test/jdk/sun/security/pkcs11/PKCS11Test.java @@ -791,8 +791,8 @@ private static Path findNSSLibrary(Path path, Path libraryName) throws IOExcepti (tp, attr) -> tp.getFileName().equals(libraryName))) { return files.findAny() - .orElseThrow(() -> new SkippedException( - "NSS library \"" + libraryName + "\" was not found in " + path)); + .orElseThrow(() -> + new RuntimeException("NSS library \"" + libraryName + "\" was not found in " + path)); } } From 2e64d15144be03388104c762816c1ba629da9639 Mon Sep 17 00:00:00 2001 From: Lutz Schmidt Date: Mon, 24 Jun 2024 11:27:18 +0000 Subject: [PATCH 091/102] 8334564: VM startup: fatal error: FLAG_SET_ERGO cannot be used to set an invalid value for NonNMethodCodeHeapSize Reviewed-by: mdoerr, kvn, stuefe --- src/hotspot/share/code/codeCache.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hotspot/share/code/codeCache.cpp b/src/hotspot/share/code/codeCache.cpp index 20583ce492ddd..36656515942c3 100644 --- a/src/hotspot/share/code/codeCache.cpp +++ b/src/hotspot/share/code/codeCache.cpp @@ -227,6 +227,11 @@ void CodeCache::initialize_heaps() { if (!non_nmethod.set) { non_nmethod.size += compiler_buffer_size; + // Further down, just before FLAG_SET_ERGO(), all segment sizes are + // aligned down to the next lower multiple of min_size. For large page + // sizes, this may result in (non_nmethod.size == 0) which is not acceptable. + // Therefore, force non_nmethod.size to at least min_size. + non_nmethod.size = MAX2(non_nmethod.size, min_size); } if (!profiled.set && !non_profiled.set) { From 5ac2149b7bde947886533bf5996d977bb8ec66f1 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Mon, 24 Jun 2024 12:37:53 +0000 Subject: [PATCH 092/102] 8334299: Deprecate LockingMode option, along with LM_LEGACY and LM_MONITOR Reviewed-by: stuefe, dholmes --- src/hotspot/share/runtime/arguments.cpp | 1 + src/hotspot/share/runtime/globals.hpp | 6 +++--- .../jtreg/runtime/CommandLine/VMDeprecatedOptions.java | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 0949e9e2aacac..f428403fa3002 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -505,6 +505,7 @@ static SpecialFlag const special_jvm_flags[] = { { "DontYieldALot", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "PreserveAllAnnotations", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseNotificationThread", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, + { "LockingMode", JDK_Version::jdk(24), JDK_Version::jdk(26), JDK_Version::jdk(27) }, // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: { "CreateMinidumpOnCrash", JDK_Version::jdk(9), JDK_Version::undefined(), JDK_Version::undefined() }, diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index b8b9c846bb4d1..e4eb8d3e9e90c 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1957,9 +1957,9 @@ const int ObjectAlignmentInBytes = 8; "fence. Add cleanliness checks.") \ \ product(int, LockingMode, LM_LIGHTWEIGHT, \ - "Select locking mode: " \ - "0: monitors only (LM_MONITOR), " \ - "1: monitors & legacy stack-locking (LM_LEGACY), " \ + "(Deprecated) Select locking mode: " \ + "0: (Deprecated) monitors only (LM_MONITOR), " \ + "1: (Deprecated) monitors & legacy stack-locking (LM_LEGACY), " \ "2: monitors & new lightweight locking (LM_LIGHTWEIGHT, default)") \ range(0, 2) \ \ diff --git a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java index 7904b01495fc7..4e6252ae20510 100644 --- a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java +++ b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java @@ -58,6 +58,7 @@ public class VMDeprecatedOptions { // deprecated non-alias flags: {"AllowRedefinitionToAddDeleteMethods", "true"}, {"ZGenerational", "false"}, + {"LockingMode", "1"}, // deprecated alias flags (see also aliased_jvm_flags): {"CreateMinidumpOnCrash", "false"} From e825ccfe6652577e4e828e8e4dfe19be0ea77813 Mon Sep 17 00:00:00 2001 From: Robert Toyonaga Date: Mon, 24 Jun 2024 13:33:20 +0000 Subject: [PATCH 093/102] 8332362: Implement os::committed_in_range for MacOS and AIX Reviewed-by: stuefe --- src/hotspot/os/linux/os_linux.cpp | 75 --------------- src/hotspot/os/posix/os_posix.cpp | 91 +++++++++++++++++++ src/hotspot/share/runtime/os.cpp | 7 -- .../runtime/test_committed_virtualmemory.cpp | 43 +++++++++ .../Thread/TestAlwaysPreTouchStacks.java | 39 ++++++-- 5 files changed, 166 insertions(+), 89 deletions(-) diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 52866a44b26c6..87150365ed576 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -3525,81 +3525,6 @@ static address get_stack_commited_bottom(address bottom, size_t size) { return nbot; } -bool os::committed_in_range(address start, size_t size, address& committed_start, size_t& committed_size) { - int mincore_return_value; - const size_t stripe = 1024; // query this many pages each time - unsigned char vec[stripe + 1]; - // set a guard - vec[stripe] = 'X'; - - const size_t page_sz = os::vm_page_size(); - uintx pages = size / page_sz; - - assert(is_aligned(start, page_sz), "Start address must be page aligned"); - assert(is_aligned(size, page_sz), "Size must be page aligned"); - - committed_start = nullptr; - - int loops = checked_cast((pages + stripe - 1) / stripe); - int committed_pages = 0; - address loop_base = start; - bool found_range = false; - - for (int index = 0; index < loops && !found_range; index ++) { - assert(pages > 0, "Nothing to do"); - uintx pages_to_query = (pages >= stripe) ? stripe : pages; - pages -= pages_to_query; - - // Get stable read - while ((mincore_return_value = mincore(loop_base, pages_to_query * page_sz, vec)) == -1 && errno == EAGAIN); - - // During shutdown, some memory goes away without properly notifying NMT, - // E.g. ConcurrentGCThread/WatcherThread can exit without deleting thread object. - // Bailout and return as not committed for now. - if (mincore_return_value == -1 && errno == ENOMEM) { - return false; - } - - // If mincore is not supported. - if (mincore_return_value == -1 && errno == ENOSYS) { - return false; - } - - assert(vec[stripe] == 'X', "overflow guard"); - assert(mincore_return_value == 0, "Range must be valid"); - // Process this stripe - for (uintx vecIdx = 0; vecIdx < pages_to_query; vecIdx ++) { - if ((vec[vecIdx] & 0x01) == 0) { // not committed - // End of current contiguous region - if (committed_start != nullptr) { - found_range = true; - break; - } - } else { // committed - // Start of region - if (committed_start == nullptr) { - committed_start = loop_base + page_sz * vecIdx; - } - committed_pages ++; - } - } - - loop_base += pages_to_query * page_sz; - } - - if (committed_start != nullptr) { - assert(committed_pages > 0, "Must have committed region"); - assert(committed_pages <= int(size / page_sz), "Can not commit more than it has"); - assert(committed_start >= start && committed_start < start + size, "Out of range"); - committed_size = page_sz * committed_pages; - return true; - } else { - assert(committed_pages == 0, "Should not have committed region"); - return false; - } -} - - // Linux uses a growable mapping for the stack, and if the mapping for // the stack guard pages is not removed when we detach a thread the // stack cannot grow beyond the pages where the stack guard was diff --git a/src/hotspot/os/posix/os_posix.cpp b/src/hotspot/os/posix/os_posix.cpp index 1e7473eea1dc1..26bff6c8bd4e6 100644 --- a/src/hotspot/os/posix/os_posix.cpp +++ b/src/hotspot/os/posix/os_posix.cpp @@ -93,6 +93,9 @@ #define MAP_ANONYMOUS MAP_ANON #endif +/* Input/Output types for mincore(2) */ +typedef LINUX_ONLY(unsigned) char mincore_vec_t; + static jlong initial_time_count = 0; static int clock_tics_per_sec = 100; @@ -146,6 +149,94 @@ void os::check_dump_limit(char* buffer, size_t bufferSize) { VMError::record_coredump_status(buffer, success); } +bool os::committed_in_range(address start, size_t size, address& committed_start, size_t& committed_size) { + +#ifdef _AIX + committed_start = start; + committed_size = size; + return true; +#else + + int mincore_return_value; + constexpr size_t stripe = 1024; // query this many pages each time + mincore_vec_t vec [stripe + 1]; + + // set a guard + DEBUG_ONLY(vec[stripe] = 'X'); + + size_t page_sz = os::vm_page_size(); + uintx pages = size / page_sz; + + assert(is_aligned(start, page_sz), "Start address must be page aligned"); + assert(is_aligned(size, page_sz), "Size must be page aligned"); + + committed_start = nullptr; + + int loops = checked_cast((pages + stripe - 1) / stripe); + int committed_pages = 0; + address loop_base = start; + bool found_range = false; + + for (int index = 0; index < loops && !found_range; index ++) { + assert(pages > 0, "Nothing to do"); + uintx pages_to_query = (pages >= stripe) ? stripe : pages; + pages -= pages_to_query; + + // Get stable read + int fail_count = 0; + while ((mincore_return_value = mincore(loop_base, pages_to_query * page_sz, vec)) == -1 && errno == EAGAIN){ + if (++fail_count == 1000){ + return false; + } + } + + // During shutdown, some memory goes away without properly notifying NMT, + // E.g. ConcurrentGCThread/WatcherThread can exit without deleting thread object. + // Bailout and return as not committed for now. + if (mincore_return_value == -1 && errno == ENOMEM) { + return false; + } + + // If mincore is not supported. + if (mincore_return_value == -1 && errno == ENOSYS) { + return false; + } + + assert(vec[stripe] == 'X', "overflow guard"); + assert(mincore_return_value == 0, "Range must be valid"); + // Process this stripe + for (uintx vecIdx = 0; vecIdx < pages_to_query; vecIdx ++) { + if ((vec[vecIdx] & 0x01) == 0) { // not committed + // End of current contiguous region + if (committed_start != nullptr) { + found_range = true; + break; + } + } else { // committed + // Start of region + if (committed_start == nullptr) { + committed_start = loop_base + page_sz * vecIdx; + } + committed_pages ++; + } + } + + loop_base += pages_to_query * page_sz; + } + + if (committed_start != nullptr) { + assert(committed_pages > 0, "Must have committed region"); + assert(committed_pages <= int(size / page_sz), "Can not commit more than it has"); + assert(committed_start >= start && committed_start < start + size, "Out of range"); + committed_size = page_sz * committed_pages; + return true; + } else { + assert(committed_pages == 0, "Should not have committed region"); + return false; + } +#endif +} + int os::get_native_stack(address* stack, int frames, int toSkip) { int frame_idx = 0; int num_of_frames; // number of frames captured diff --git a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp index 9860251fc3308..97bf33fbaaa7c 100644 --- a/src/hotspot/share/runtime/os.cpp +++ b/src/hotspot/share/runtime/os.cpp @@ -276,13 +276,6 @@ bool os::dll_build_name(char* buffer, size_t size, const char* fname) { return (n != -1); } -#if !defined(LINUX) && !defined(_WINDOWS) -bool os::committed_in_range(address start, size_t size, address& committed_start, size_t& committed_size) { - committed_start = start; - committed_size = size; - return true; -} -#endif // Helper for dll_locate_lib. // Pass buffer and printbuffer as we already printed the path to buffer diff --git a/test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp b/test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp index d4959cfa00854..2ffef1e211fdd 100644 --- a/test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp +++ b/test/hotspot/gtest/runtime/test_committed_virtualmemory.cpp @@ -196,6 +196,42 @@ class CommittedVirtualMemoryTest { os::release_memory(base, size); } + + static void test_committed_in_range(size_t num_pages, size_t pages_to_touch) { + bool result; + size_t committed_size; + address committed_start; + size_t index; + + const size_t page_sz = os::vm_page_size(); + const size_t size = num_pages * page_sz; + + char* base = os::reserve_memory(size, !ExecMem, mtTest); + ASSERT_NE(base, (char*)nullptr); + + result = os::commit_memory(base, size, !ExecMem); + ASSERT_TRUE(result); + + result = os::committed_in_range((address)base, size, committed_start, committed_size); + ASSERT_FALSE(result); + + // Touch pages + for (index = 0; index < pages_to_touch; index ++) { + base[index * page_sz] = 'a'; + } + + result = os::committed_in_range((address)base, size, committed_start, committed_size); + ASSERT_TRUE(result); + ASSERT_EQ(pages_to_touch * page_sz, committed_size); + ASSERT_EQ(committed_start, (address)base); + + os::uncommit_memory(base, size, false); + + result = os::committed_in_range((address)base, size, committed_start, committed_size); + ASSERT_FALSE(result); + + os::release_memory(base, size); + } }; TEST_VM(CommittedVirtualMemoryTracker, test_committed_virtualmemory_region) { @@ -214,3 +250,10 @@ TEST_VM(CommittedVirtualMemoryTracker, test_committed_virtualmemory_region) { } } + +#if !defined(_WINDOWS) && !defined(_AIX) +TEST_VM(CommittedVirtualMemory, test_committed_in_range){ + CommittedVirtualMemoryTest::test_committed_in_range(1024, 1024); + CommittedVirtualMemoryTest::test_committed_in_range(2, 1); +} +#endif diff --git a/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java b/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java index b12eff0cf8454..f16e0ff9da4fd 100644 --- a/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java +++ b/test/hotspot/jtreg/runtime/Thread/TestAlwaysPreTouchStacks.java @@ -1,6 +1,6 @@ /* * Copyright (c) 2022 SAP SE. All rights reserved. - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,14 +32,27 @@ import java.util.regex.Pattern; import java.util.concurrent.CyclicBarrier; +import static jdk.test.lib.Platform.isLinux; +import static jdk.test.lib.Platform.isWindows; + /* - * @test + * @test id=preTouch * @summary Test AlwaysPreTouchThreadStacks * @requires os.family != "aix" * @library /test/lib * @modules java.base/jdk.internal.misc * java.management - * @run driver TestAlwaysPreTouchStacks + * @run driver TestAlwaysPreTouchStacks preTouch + */ + +/* + * @test id=noPreTouch + * @summary Test that only touched committed memory is reported as thread stack usage. + * @requires os.family != "aix" + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver TestAlwaysPreTouchStacks noPreTouch */ public class TestAlwaysPreTouchStacks { @@ -90,12 +103,22 @@ public static void main(String[] args) throws Exception { // should show up with fully - or almost fully - committed thread stacks. } else { + boolean preTouch; + if (args.length == 1 && args[0].equals("noPreTouch")){ + preTouch = false; + } else if (args.length == 1 && args[0].equals("preTouch")){ + preTouch = true; + } else { + throw new RuntimeException("Invalid test input. Must be 'preTouch' or 'noPreTouch'."); + } ArrayList vmArgs = new ArrayList<>(); Collections.addAll(vmArgs, "-XX:+UnlockDiagnosticVMOptions", "-Xmx100M", - "-XX:+AlwaysPreTouchStacks", "-XX:NativeMemoryTracking=summary", "-XX:+PrintNMTStatistics"); + if (preTouch){ + vmArgs.add("-XX:+AlwaysPreTouchStacks"); + } if (System.getProperty("os.name").contains("Linux")) { vmArgs.add("-XX:-UseMadvPopulateWrite"); } @@ -110,8 +133,8 @@ public static void main(String[] args) throws Exception { output.shouldContain("Alive: " + i); } - // We want to see, in the final NMT printout, a committed thread stack size very close to reserved - // stack size. Like this: + // If using -XX:+AlwaysPreTouchStacks, we want to see, in the final NMT printout, + // a committed thread stack size very close to reserved stack size. Like this: // - Thread (reserved=10332400KB, committed=10284360KB) // (thread #10021) // (stack: reserved=10301560KB, committed=10253520KB) <<<< @@ -135,8 +158,10 @@ public static void main(String[] args) throws Exception { // as thread stack. But without pre-touching, the thread stacks would be committed to about 1/5th // of their reserved size. Requiring them to be committed for over 3/4th shows that pretouch is // really working. - if ((double)committed < ((double)reserved * 0.75)) { + if (preTouch && (double)committed < ((double)reserved * 0.75)) { throw new RuntimeException("Expected a higher ratio between stack committed and reserved."); + } else if (!preTouch && (double)committed > ((double)reserved * 0.50)){ + throw new RuntimeException("Expected a lower ratio between stack committed and reserved."); } // Added sanity tests: we expect our test threads to be still alive when NMT prints its final // report, so their stacks should dominate the NMT-reported total stack size. From b2930c5aeedf911ec893734181c1af0573e222f4 Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Mon, 24 Jun 2024 13:34:29 +0000 Subject: [PATCH 094/102] 8334040: jdk/classfile/CorpusTest.java timed out Reviewed-by: alanb --- test/jdk/jdk/classfile/CorpusTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/test/jdk/jdk/classfile/CorpusTest.java b/test/jdk/jdk/classfile/CorpusTest.java index 21e275a837d84..64db67e6d8eb0 100644 --- a/test/jdk/jdk/classfile/CorpusTest.java +++ b/test/jdk/jdk/classfile/CorpusTest.java @@ -117,7 +117,7 @@ public void writeBody(BufWriter b) { static Path[] corpus() throws IOException, URISyntaxException { splitTableAttributes("testdata/Pattern2.class", "testdata/Pattern2-split.class"); return Stream.of( - Files.walk(JRT.getPath("modules/java.base/java")), + Files.walk(JRT.getPath("modules/java.base/java/util")), Files.walk(JRT.getPath("modules"), 2).filter(p -> p.endsWith("module-info.class")), Files.walk(Paths.get(URI.create(CorpusTest.class.getResource("CorpusTest.class").toString())).getParent())) .flatMap(p -> p) @@ -140,6 +140,7 @@ void testNullAdaptations(Path path) throws Exception { for (Transforms.NoOpTransform m : Transforms.NoOpTransform.values()) { if (m == Transforms.NoOpTransform.ARRAYCOPY || m == Transforms.NoOpTransform.SHARED_3_NO_STACKMAP + || m == Transforms.NoOpTransform.CLASS_REMAPPER || m.name().startsWith("ASM")) continue; @@ -190,12 +191,8 @@ void testNullAdaptations(Path path) throws Exception { .collect(joining("\n")); fail(String.format("Errors in testNullAdapt: %s", msg)); } - } - @ParameterizedTest - @MethodSource("corpus") - void testReadAndTransform(Path path) throws IOException { - byte[] bytes = Files.readAllBytes(path); + // test read and transform var cc = ClassFile.of(); var classModel = cc.parse(bytes); assertEqualsDeep(ClassRecord.ofClassModel(classModel), ClassRecord.ofStreamingElements(classModel), From 55c796946158aab1d019a57b77a33441d7b13065 Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Mon, 24 Jun 2024 14:36:50 +0000 Subject: [PATCH 095/102] 8334765: JFR: Log chunk waste Reviewed-by: mgronlun --- .../internal/consumer/filter/ChunkWriter.java | 29 ++++++++++++++++++- test/jdk/jdk/jfr/jvm/TestWaste.java | 4 +-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/filter/ChunkWriter.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/filter/ChunkWriter.java index 8c22432512a1a..d38a5872adedb 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/filter/ChunkWriter.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/filter/ChunkWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,8 @@ import java.nio.file.Path; import java.util.ArrayDeque; import java.util.Deque; +import java.util.Map; +import java.util.HashMap; import java.util.function.Predicate; import jdk.jfr.consumer.RecordedEvent; @@ -56,6 +58,7 @@ public final class ChunkWriter implements Closeable { private final RecordingInput input; private final RecordingOutput output; private final Predicate filter; + private final Map waste = new HashMap<>(); private long chunkStartPosition; private boolean chunkComplete; @@ -178,6 +181,16 @@ public void endChunk(ChunkHeader header) throws IOException { pools = new LongMap<>(); chunkComplete = true; lastCheckpoint = 0; + if (Logger.shouldLog(LogTag.JFR_SYSTEM_PARSER, LogLevel.DEBUG)) { + // Log largest waste first + waste.entrySet().stream() + .sorted((a, b) -> b.getValue().compareTo(a.getValue())) + .forEach(entry -> { + String msg = "Total chunk waste by " + entry.getKey() + ": " + entry.getValue() + " bytes."; + Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.DEBUG, msg); + }); + } + waste.clear(); } private void writeMetadataEvent(ChunkHeader header) throws IOException { @@ -216,6 +229,20 @@ private void write(CheckpointEvent event, long delta) throws IOException { } } } + if (Logger.shouldLog(LogTag.JFR_SYSTEM_PARSER, LogLevel.DEBUG)) { + for (CheckpointPool pool : event.getPools()) { + for (PoolEntry pe : pool.getEntries()) { + if (!pe.isTouched()) { + String name = pe.getType().getName(); + long amount = pe.getEndPosition() - pe.getStartPosition(); + waste.merge(pe.getType().getName(), amount, Long::sum); + String msg = "Unreferenced constant ID " + pe.getId() + + " of type "+ name + " using " + amount + " bytes."; + Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE, msg); + } + } + } + } long endPosition = output.position(); long size = endPosition - startPosition; output.position(startPosition); diff --git a/test/jdk/jdk/jfr/jvm/TestWaste.java b/test/jdk/jdk/jfr/jvm/TestWaste.java index 0cc1010765eb6..afa2dda4ee12c 100644 --- a/test/jdk/jdk/jfr/jvm/TestWaste.java +++ b/test/jdk/jdk/jfr/jvm/TestWaste.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,7 +47,7 @@ * @requires vm.hasJFR * @library /test/lib /test/jdk * @modules jdk.jfr/jdk.jfr.internal.test - * @run main/othervm -XX:TLABSize=2k jdk.jfr.jvm.TestWaste + * @run main/othervm -Xlog:jfr+system+parser=debug -XX:TLABSize=2k jdk.jfr.jvm.TestWaste */ public class TestWaste { static List list = new LinkedList<>(); From 71a692ab435fdeea4ce8f8db7a55dd735c7c5016 Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva Date: Mon, 24 Jun 2024 18:05:50 +0000 Subject: [PATCH 096/102] 8321033: Avoid casting Array to GrowableArray Reviewed-by: kbarrett, iklam, ccheung --- src/hotspot/share/classfile/moduleEntry.cpp | 33 +++++++++++---------- src/hotspot/share/classfile/moduleEntry.hpp | 23 +++++++++++++- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/hotspot/share/classfile/moduleEntry.cpp b/src/hotspot/share/classfile/moduleEntry.cpp index 78478d282c57d..e7f05bedb292a 100644 --- a/src/hotspot/share/classfile/moduleEntry.cpp +++ b/src/hotspot/share/classfile/moduleEntry.cpp @@ -149,7 +149,7 @@ bool ModuleEntry::can_read(ModuleEntry* m) const { if (!has_reads_list()) { return false; } else { - return _reads->contains(m); + return reads()->contains(m); } } @@ -164,9 +164,10 @@ void ModuleEntry::add_read(ModuleEntry* m) { if (m == nullptr) { set_can_read_all_unnamed(); } else { - if (_reads == nullptr) { + if (reads() == nullptr) { // Lazily create a module's reads list - _reads = new (mtModule) GrowableArray(MODULE_READS_SIZE, mtModule); + GrowableArray* new_reads = new (mtModule) GrowableArray(MODULE_READS_SIZE, mtModule); + set_reads(new_reads); } // Determine, based on this newly established read edge to module m, @@ -174,7 +175,7 @@ void ModuleEntry::add_read(ModuleEntry* m) { set_read_walk_required(m->loader_data()); // Establish readability to module m - _reads->append_if_missing(m); + reads()->append_if_missing(m); } } @@ -208,7 +209,7 @@ void ModuleEntry::set_is_open(bool is_open) { // module will return false. bool ModuleEntry::has_reads_list() const { assert_locked_or_safepoint(Module_lock); - return ((_reads != nullptr) && !_reads->is_empty()); + return ((reads() != nullptr) && !reads()->is_empty()); } // Purge dead module entries out of reads list. @@ -227,12 +228,12 @@ void ModuleEntry::purge_reads() { } // Go backwards because this removes entries that are dead. - int len = _reads->length(); + int len = reads()->length(); for (int idx = len - 1; idx >= 0; idx--) { - ModuleEntry* module_idx = _reads->at(idx); + ModuleEntry* module_idx = reads()->at(idx); ClassLoaderData* cld_idx = module_idx->loader_data(); if (cld_idx->is_unloading()) { - _reads->delete_at(idx); + reads()->delete_at(idx); } else { // Update the need to walk this module's reads based on live modules set_read_walk_required(cld_idx); @@ -246,15 +247,15 @@ void ModuleEntry::module_reads_do(ModuleClosure* f) { assert(f != nullptr, "invariant"); if (has_reads_list()) { - int reads_len = _reads->length(); - for (int i = 0; i < reads_len; ++i) { - f->do_module(_reads->at(i)); + int reads_len = reads()->length(); + for (ModuleEntry* m : *reads()) { + f->do_module(m); } } } void ModuleEntry::delete_reads() { - delete _reads; + delete reads(); _reads = nullptr; } @@ -272,7 +273,8 @@ ModuleEntry::ModuleEntry(Handle module_handle, _has_default_read_edges(false), _must_walk_reads(false), _is_open(is_open), - _is_patched(false) { + _is_patched(false) + DEBUG_ONLY(COMMA _reads_is_archived(false)) { // Initialize fields specific to a ModuleEntry if (_name == nullptr) { @@ -466,7 +468,7 @@ void ModuleEntry::iterate_symbols(MetaspaceClosure* closure) { } void ModuleEntry::init_as_archived_entry() { - Array* archived_reads = write_growable_array(_reads); + set_archived_reads(write_growable_array(reads())); _loader_data = nullptr; // re-init at runtime _shared_path_index = FileMapInfo::get_module_shared_path_index(_location); @@ -474,7 +476,6 @@ void ModuleEntry::init_as_archived_entry() { _name = ArchiveBuilder::get_buffered_symbol(_name); ArchivePtrMarker::mark_pointer((address*)&_name); } - _reads = (GrowableArray*)archived_reads; if (_version != nullptr) { _version = ArchiveBuilder::get_buffered_symbol(_version); } @@ -515,7 +516,7 @@ void ModuleEntry::verify_archived_module_entries() { void ModuleEntry::load_from_archive(ClassLoaderData* loader_data) { assert(CDSConfig::is_using_archive(), "runtime only"); set_loader_data(loader_data); - _reads = restore_growable_array((Array*)_reads); + set_reads(restore_growable_array(archived_reads())); JFR_ONLY(INIT_ID(this);) } diff --git a/src/hotspot/share/classfile/moduleEntry.hpp b/src/hotspot/share/classfile/moduleEntry.hpp index 62a0ba2a0b739..48adc41eddc71 100644 --- a/src/hotspot/share/classfile/moduleEntry.hpp +++ b/src/hotspot/share/classfile/moduleEntry.hpp @@ -68,7 +68,11 @@ class ModuleEntry : public CHeapObj { // for shared classes from this module Symbol* _name; // name of this module ClassLoaderData* _loader_data; - GrowableArray* _reads; // list of modules that are readable by this module + + union { + GrowableArray* _reads; // list of modules that are readable by this module + Array* _archived_reads; // List of readable modules stored in the CDS archive + }; Symbol* _version; // module version number Symbol* _location; // module location CDS_ONLY(int _shared_path_index;) // >=0 if classes in this module are in CDS archive @@ -77,6 +81,7 @@ class ModuleEntry : public CHeapObj { bool _must_walk_reads; // walk module's reads list at GC safepoints to purge out dead modules bool _is_open; // whether the packages in the module are all unqualifiedly exported bool _is_patched; // whether the module is patched via --patch-module + DEBUG_ONLY(bool _reads_is_archived); CDS_JAVA_HEAP_ONLY(int _archived_module_index;) JFR_ONLY(DEFINE_TRACE_ID_FIELD;) @@ -115,6 +120,22 @@ class ModuleEntry : public CHeapObj { bool can_read(ModuleEntry* m) const; bool has_reads_list() const; + GrowableArray* reads() const { + assert(!_reads_is_archived, "sanity"); + return _reads; + } + void set_reads(GrowableArray* r) { + _reads = r; + DEBUG_ONLY(_reads_is_archived = false); + } + Array* archived_reads() const { + assert(_reads_is_archived, "sanity"); + return _archived_reads; + } + void set_archived_reads(Array* r) { + _archived_reads = r; + DEBUG_ONLY(_reads_is_archived = true); + } void add_read(ModuleEntry* m); void set_read_walk_required(ClassLoaderData* m_loader_data); From 4b153e5e051c01ad8d0c3ff335352918c2970fe6 Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva Date: Mon, 24 Jun 2024 18:19:03 +0000 Subject: [PATCH 097/102] 8306580: Propagate CDS dumping errors instead of directly exiting the VM Reviewed-by: iklam, ccheung --- src/hotspot/share/cds/archiveBuilder.cpp | 7 -- src/hotspot/share/cds/archiveBuilder.hpp | 3 - src/hotspot/share/cds/filemap.cpp | 5 +- src/hotspot/share/cds/metaspaceShared.cpp | 97 +++++++++++-------- src/hotspot/share/cds/metaspaceShared.hpp | 9 +- src/hotspot/share/runtime/threads.cpp | 2 +- .../jtreg/runtime/cds/StaticWritingError.java | 52 ++++++++++ 7 files changed, 119 insertions(+), 56 deletions(-) create mode 100644 test/hotspot/jtreg/runtime/cds/StaticWritingError.java diff --git a/src/hotspot/share/cds/archiveBuilder.cpp b/src/hotspot/share/cds/archiveBuilder.cpp index 72e45a7998ce9..a87a3ff042dec 100644 --- a/src/hotspot/share/cds/archiveBuilder.cpp +++ b/src/hotspot/share/cds/archiveBuilder.cpp @@ -1412,10 +1412,3 @@ void ArchiveBuilder::report_out_of_space(const char* name, size_t needed_bytes) log_error(cds)("Unable to allocate from '%s' region: Please reduce the number of shared classes.", name); MetaspaceShared::unrecoverable_writing_error(); } - - -#ifndef PRODUCT -void ArchiveBuilder::assert_is_vm_thread() { - assert(Thread::current()->is_VM_thread(), "ArchiveBuilder should be used only inside the VMThread"); -} -#endif diff --git a/src/hotspot/share/cds/archiveBuilder.hpp b/src/hotspot/share/cds/archiveBuilder.hpp index ad0302137f55e..c17090ee53d8f 100644 --- a/src/hotspot/share/cds/archiveBuilder.hpp +++ b/src/hotspot/share/cds/archiveBuilder.hpp @@ -343,8 +343,6 @@ class ArchiveBuilder : public StackObj { return to_offset_u4(offset); } - static void assert_is_vm_thread() PRODUCT_RETURN; - public: ArchiveBuilder(); ~ArchiveBuilder(); @@ -432,7 +430,6 @@ class ArchiveBuilder : public StackObj { } static ArchiveBuilder* current() { - assert_is_vm_thread(); assert(_current != nullptr, "ArchiveBuilder must be active"); return _current; } diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp index 5b352b54e4b50..96c826fb67e82 100644 --- a/src/hotspot/share/cds/filemap.cpp +++ b/src/hotspot/share/cds/filemap.cpp @@ -1406,7 +1406,8 @@ void FileMapInfo::open_for_write() { if (fd < 0) { log_error(cds)("Unable to create shared archive file %s: (%s).", _full_path, os::strerror(errno)); - MetaspaceShared::unrecoverable_writing_error(); + MetaspaceShared::writing_error(); + return; } _fd = fd; _file_open = true; @@ -1659,7 +1660,7 @@ void FileMapInfo::write_bytes(const void* buffer, size_t nbytes) { // If the shared archive is corrupted, close it and remove it. close(); remove(_full_path); - MetaspaceShared::unrecoverable_writing_error("Unable to write to shared archive file."); + MetaspaceShared::writing_error("Unable to write to shared archive file."); } _file_offset += nbytes; } diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index 30b240b27ca81..a5061fef567e3 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -444,6 +444,8 @@ void MetaspaceShared::rewrite_nofast_bytecodes_and_calculate_fingerprints(Thread class VM_PopulateDumpSharedSpace : public VM_Operation { private: ArchiveHeapInfo _heap_info; + FileMapInfo* _map_info; + StaticArchiveBuilder& _builder; void dump_java_heap_objects(GrowableArray* klasses) NOT_CDS_JAVA_HEAP_RETURN; void dump_shared_symbol_table(GrowableArray* symbols) { @@ -454,11 +456,14 @@ class VM_PopulateDumpSharedSpace : public VM_Operation { public: - VM_PopulateDumpSharedSpace() : VM_Operation(), _heap_info() {} + VM_PopulateDumpSharedSpace(StaticArchiveBuilder& b) : + VM_Operation(), _heap_info(), _map_info(nullptr), _builder(b) {} bool skip_operation() const { return false; } VMOp_Type type() const { return VMOp_PopulateDumpSharedSpace; } + ArchiveHeapInfo* heap_info() { return &_heap_info; } + FileMapInfo* map_info() const { return _map_info; } void doit(); // outline because gdb sucks bool allow_nested_vm_operations() const { return true; } }; // class VM_PopulateDumpSharedSpace @@ -515,22 +520,21 @@ void VM_PopulateDumpSharedSpace::doit() { MutexLocker ml(DumpTimeTable_lock, Mutex::_no_safepoint_check_flag); SystemDictionaryShared::check_excluded_classes(); - StaticArchiveBuilder builder; - builder.gather_source_objs(); - builder.reserve_buffer(); + _builder.gather_source_objs(); + _builder.reserve_buffer(); - CppVtables::dumptime_init(&builder); + CppVtables::dumptime_init(&_builder); - builder.sort_metadata_objs(); - builder.dump_rw_metadata(); - builder.dump_ro_metadata(); - builder.relocate_metaspaceobj_embedded_pointers(); + _builder.sort_metadata_objs(); + _builder.dump_rw_metadata(); + _builder.dump_ro_metadata(); + _builder.relocate_metaspaceobj_embedded_pointers(); - dump_java_heap_objects(builder.klasses()); - dump_shared_symbol_table(builder.symbols()); + dump_java_heap_objects(_builder.klasses()); + dump_shared_symbol_table(_builder.symbols()); log_info(cds)("Make classes shareable"); - builder.make_klasses_shareable(); + _builder.make_klasses_shareable(); char* serialized_data = dump_read_only_tables(); @@ -540,28 +544,13 @@ void VM_PopulateDumpSharedSpace::doit() { // We don't want to write these addresses into the archive. CppVtables::zero_archived_vtables(); - // relocate the data so that it can be mapped to MetaspaceShared::requested_base_address() - // without runtime relocation. - builder.relocate_to_requested(); - // Write the archive file const char* static_archive = CDSConfig::static_archive_path(); assert(static_archive != nullptr, "SharedArchiveFile not set?"); - FileMapInfo* mapinfo = new FileMapInfo(static_archive, true); - mapinfo->populate_header(MetaspaceShared::core_region_alignment()); - mapinfo->set_serialized_data(serialized_data); - mapinfo->set_cloned_vtables(CppVtables::vtables_serialized_base()); - mapinfo->open_for_write(); - builder.write_archive(mapinfo, &_heap_info); - - if (PrintSystemDictionaryAtExit) { - SystemDictionary::print(); - } - - if (AllowArchivingWithJavaAgent) { - log_warning(cds)("This archive was created with AllowArchivingWithJavaAgent. It should be used " - "for testing purposes only and should not be used in a production environment"); - } + _map_info = new FileMapInfo(static_archive, true); + _map_info->populate_header(MetaspaceShared::core_region_alignment()); + _map_info->set_serialized_data(serialized_data); + _map_info->set_cloned_vtables(CppVtables::vtables_serialized_base()); } class CollectCLDClosure : public CLDClosure { @@ -663,21 +652,19 @@ void MetaspaceShared::prepare_for_dumping() { // Preload classes from a list, populate the shared spaces and dump to a // file. -void MetaspaceShared::preload_and_dump() { - EXCEPTION_MARK; +void MetaspaceShared::preload_and_dump(TRAPS) { ResourceMark rm(THREAD); - preload_and_dump_impl(THREAD); + StaticArchiveBuilder builder; + preload_and_dump_impl(builder, THREAD); if (HAS_PENDING_EXCEPTION) { if (PENDING_EXCEPTION->is_a(vmClasses::OutOfMemoryError_klass())) { log_error(cds)("Out of memory. Please run with a larger Java heap, current MaxHeapSize = " SIZE_FORMAT "M", MaxHeapSize/M); - CLEAR_PENDING_EXCEPTION; - MetaspaceShared::unrecoverable_writing_error(); + MetaspaceShared::writing_error(); } else { log_error(cds)("%s: %s", PENDING_EXCEPTION->klass()->external_name(), java_lang_String::as_utf8_string(java_lang_Throwable::message(PENDING_EXCEPTION))); - CLEAR_PENDING_EXCEPTION; - MetaspaceShared::unrecoverable_writing_error("VM exits due to exception, use -Xlog:cds,exceptions=trace for detail"); + MetaspaceShared::writing_error("Unexpected exception, use -Xlog:cds,exceptions=trace for detail"); } } } @@ -768,7 +755,7 @@ void MetaspaceShared::preload_classes(TRAPS) { log_info(cds)("Loading classes to share: done."); } -void MetaspaceShared::preload_and_dump_impl(TRAPS) { +void MetaspaceShared::preload_and_dump_impl(StaticArchiveBuilder& builder, TRAPS) { preload_classes(CHECK); if (SharedArchiveConfigFile) { @@ -805,8 +792,30 @@ void MetaspaceShared::preload_and_dump_impl(TRAPS) { } #endif - VM_PopulateDumpSharedSpace op; + VM_PopulateDumpSharedSpace op(builder); VMThread::execute(&op); + + if (!write_static_archive(&builder, op.map_info(), op.heap_info())) { + THROW_MSG(vmSymbols::java_io_IOException(), "Encountered error while dumping"); + } +} + +bool MetaspaceShared::write_static_archive(ArchiveBuilder* builder, FileMapInfo* map_info, ArchiveHeapInfo* heap_info) { + // relocate the data so that it can be mapped to MetaspaceShared::requested_base_address() + // without runtime relocation. + builder->relocate_to_requested(); + + map_info->open_for_write(); + if (!map_info->is_open()) { + return false; + } + builder->write_archive(map_info, heap_info); + + if (AllowArchivingWithJavaAgent) { + log_warning(cds)("This archive was created with AllowArchivingWithJavaAgent. It should be used " + "for testing purposes only and should not be used in a production environment"); + } + return true; } // Returns true if the class's status has changed. @@ -916,11 +925,17 @@ void MetaspaceShared::unrecoverable_loading_error(const char* message) { // This function is called when the JVM is unable to write the specified CDS archive due to an // unrecoverable error. void MetaspaceShared::unrecoverable_writing_error(const char* message) { + writing_error(message); + vm_direct_exit(1); +} + +// This function is called when the JVM is unable to write the specified CDS archive due to a +// an error. The error will be propagated +void MetaspaceShared::writing_error(const char* message) { log_error(cds)("An error has occurred while writing the shared archive file."); if (message != nullptr) { log_error(cds)("%s", message); } - vm_direct_exit(1); } void MetaspaceShared::initialize_runtime_shared_and_meta_spaces() { diff --git a/src/hotspot/share/cds/metaspaceShared.hpp b/src/hotspot/share/cds/metaspaceShared.hpp index 1fb6ae8814210..f26af21676a83 100644 --- a/src/hotspot/share/cds/metaspaceShared.hpp +++ b/src/hotspot/share/cds/metaspaceShared.hpp @@ -31,9 +31,12 @@ #include "oops/oop.hpp" #include "utilities/macros.hpp" +class ArchiveBuilder; +class ArchiveHeapInfo; class FileMapInfo; class outputStream; class SerializeClosure; +class StaticArchiveBuilder; template class GrowableArray; @@ -66,13 +69,13 @@ class MetaspaceShared : AllStatic { }; static void prepare_for_dumping() NOT_CDS_RETURN; - static void preload_and_dump() NOT_CDS_RETURN; + static void preload_and_dump(TRAPS) NOT_CDS_RETURN; #ifdef _LP64 static void adjust_heap_sizes_for_dumping() NOT_CDS_JAVA_HEAP_RETURN; #endif private: - static void preload_and_dump_impl(TRAPS) NOT_CDS_RETURN; + static void preload_and_dump_impl(StaticArchiveBuilder& builder, TRAPS) NOT_CDS_RETURN; static void preload_classes(TRAPS) NOT_CDS_RETURN; public: @@ -105,6 +108,7 @@ class MetaspaceShared : AllStatic { static void unrecoverable_loading_error(const char* message = nullptr); static void unrecoverable_writing_error(const char* message = nullptr); + static void writing_error(const char* message = nullptr); static void serialize(SerializeClosure* sc) NOT_CDS_RETURN; @@ -166,6 +170,7 @@ class MetaspaceShared : AllStatic { private: static void read_extra_data(JavaThread* current, const char* filename) NOT_CDS_RETURN; + static bool write_static_archive(ArchiveBuilder* builder, FileMapInfo* map_info, ArchiveHeapInfo* heap_info); static FileMapInfo* open_static_archive(); static FileMapInfo* open_dynamic_archive(); // use_requested_addr: If true (default), attempt to map at the address the diff --git a/src/hotspot/share/runtime/threads.cpp b/src/hotspot/share/runtime/threads.cpp index 9800f85dfe44a..ea18ff3a00686 100644 --- a/src/hotspot/share/runtime/threads.cpp +++ b/src/hotspot/share/runtime/threads.cpp @@ -818,7 +818,7 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { #endif if (CDSConfig::is_dumping_static_archive()) { - MetaspaceShared::preload_and_dump(); + MetaspaceShared::preload_and_dump(CHECK_JNI_ERR); } if (log_is_enabled(Info, perf, class, link)) { diff --git a/test/hotspot/jtreg/runtime/cds/StaticWritingError.java b/test/hotspot/jtreg/runtime/cds/StaticWritingError.java new file mode 100644 index 0000000000000..1bb3e7e721d94 --- /dev/null +++ b/test/hotspot/jtreg/runtime/cds/StaticWritingError.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8306580 + * @summary Test the writing error when archive file cannot be created + * @requires vm.cds + * @library /test/lib + * @run driver StaticWritingError + */ + +import java.io.File; +import jdk.test.lib.cds.CDSOptions; +import jdk.test.lib.cds.CDSTestUtils; +import jdk.test.lib.process.OutputAnalyzer; + +public class StaticWritingError { + public static void main(String[] args) throws Exception { + String directoryName = "nosuchdir"; + String archiveName = "staticWritingError.jsa"; + + // Perform static dump and attempt to write archive in unwritable directory + CDSOptions opts = (new CDSOptions()) + .addPrefix("-Xlog:cds") + .setArchiveName(directoryName + File.separator + archiveName); + OutputAnalyzer out = CDSTestUtils.createArchive(opts); + out.shouldHaveExitValue(1); + out.shouldContain("Unable to create shared archive file"); + out.shouldContain("Encountered error while dumping"); + } +} From 3a26bbcebc2f7d11b172f2b16192a3adefeb8111 Mon Sep 17 00:00:00 2001 From: Alisen Chung Date: Tue, 25 Jun 2024 02:19:57 +0000 Subject: [PATCH 098/102] 8185429: [macos] After a modal dialog is closed, no window becomes active Reviewed-by: tr, dnguyen, serb --- .../macosx/classes/sun/lwawt/macosx/CPlatformWindow.java | 8 +++++++- test/jdk/ProblemList.txt | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 1be76db3acdf2..1bf77f5ee69b1 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -64,6 +64,7 @@ import sun.awt.AWTAccessor.ComponentAccessor; import sun.awt.AWTAccessor.WindowAccessor; import sun.java2d.SurfaceData; +import sun.lwawt.LWKeyboardFocusManagerPeer; import sun.lwawt.LWLightweightFramePeer; import sun.lwawt.LWToolkit; import sun.lwawt.LWWindowPeer; @@ -1056,6 +1057,11 @@ public void setModalBlocked(boolean blocked) { } execute(ptr -> nativeSetEnabled(ptr, !blocked)); + + Window currFocus = LWKeyboardFocusManagerPeer.getInstance().getCurrentFocusedWindow(); + if (!blocked && (target == currFocus)) { + requestWindowFocus(); + } checkBlockingAndOrder(); } diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 546f95b0054b1..b3fb31dc789da 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -781,7 +781,6 @@ java/awt/Modal/PrintDialogsTest/PrintDialogsTest.java 8068378 generic-all java/awt/event/MouseEvent/AltGraphModifierTest/AltGraphModifierTest.java 8162380 generic-all java/awt/image/VolatileImage/VolatileImageConfigurationTest.java 8171069 macosx-all,linux-all java/awt/Modal/InvisibleParentTest/InvisibleParentTest.java 8172245 linux-all -java/awt/print/Dialog/RestoreActiveWindowTest/RestoreActiveWindowTest.java 8185429 macosx-all java/awt/Frame/FrameStateTest/FrameStateTest.java 8203920 macosx-all,linux-all java/awt/print/PrinterJob/ScaledText/ScaledText.java 8231226 macosx-all java/awt/font/TextLayout/TestJustification.java 8250791 macosx-all From e527e1c32fcc7b2560cec540bcde930075ac284a Mon Sep 17 00:00:00 2001 From: Prasanta Sadhukhan Date: Tue, 25 Jun 2024 03:26:18 +0000 Subject: [PATCH 099/102] 8334580: Deprecate no-arg constructor BasicSliderUI() for removal Reviewed-by: kcr, aivanov, iris, prr --- .../share/classes/javax/swing/plaf/basic/BasicSliderUI.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java index 7b94bedea0dcd..ad5cb9c9ab9d8 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java @@ -150,7 +150,10 @@ public class BasicSliderUI extends SliderUI{ /** * Constructs a {@code BasicSliderUI}. + * @deprecated This constructor was exposed erroneously and will be removed in a future release. + * Use {@link #BasicSliderUI(JSlider)} instead. */ + @Deprecated(since = "23", forRemoval = true) public BasicSliderUI() {} /** From 974dca80df71c5cbe492d1e8ca5cee76bcc79358 Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Tue, 25 Jun 2024 05:06:33 +0000 Subject: [PATCH 100/102] 8334223: Make Arena MEMFLAGs immutable Reviewed-by: jsjolen, azafari, gziemski --- src/hotspot/share/compiler/compilerThread.cpp | 7 ++----- src/hotspot/share/memory/arena.cpp | 16 ++++++---------- src/hotspot/share/memory/arena.hpp | 13 +++++++------ src/hotspot/share/memory/resourceArea.cpp | 13 +------------ src/hotspot/share/memory/resourceArea.hpp | 8 ++------ src/hotspot/share/prims/jni.cpp | 6 +++--- src/hotspot/share/runtime/handles.hpp | 4 ++-- src/hotspot/share/runtime/javaThread.cpp | 16 +++++++--------- src/hotspot/share/runtime/javaThread.hpp | 8 +++++--- src/hotspot/share/runtime/javaThread.inline.hpp | 2 +- src/hotspot/share/runtime/thread.cpp | 6 +++--- src/hotspot/share/runtime/thread.hpp | 4 ++-- 12 files changed, 41 insertions(+), 62 deletions(-) diff --git a/src/hotspot/share/compiler/compilerThread.cpp b/src/hotspot/share/compiler/compilerThread.cpp index 47e3f5a6f499b..e212200a47c65 100644 --- a/src/hotspot/share/compiler/compilerThread.cpp +++ b/src/hotspot/share/compiler/compilerThread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ // Create a CompilerThread CompilerThread::CompilerThread(CompileQueue* queue, CompilerCounters* counters) - : JavaThread(&CompilerThread::thread_entry) { + : JavaThread(&CompilerThread::thread_entry, 0, mtCompiler) { _env = nullptr; _log = nullptr; _task = nullptr; @@ -43,9 +43,6 @@ CompilerThread::CompilerThread(CompileQueue* queue, _compiler = nullptr; _arena_stat = CompilationMemoryStatistic::enabled() ? new ArenaStatCounter : nullptr; - // Compiler uses resource area for compilation, let's bias it to mtCompiler - resource_area()->bias_to(mtCompiler); - #ifndef PRODUCT _ideal_graph_printer = nullptr; #endif diff --git a/src/hotspot/share/memory/arena.cpp b/src/hotspot/share/memory/arena.cpp index 6faffe0d20b9c..0399c6922e38d 100644 --- a/src/hotspot/share/memory/arena.cpp +++ b/src/hotspot/share/memory/arena.cpp @@ -209,7 +209,12 @@ void Chunk::next_chop(Chunk* k) { k->_next = nullptr; } -Arena::Arena(MEMFLAGS flag, Tag tag, size_t init_size) : _flags(flag), _tag(tag), _size_in_bytes(0) { +Arena::Arena(MEMFLAGS flag, Tag tag, size_t init_size) : + _flags(flag), _tag(tag), + _size_in_bytes(0), + _first(nullptr), _chunk(nullptr), + _hwm(nullptr), _max(nullptr) +{ init_size = ARENA_ALIGN(init_size); _chunk = ChunkPool::allocate_chunk(init_size, AllocFailStrategy::EXIT_OOM); _first = _chunk; @@ -219,15 +224,6 @@ Arena::Arena(MEMFLAGS flag, Tag tag, size_t init_size) : _flags(flag), _tag(tag) set_size_in_bytes(init_size); } -Arena::Arena(MEMFLAGS flag, Tag tag) : _flags(flag), _tag(tag), _size_in_bytes(0) { - _chunk = ChunkPool::allocate_chunk(Chunk::init_size, AllocFailStrategy::EXIT_OOM); - _first = _chunk; - _hwm = _chunk->bottom(); // Save the cached hwm, max - _max = _chunk->top(); - MemTracker::record_new_arena(flag); - set_size_in_bytes(Chunk::init_size); -} - Arena::~Arena() { destruct_contents(); MemTracker::record_arena_free(_flags); diff --git a/src/hotspot/share/memory/arena.hpp b/src/hotspot/share/memory/arena.hpp index ed441eca85182..1ca8a78782541 100644 --- a/src/hotspot/share/memory/arena.hpp +++ b/src/hotspot/share/memory/arena.hpp @@ -94,21 +94,23 @@ class Arena : public CHeapObjBase { tag_node // C2 Node arena }; +private: + const MEMFLAGS _flags; // Memory tracking flags + const Tag _tag; + size_t _size_in_bytes; // Size of arena (used for native memory tracking) + protected: friend class HandleMark; friend class NoHandleMark; friend class VMStructs; - MEMFLAGS _flags; // Memory tracking flags - const Tag _tag; - uint32_t _init_size; Chunk* _first; // First chunk Chunk* _chunk; // current chunk char* _hwm; // High water mark char* _max; // and max in current chunk + // Get a new Chunk of at least size x void* grow(size_t x, AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM); - size_t _size_in_bytes; // Size of arena (used for native memory tracking) void* internal_amalloc(size_t x, AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM) { assert(is_aligned(x, BytesPerWord), "misaligned size"); @@ -124,8 +126,7 @@ class Arena : public CHeapObjBase { public: // Start the chunk_pool cleaner task static void start_chunk_pool_cleaner_task(); - Arena(MEMFLAGS memflag, Tag tag = Tag::tag_other); - Arena(MEMFLAGS memflag, Tag tag, size_t init_size); + Arena(MEMFLAGS memflag, Tag tag = Tag::tag_other, size_t init_size = Chunk::init_size); ~Arena(); void destruct_contents(); char* hwm() const { return _hwm; } diff --git a/src/hotspot/share/memory/resourceArea.cpp b/src/hotspot/share/memory/resourceArea.cpp index 409460709e464..d5a7513ba19d2 100644 --- a/src/hotspot/share/memory/resourceArea.cpp +++ b/src/hotspot/share/memory/resourceArea.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,17 +30,6 @@ #include "runtime/javaThread.hpp" #include "utilities/vmError.hpp" -void ResourceArea::bias_to(MEMFLAGS new_flags) { - if (new_flags != _flags) { - size_t size = size_in_bytes(); - MemTracker::record_arena_size_change(-ssize_t(size), _flags); - MemTracker::record_arena_free(_flags); - MemTracker::record_new_arena(new_flags); - MemTracker::record_arena_size_change(ssize_t(size), new_flags); - _flags = new_flags; - } -} - #ifdef ASSERT ResourceMark::ResourceMark(ResourceArea* area, Thread* thread) : diff --git a/src/hotspot/share/memory/resourceArea.hpp b/src/hotspot/share/memory/resourceArea.hpp index ba294e33effbb..5fd376068c5b3 100644 --- a/src/hotspot/share/memory/resourceArea.hpp +++ b/src/hotspot/share/memory/resourceArea.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,10 +60,6 @@ class ResourceArea: public Arena { char* allocate_bytes(size_t size, AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM); - // Bias this resource area to specific memory type - // (by default, ResourceArea is tagged as mtThread, per-thread general purpose storage) - void bias_to(MEMFLAGS flags); - DEBUG_ONLY(int nesting() const { return _nesting; }) // Capture the state of a ResourceArea needed by a ResourceMark for @@ -81,7 +77,7 @@ class ResourceArea: public Arena { _chunk(area->_chunk), _hwm(area->_hwm), _max(area->_max), - _size_in_bytes(area->_size_in_bytes) + _size_in_bytes(area->size_in_bytes()) DEBUG_ONLY(COMMA _nesting(area->_nesting)) {} }; diff --git a/src/hotspot/share/prims/jni.cpp b/src/hotspot/share/prims/jni.cpp index b6a4443a8c763..ae040d661380e 100644 --- a/src/hotspot/share/prims/jni.cpp +++ b/src/hotspot/share/prims/jni.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 Red Hat, Inc. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024 Red Hat, Inc. * Copyright (c) 2021, Azul Systems, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -3775,7 +3775,7 @@ static jint attach_current_thread(JavaVM *vm, void **penv, void *_args, bool dae // Create a thread and mark it as attaching so it will be skipped by the // ThreadsListEnumerator - see CR 6404306 - JavaThread* thread = new JavaThread(true); + JavaThread* thread = JavaThread::create_attaching_thread(); // Set correct safepoint info. The thread is going to call into Java when // initializing the Java level thread object. Hence, the correct state must diff --git a/src/hotspot/share/runtime/handles.hpp b/src/hotspot/share/runtime/handles.hpp index 7865d32bef20d..39e59cc1ef0ef 100644 --- a/src/hotspot/share/runtime/handles.hpp +++ b/src/hotspot/share/runtime/handles.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -187,7 +187,7 @@ class HandleArea: public Arena { HandleArea* _prev; // link to outer (older) area public: // Constructor - HandleArea(HandleArea* prev) : Arena(mtThread, Tag::tag_ha, Chunk::tiny_size) { + HandleArea(MEMFLAGS flags, HandleArea* prev) : Arena(flags, Tag::tag_ha, Chunk::tiny_size) { debug_only(_handle_mark_nesting = 0); debug_only(_no_handle_mark_nesting = 0); _prev = prev; diff --git a/src/hotspot/share/runtime/javaThread.cpp b/src/hotspot/share/runtime/javaThread.cpp index 70bb47c213ca5..a3eef07ba0ac9 100644 --- a/src/hotspot/share/runtime/javaThread.cpp +++ b/src/hotspot/share/runtime/javaThread.cpp @@ -409,9 +409,9 @@ void JavaThread::check_for_valid_safepoint_state() { // A JavaThread is a normal Java thread -JavaThread::JavaThread() : +JavaThread::JavaThread(MEMFLAGS flags) : + Thread(flags), // Initialize fields - _on_thread_list(false), DEBUG_ONLY(_java_call_counter(0) COMMA) _entry_point(nullptr), @@ -525,13 +525,12 @@ JavaThread::JavaThread() : assert(deferred_card_mark().is_empty(), "Default MemRegion ctor"); } -JavaThread::JavaThread(bool is_attaching_via_jni) : JavaThread() { - if (is_attaching_via_jni) { - _jni_attach_state = _attaching_via_jni; - } +JavaThread* JavaThread::create_attaching_thread() { + JavaThread* jt = new JavaThread(); + jt->_jni_attach_state = _attaching_via_jni; + return jt; } - // interrupt support void JavaThread::interrupt() { @@ -634,8 +633,7 @@ void JavaThread::block_if_vm_exited() { } } -JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz) : JavaThread() { - _jni_attach_state = _not_attaching_via_jni; +JavaThread::JavaThread(ThreadFunction entry_point, size_t stack_sz, MEMFLAGS flags) : JavaThread(flags) { set_entry_point(entry_point); // Create the native thread itself. // %note runtime_23 diff --git a/src/hotspot/share/runtime/javaThread.hpp b/src/hotspot/share/runtime/javaThread.hpp index 2541aaded00a3..755a8268864dd 100644 --- a/src/hotspot/share/runtime/javaThread.hpp +++ b/src/hotspot/share/runtime/javaThread.hpp @@ -478,11 +478,13 @@ class JavaThread: public Thread { public: // Constructor - JavaThread(); // delegating constructor - JavaThread(bool is_attaching_via_jni); // for main thread and JNI attached threads - JavaThread(ThreadFunction entry_point, size_t stack_size = 0); + JavaThread(MEMFLAGS flags = mtThread); // delegating constructor + JavaThread(ThreadFunction entry_point, size_t stack_size = 0, MEMFLAGS flags = mtThread); ~JavaThread(); + // Factory method to create a new JavaThread whose attach state is "is attaching" + static JavaThread* create_attaching_thread(); + #ifdef ASSERT // verify this JavaThread hasn't be published in the Threads::list yet void verify_not_published(); diff --git a/src/hotspot/share/runtime/javaThread.inline.hpp b/src/hotspot/share/runtime/javaThread.inline.hpp index 7b1ad7e17e1cd..a51a30ae577c1 100644 --- a/src/hotspot/share/runtime/javaThread.inline.hpp +++ b/src/hotspot/share/runtime/javaThread.inline.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2021, Azul Systems, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * diff --git a/src/hotspot/share/runtime/thread.cpp b/src/hotspot/share/runtime/thread.cpp index d98fcf6f664a2..e72077adabf3b 100644 --- a/src/hotspot/share/runtime/thread.cpp +++ b/src/hotspot/share/runtime/thread.cpp @@ -64,7 +64,7 @@ THREAD_LOCAL Thread* Thread::_thr_current = nullptr; DEBUG_ONLY(Thread* Thread::_starting_thread = nullptr;) -Thread::Thread() { +Thread::Thread(MEMFLAGS flags) { DEBUG_ONLY(_run_state = PRE_CALL_RUN;) @@ -78,9 +78,9 @@ Thread::Thread() { // allocated data structures set_osthread(nullptr); - set_resource_area(new (mtThread)ResourceArea()); + set_resource_area(new (flags) ResourceArea(flags)); DEBUG_ONLY(_current_resource_mark = nullptr;) - set_handle_area(new (mtThread) HandleArea(nullptr)); + set_handle_area(new (flags) HandleArea(flags, nullptr)); set_metadata_handles(new (mtClass) GrowableArray(30, mtClass)); set_last_handle_mark(nullptr); DEBUG_ONLY(_missed_ic_stub_refill_verifier = nullptr); diff --git a/src/hotspot/share/runtime/thread.hpp b/src/hotspot/share/runtime/thread.hpp index 44c845986f375..e9fee4d113aaa 100644 --- a/src/hotspot/share/runtime/thread.hpp +++ b/src/hotspot/share/runtime/thread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2021, Azul Systems, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -277,7 +277,7 @@ class Thread: public ThreadShadow { // is waiting to lock public: // Constructor - Thread(); + Thread(MEMFLAGS flag = mtThread); virtual ~Thread() = 0; // Thread is abstract. // Manage Thread::current() From c30e040342c69a213bdff321fdcb0d27ff740489 Mon Sep 17 00:00:00 2001 From: Neethu Prasad Date: Tue, 25 Jun 2024 07:08:07 +0000 Subject: [PATCH 101/102] 8331911: Reconsider locking for recently disarmed nmethods Reviewed-by: shade, eosterlund --- src/hotspot/share/code/nmethod.cpp | 6 ++---- src/hotspot/share/gc/shared/barrierSetNMethod.cpp | 9 +++++++++ src/hotspot/share/gc/x/xBarrierSetNMethod.cpp | 10 ++++++++-- src/hotspot/share/gc/z/zBarrierSetNMethod.cpp | 11 +++++++++-- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index 2f4999dc4e366..ea56ee6129812 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -844,10 +844,8 @@ void nmethod::run_nmethod_entry_barrier() { // By calling this nmethod entry barrier, it plays along and acts // like any other nmethod found on the stack of a thread (fewer surprises). nmethod* nm = this; - if (bs_nm->is_armed(nm)) { - bool alive = bs_nm->nmethod_entry_barrier(nm); - assert(alive, "should be alive"); - } + bool alive = bs_nm->nmethod_entry_barrier(nm); + assert(alive, "should be alive"); } } diff --git a/src/hotspot/share/gc/shared/barrierSetNMethod.cpp b/src/hotspot/share/gc/shared/barrierSetNMethod.cpp index 548e6b671eff0..79e3f47ed57bd 100644 --- a/src/hotspot/share/gc/shared/barrierSetNMethod.cpp +++ b/src/hotspot/share/gc/shared/barrierSetNMethod.cpp @@ -100,6 +100,12 @@ bool BarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) { virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); } }; + if (!is_armed(nm)) { + // Some other thread got here first and healed the oops + // and disarmed the nmethod. No need to continue. + return true; + } + // If the nmethod is the only thing pointing to the oops, and we are using a // SATB GC, then it is important that this code marks them live. // Also, with concurrent GC, it is possible that frames in continuation stack @@ -172,6 +178,9 @@ int BarrierSetNMethod::nmethod_stub_entry_barrier(address* return_address_ptr) { nmethod* nm = cb->as_nmethod(); BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); + // Check for disarmed method here to avoid going into DeoptimizeNMethodBarriersALot code + // too often. nmethod_entry_barrier checks for disarmed status itself, + // but we have no visibility into whether the barrier acted or not. if (!bs_nm->is_armed(nm)) { return 0; } diff --git a/src/hotspot/share/gc/x/xBarrierSetNMethod.cpp b/src/hotspot/share/gc/x/xBarrierSetNMethod.cpp index 002d6bc00c5d7..3dc76463028b8 100644 --- a/src/hotspot/share/gc/x/xBarrierSetNMethod.cpp +++ b/src/hotspot/share/gc/x/xBarrierSetNMethod.cpp @@ -32,12 +32,18 @@ #include "runtime/threadWXSetters.inline.hpp" bool XBarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) { + if (!is_armed(nm)) { + // Some other thread got here first and healed the oops + // and disarmed the nmethod. No need to continue. + return true; + } + XLocker locker(XNMethod::lock_for_nmethod(nm)); log_trace(nmethod, barrier)("Entered critical zone for %p", nm); if (!is_armed(nm)) { - // Some other thread got here first and healed the oops - // and disarmed the nmethod. + // Some other thread managed to complete while we were + // waiting for lock. No need to continue. return true; } diff --git a/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp b/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp index 2c58b0155648a..b8ecc3eddd3cd 100644 --- a/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp +++ b/src/hotspot/share/gc/z/zBarrierSetNMethod.cpp @@ -37,6 +37,13 @@ #include "runtime/threadWXSetters.inline.hpp" bool ZBarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) { + if (!is_armed(nm)) { + log_develop_trace(gc, nmethod)("nmethod: " PTR_FORMAT " visited by entry (disarmed before lock)", p2i(nm)); + // Some other thread got here first and healed the oops + // and disarmed the nmethod. No need to continue. + return true; + } + ZLocker locker(ZNMethod::lock_for_nmethod(nm)); log_trace(nmethod, barrier)("Entered critical zone for %p", nm); @@ -44,8 +51,8 @@ bool ZBarrierSetNMethod::nmethod_entry_barrier(nmethod* nm) { if (!is_armed(nm)) { log_develop_trace(gc, nmethod)("nmethod: " PTR_FORMAT " visited by entry (disarmed)", p2i(nm)); - // Some other thread got here first and healed the oops - // and disarmed the nmethod. + // Some other thread managed to complete while we were + // waiting for lock. No need to continue. return true; } From baafa662a2f0706e4275a4fe0459ee6759369858 Mon Sep 17 00:00:00 2001 From: Kevin Walls Date: Tue, 25 Jun 2024 09:12:09 +0000 Subject: [PATCH 102/102] 8334287: Man page update for jstatd deprecation Reviewed-by: alanb --- src/jdk.jstatd/share/man/jstatd.1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/jdk.jstatd/share/man/jstatd.1 b/src/jdk.jstatd/share/man/jstatd.1 index 4bd90104624b1..f5d2f347b4530 100644 --- a/src/jdk.jstatd/share/man/jstatd.1 +++ b/src/jdk.jstatd/share/man/jstatd.1 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved. +.\" Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved. .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. .\" .\" This code is free software; you can redistribute it and/or modify it @@ -43,7 +43,9 @@ jstatd - monitor the creation and termination of instrumented Java HotSpot VMs .SH SYNOPSIS .PP -\f[B]Note:\f[R] This command is experimental and unsupported. +\f[B]WARNING:\f[R] This command is experimental, unsupported, and +deprecated. +It will be removed in a future release. .PP \f[V]jstatd\f[R] [\f[I]options\f[R]] .TP