javapathfinder / jpf-core

JPF is an extensible software analysis framework for Java bytecode. jpf-core is the basis for all JPF projects; you always need to install it. It contains the basic VM and model checking infrastructure, and can be used to check for concurrency defects like deadlocks, and unhandled exceptions like NullPointerExceptions and AssertionErrors.
524 stars 335 forks source link

"record" feature in jpf-core/java-17 #484

Open eklaDFF opened 1 month ago

eklaDFF commented 1 month ago

@cyrille-artho @pparizek

This issue is to track the record feature of java-17 on JPF.

Here is the Test to test record :

package java17;

import gov.nasa.jpf.util.test.TestJPF;
import org.junit.Test;

public class RecordFeatureTest extends TestJPF {

    record Point(int x, int y){}

    // Official documents suggest that fields of "record" are "private" and "final".
    // So we are testing by direct access. It should fail here at compile time, but do not know why it works.
    @Test
    public void testRecordFieldsDirectly(){
        Point point = new Point(4, 5);

        assertEquals("",4,point.x);
        assertEquals("",5,point.y);
    }

    @Test
    public void testRecordFields(){
        Point point = new Point(4, 5);

        assertEquals("",4,point.x());
        assertEquals("",5,point.y());
    }

    @Test
    public void testRecordEquality(){
        Point point1 = new Point(4,5);
        Point point2 = new Point(4,5);
        Point point3 = new Point(3,5);

        assertEquals("",point1, point2);
        assertNotEquals("",point1, point3);
    }

    @Test
    public void testRecordHashCode() {
        Point point1 = new Point(4, 5);
        Point point2 = new Point(4, 5);
        Point point3 = new Point(3,5);

        assertEquals("", point1.hashCode(), point2.hashCode());
        assertNotEquals("",point1.hashCode(),point3.hashCode());
    }

    @Test
    public void testRecordToString() {
        Point point = new Point(4, 5);

        assertEquals("Point[x=4, y=5]", point.toString());
    }
}

All of the above Tests passes (currently on OpenJDK-17).

Question 1 : How can we access the 'private field ? Question 2 : These Tests passed on underlying JVM. Do verifyNoPropertyViolation will make it run on JPF ?

eklaDFF commented 1 month ago

BTW, when we wrap the Tests with verifyNoPropertyViolation(), like below :

package java17;

import gov.nasa.jpf.util.test.TestJPF;
import org.junit.Test;

public class RecordFeatureTest extends TestJPF {

    record Point(int x, int y){}

    // Official documents suggest that fields of "record" are "private" and "final".
    // So we are testing by direct access. It should fail here at compile time, but do not know why it works.
    @Test
    public void testRecordFieldsDirectly(){
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("",4,point.x);
            assertEquals("",5,point.y);

        }
    }

    @Test
    public void testRecordFields(){
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("",4,point.x());
            assertEquals("",5,point.y());

        }
    }

    @Test
    public void testRecordEquality(){
        if (verifyNoPropertyViolation()){

            Point point1 = new Point(4,5);
            Point point2 = new Point(4,5);
            Point point3 = new Point(3,5);

            assertEquals("",point1, point2);
            assertNotEquals("",point1, point3);

        }
    }

    @Test
    public void testRecordHashCode() {
        if (verifyNoPropertyViolation()){

            Point point1 = new Point(4, 5);
            Point point2 = new Point(4, 5);
            Point point3 = new Point(3,5);

            assertEquals("", point1.hashCode(), point2.hashCode());
            assertNotEquals("",point1.hashCode(),point3.hashCode());

        }
    }

    @Test
    public void testRecordToString() {
        if (verifyNoPropertyViolation()){

            Point point = new Point(4, 5);

            assertEquals("Point[x=4, y=5]", point.toString());

        }
    }
}

All the above Tests failed with output :

java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
    at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131)
    at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
    at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:112)
    at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
    at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
    at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:80)
    at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:770)
    at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
    at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
    at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
    at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
    at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
    at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
    at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
    at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
    at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
    at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
    at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
    at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
    at gov.nasa.jpf.search.Search.forward(Search.java:937)
    at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
    at gov.nasa.jpf.JPF.run(JPF.java:613)
    at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
    at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
    at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
    at java17.RecordFeatureTest.testRecordFields(RecordFeatureTest.java:27)
        ......
        ......
        ......
cyrille-artho commented 1 month ago

Please look into the compiled bytecode to see what may have caused this behavior in JPF. It is possible that JPF completely misinterprets new bytecode attributes that were introduced in Java 17, as its class loader has been written for older versions of Java. Also, share your WIP on a branch so Pavel and I can take a look.

eklaDFF commented 1 month ago

"Please look into the compiled bytecode to see what may have caused this behavior in JPF. It is possible that JPF completely misinterprets new bytecode attributes that were introduced in Java 17, as its class loader has been written for older versions of Java." -----> How can I access the compiled bytecode in case of JPF ?

I created a regular class equivalent to record functionality and tested them. Everything was fine as all Tests passed.

package java17;

import gov.nasa.jpf.util.test.TestJPF;
import org.junit.Test;

public class RegulaNonRecordClassTest  extends TestJPF {
    class Point {
        private final int x;
        private final int y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }

        public int x() {
            return x;
        }

        public int y() {
            return y;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Point point = (Point) o;
            return x == point.x && y == point.y;
        }

        @Override
        public String toString() {
            return "Point[x=" + x + ", y=" + y + "]";
        }
    }

    @Test
    public void testFields() {
        Point point = new Point(3, 4);
        assertEquals(3, point.x());
        assertEquals(4, point.y());
    }

    @Test
    public void testEquality() {
        Point point1 = new Point(3, 4);
        Point point2 = new Point(3, 4);
        assertEquals(point1, point2);
    }

    @Test
    public void testToString() {
        Point point = new Point(3, 4);
        assertEquals("Point[x=3, y=4]", point.toString());
    }

}

Got this idea from different source (like ChatGPT) to try, things will be more clear.

"Also, share your WIP on a branch so Pavel and I can take a look." -----> https://github.com/eklaDFF/jpf-core/tree/NewFeatureRecordRoughBranch

cyrille-artho commented 1 month ago

Use javap -v to look at the bytecode.

eklaDFF commented 1 month ago
javap -v src/tests/java17/RecordFeatureTest.class
Error: class not found: src/tests/java17/RecordFeatureTest.class

I need to compile them first. But do not know how in this case.

ekla@Eklas-MacBook-Air jpf-core % javac /Users/ekla/GSOC/JPFjava17/jpf-core
error: invalid flag: /Users/ekla/GSOC/JPFjava17/jpf-core
Usage: javac <options> <source files>
use --help for a list of possible options
ekla@Eklas-MacBook-Air jpf-core % 
cyrille-artho commented 1 month ago

You indicate the fully qualified class name, not the file name. Use -cp or -classpath for the location of the class file and javap -h for more help on options.

eklaDFF commented 1 month ago

Thankyou @cyrille-artho

This one worked : javap -v -cp build/tests/java17 RecordFeatureTest . Compiled codes are in build actually.

Here is the output for above command (I will take some time to study about Byte Codes. This is a great opportunity to learn about Byte Codes.) :

ekla@Eklas-MacBook-Air jpf-core % javap -v -cp build/tests/java17 RecordFeatureTest
Warning: File build/tests/java17/RecordFeatureTest.class does not contain class RecordFeatureTest
Classfile /Users/ekla/GSOC/JPFjava17/jpf-core/build/tests/java17/RecordFeatureTest.class
  Last modified 30-Jul-2024; size 1917 bytes
  SHA-256 checksum 235e1883c602b2d1db7b20d106dbd850c69ae262bffc553fb768dd2650017d3d
  Compiled from "RecordFeatureTest.java"
public class java17.RecordFeatureTest extends gov.nasa.jpf.util.test.TestJPF
  minor version: 0
  major version: 61
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #10                         // java17/RecordFeatureTest
  super_class: #2                         // gov/nasa/jpf/util/test/TestJPF
  interfaces: 0, fields: 0, methods: 6, attributes: 3
Constant pool:
   #1 = Methodref          #2.#3          // gov/nasa/jpf/util/test/TestJPF."<init>":()V
   #2 = Class              #4             // gov/nasa/jpf/util/test/TestJPF
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               gov/nasa/jpf/util/test/TestJPF
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Class              #8             // java/lang/String
   #8 = Utf8               java/lang/String
   #9 = Methodref          #10.#11        // java17/RecordFeatureTest.verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #10 = Class              #12            // java17/RecordFeatureTest
  #11 = NameAndType        #13:#14        // verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #12 = Utf8               java17/RecordFeatureTest
  #13 = Utf8               verifyNoPropertyViolation
  #14 = Utf8               ([Ljava/lang/String;)Z
  #15 = Class              #16            // java17/RecordFeatureTest$Point
  #16 = Utf8               java17/RecordFeatureTest$Point
  #17 = Methodref          #15.#18        // java17/RecordFeatureTest$Point."<init>":(II)V
  #18 = NameAndType        #5:#19         // "<init>":(II)V
  #19 = Utf8               (II)V
  #20 = String             #21            //
  #21 = Utf8
  #22 = Fieldref           #15.#23        // java17/RecordFeatureTest$Point.x:I
  #23 = NameAndType        #24:#25        // x:I
  #24 = Utf8               x
  #25 = Utf8               I
  #26 = Methodref          #10.#27        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;II)V
  #27 = NameAndType        #28:#29        // assertEquals:(Ljava/lang/String;II)V
  #28 = Utf8               assertEquals
  #29 = Utf8               (Ljava/lang/String;II)V
  #30 = Fieldref           #15.#31        // java17/RecordFeatureTest$Point.y:I
  #31 = NameAndType        #32:#25        // y:I
  #32 = Utf8               y
  #33 = Methodref          #15.#34        // java17/RecordFeatureTest$Point.x:()I
  #34 = NameAndType        #24:#35        // x:()I
  #35 = Utf8               ()I
  #36 = Methodref          #15.#37        // java17/RecordFeatureTest$Point.y:()I
  #37 = NameAndType        #32:#35        // y:()I
  #38 = Methodref          #10.#39        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #39 = NameAndType        #28:#40        // assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #40 = Utf8               (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #41 = Methodref          #10.#42        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #42 = NameAndType        #43:#40        // assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #43 = Utf8               assertNotEquals
  #44 = Methodref          #15.#45        // java17/RecordFeatureTest$Point.hashCode:()I
  #45 = NameAndType        #46:#35        // hashCode:()I
  #46 = Utf8               hashCode
  #47 = Methodref          #10.#48        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;II)V
  #48 = NameAndType        #43:#29        // assertNotEquals:(Ljava/lang/String;II)V
  #49 = String             #50            // Point[x=4, y=5]
  #50 = Utf8               Point[x=4, y=5]
  #51 = Methodref          #15.#52        // java17/RecordFeatureTest$Point.toString:()Ljava/lang/String;
  #52 = NameAndType        #53:#54        // toString:()Ljava/lang/String;
  #53 = Utf8               toString
  #54 = Utf8               ()Ljava/lang/String;
  #55 = Methodref          #10.#56        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #56 = NameAndType        #28:#57        // assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #57 = Utf8               (Ljava/lang/Object;Ljava/lang/Object;)V
  #58 = Utf8               Code
  #59 = Utf8               LineNumberTable
  #60 = Utf8               LocalVariableTable
  #61 = Utf8               this
  #62 = Utf8               Ljava17/RecordFeatureTest;
  #63 = Utf8               testRecordFieldsDirectly
  #64 = Utf8               point
  #65 = Utf8               Ljava17/RecordFeatureTest$Point;
  #66 = Utf8               StackMapTable
  #67 = Utf8               RuntimeVisibleAnnotations
  #68 = Utf8               Lorg/junit/Test;
  #69 = Utf8               testRecordFields
  #70 = Utf8               testRecordEquality
  #71 = Utf8               point1
  #72 = Utf8               point2
  #73 = Utf8               point3
  #74 = Utf8               testRecordHashCode
  #75 = Utf8               testRecordToString
  #76 = Utf8               SourceFile
  #77 = Utf8               RecordFeatureTest.java
  #78 = Utf8               NestMembers
  #79 = Utf8               InnerClasses
  #80 = Utf8               Point
{
  public java17.RecordFeatureTest();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method gov/nasa/jpf/util/test/TestJPF."<init>":()V
         4: return
      LineNumberTable:
        line 6: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Ljava17/RecordFeatureTest;

  public void testRecordFieldsDirectly();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          41
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #20                 // String
        23: iconst_4
        24: aload_1
        25: getfield      #22                 // Field java17/RecordFeatureTest$Point.x:I
        28: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        31: ldc           #20                 // String
        33: iconst_5
        34: aload_1
        35: getfield      #30                 // Field java17/RecordFeatureTest$Point.y:I
        38: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        41: return
      LineNumberTable:
        line 15: 0
        line 17: 11
        line 19: 21
        line 20: 31
        line 23: 41
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      20     1 point   Ljava17/RecordFeatureTest$Point;
            0      42     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 41 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordFields();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          41
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #20                 // String
        23: iconst_4
        24: aload_1
        25: invokevirtual #33                 // Method java17/RecordFeatureTest$Point.x:()I
        28: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        31: ldc           #20                 // String
        33: iconst_5
        34: aload_1
        35: invokevirtual #36                 // Method java17/RecordFeatureTest$Point.y:()I
        38: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        41: return
      LineNumberTable:
        line 27: 0
        line 29: 11
        line 31: 21
        line 32: 31
        line 35: 41
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      20     1 point   Ljava17/RecordFeatureTest$Point;
            0      42     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 41 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordEquality();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          55
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: new           #15                 // class java17/RecordFeatureTest$Point
        24: dup
        25: iconst_4
        26: iconst_5
        27: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        30: astore_2
        31: new           #15                 // class java17/RecordFeatureTest$Point
        34: dup
        35: iconst_3
        36: iconst_5
        37: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        40: astore_3
        41: ldc           #20                 // String
        43: aload_1
        44: aload_2
        45: invokestatic  #38                 // Method assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        48: ldc           #20                 // String
        50: aload_1
        51: aload_3
        52: invokestatic  #41                 // Method assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
        55: return
      LineNumberTable:
        line 39: 0
        line 41: 11
        line 42: 21
        line 43: 31
        line 45: 41
        line 46: 48
        line 49: 55
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      34     1 point1   Ljava17/RecordFeatureTest$Point;
           31      24     2 point2   Ljava17/RecordFeatureTest$Point;
           41      14     3 point3   Ljava17/RecordFeatureTest$Point;
            0      56     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 55 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordHashCode();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          67
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: new           #15                 // class java17/RecordFeatureTest$Point
        24: dup
        25: iconst_4
        26: iconst_5
        27: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        30: astore_2
        31: new           #15                 // class java17/RecordFeatureTest$Point
        34: dup
        35: iconst_3
        36: iconst_5
        37: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        40: astore_3
        41: ldc           #20                 // String
        43: aload_1
        44: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        47: aload_2
        48: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        51: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        54: ldc           #20                 // String
        56: aload_1
        57: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        60: aload_3
        61: invokevirtual #44                 // Method java17/RecordFeatureTest$Point.hashCode:()I
        64: invokestatic  #47                 // Method assertNotEquals:(Ljava/lang/String;II)V
        67: return
      LineNumberTable:
        line 53: 0
        line 55: 11
        line 56: 21
        line 57: 31
        line 59: 41
        line 60: 54
        line 63: 67
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      46     1 point1   Ljava17/RecordFeatureTest$Point;
           31      36     2 point2   Ljava17/RecordFeatureTest$Point;
           41      26     3 point3   Ljava17/RecordFeatureTest$Point;
            0      68     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 251 /* same_frame_extended */
          offset_delta = 67
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

  public void testRecordToString();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          30
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #49                 // String Point[x=4, y=5]
        23: aload_1
        24: invokevirtual #51                 // Method java17/RecordFeatureTest$Point.toString:()Ljava/lang/String;
        27: invokestatic  #55                 // Method assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
        30: return
      LineNumberTable:
        line 67: 0
        line 69: 11
        line 71: 21
        line 74: 30
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21       9     1 point   Ljava17/RecordFeatureTest$Point;
            0      31     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 30 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test
}
SourceFile: "RecordFeatureTest.java"
NestMembers:
  java17/RecordFeatureTest$Point
InnerClasses:
  static final #80= #15 of #10;           // Point=class java17/RecordFeatureTest$Point of class java17/RecordFeatureTest
ekla@Eklas-MacBook-Air jpf-core % 
cyrille-artho commented 1 month ago

In the stack trace above, which is the method that cannot be loaded? What method is the one causing the index out of bounds at at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)?

cyrille-artho commented 1 month ago

Also, please look at class RecordFeatureTest$Point, which is the one holding the record. I think that's where JPF's class loader has problems.

eklaDFF commented 1 month ago

Tried to understand the execution flow :

Start of Test

Screenshot 2024-07-31 at 12 56 30 PM Screenshot 2024-07-31 at 12 58 45 PM Screenshot 2024-07-31 at 1 00 46 PM Screenshot 2024-07-31 at 1 02 43 PM

here jpf is not-null. jpf.run() is called...

Screenshot 2024-07-31 at 1 08 49 PM Screenshot 2024-07-31 at 1 10 36 PM Screenshot 2024-07-31 at 1 11 34 PM

In DFSearch, no idea what's causing error...

Is this right direction to explore ?

cyrille-artho commented 1 month ago

I don't think the problem is in the state space exploration. I think it's the fact that JPF encounters an unfamiliar data element in the constant pool, which it does not parse correctly. Look at the stack trace in your earlier comment: https://github.com/javapathfinder/jpf-core/issues/484#issuecomment-2255094895 The constant pool of RecordFeatureTest$Point has 64 elements (IIRC, slot 0 is not used), so an array representing it has 65 elements, which matches the array size of the exception. The stack trace also shows that the problem occurs while loading the class.

eklaDFF commented 1 month ago

Well, now where should I look.

May be when we are instantiating Point Object creation, causes this error ?

cyrille-artho commented 1 month ago

Look at the stack trace and how the class file gets parsed. There is an element in the constant pool that does not get parsed correctly, which results in an array index that makes no sense (> 64).

cyrille-artho commented 1 month ago

The constant pool of RecordFeatureTest$Point looks as follows:

final class java17.RecordFeatureTest$Point extends java.lang.Record
  minor version: 0
  major version: 61
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: #8                          // java17/RecordFeatureTest$Point
  super_class: #2                         // java/lang/Record
  interfaces: 0, fields: 2, methods: 6, attributes: 5
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Record."<init>":()V
   #2 = Class              #4             // java/lang/Record
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Record
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // java17/RecordFeatureTest$Point.x:I
   #8 = Class              #10            // java17/RecordFeatureTest$Point
   #9 = NameAndType        #11:#12        // x:I
  #10 = Utf8               java17/RecordFeatureTest$Point
  #11 = Utf8               x
  #12 = Utf8               I
  #13 = Fieldref           #8.#14         // java17/RecordFeatureTest$Point.y:I
  #14 = NameAndType        #15:#12        // y:I
  #15 = Utf8               y
  #16 = InvokeDynamic      #0:#17         // #0:toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #17 = NameAndType        #18:#19        // toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #18 = Utf8               toString
  #19 = Utf8               (Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #20 = InvokeDynamic      #0:#21         // #0:hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #21 = NameAndType        #22:#23        // hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #22 = Utf8               hashCode
  #23 = Utf8               (Ljava17/RecordFeatureTest$Point;)I
  #24 = InvokeDynamic      #0:#25         // #0:equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #25 = NameAndType        #26:#27        // equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #26 = Utf8               equals
  #27 = Utf8               (Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #28 = Utf8               (II)V
  #29 = Utf8               Code
  #30 = Utf8               LineNumberTable
  #31 = Utf8               LocalVariableTable
  #32 = Utf8               this
  #33 = Utf8               Ljava17/RecordFeatureTest$Point;
  #34 = Utf8               MethodParameters
  #35 = Utf8               ()Ljava/lang/String;
  #36 = Utf8               ()I
  #37 = Utf8               (Ljava/lang/Object;)Z
  #38 = Utf8               o
  #39 = Utf8               Ljava/lang/Object;
  #40 = Utf8               SourceFile
  #41 = Utf8               RecordFeatureTest.java
  #42 = Utf8               NestHost
  #43 = Class              #44            // java17/RecordFeatureTest
  #44 = Utf8               java17/RecordFeatureTest
  #45 = Utf8               Record
  #46 = Utf8               BootstrapMethods
  #47 = MethodHandle       6:#48          // REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #48 = Methodref          #49.#50        // java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #49 = Class              #51            // java/lang/runtime/ObjectMethods
  #50 = NameAndType        #52:#53        // bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #51 = Utf8               java/lang/runtime/ObjectMethods
  #52 = Utf8               bootstrap
  #53 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #54 = String             #55            // x;y
  #55 = Utf8               x;y
  #56 = MethodHandle       1:#7           // REF_getField java17/RecordFeatureTest$Point.x:I
  #57 = MethodHandle       1:#13          // REF_getField java17/RecordFeatureTest$Point.y:I
  #58 = Utf8               InnerClasses
  #59 = Utf8               Point
  #60 = Class              #61            // java/lang/invoke/MethodHandles$Lookup
  #61 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #62 = Class              #63            // java/lang/invoke/MethodHandles
  #63 = Utf8               java/lang/invoke/MethodHandles
  #64 = Utf8               Lookup
eklaDFF commented 1 month ago

Flow of Code :

Here is the method gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}

And this method has been used in gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131) (Please notice the statement System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1] = " + cpArgs[1]);, as I have wrote them to debug things)

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;

      if (cpArgs.length > 1) {
        // For Lambdas
        int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1]  = " + cpArgs[1]);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
            && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

        int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
        String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]); 

        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                               isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                                              : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      }
      else {
        // For String Concatenation
        clsName = cls; 

        if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

When we run at this level, the output is like below :

====================================================== search started: 04/08/24, 4:30 am
int mrefIdx = 259, cpArgs[1]  = 258
int mrefIdx = 264, cpArgs[1]  = 263
int mrefIdx = 267, cpArgs[1]  = 266
int mrefIdx = 270, cpArgs[1]  = 269
int mrefIdx = 273, cpArgs[1]  = 272
int mrefIdx = 276, cpArgs[1]  = 275
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
int mrefIdx = 148, cpArgs[1]  = 147
int mrefIdx = 157, cpArgs[1]  = 156
int mrefIdx = 163, cpArgs[1]  = 162
int mrefIdx = 166, cpArgs[1]  = 165
int mrefIdx = 169, cpArgs[1]  = 168
int mrefIdx = 63, cpArgs[1]  = 62
int mrefIdx = 66, cpArgs[1]  = 65
int mrefIdx = 69, cpArgs[1]  = 68
int mrefIdx = 57, cpArgs[1]  = 56
int mrefIdx = 14081, cpArgs[1]  = 54
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
    at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:105)
    at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
    at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:85)
    at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
    at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
    at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:53)
    at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:744)
    at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
    at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
    at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
    at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
    at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
    at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
    at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
    at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
    at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
    at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
    at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
    at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
    at gov.nasa.jpf.search.Search.forward(Search.java:937)
    at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
    at gov.nasa.jpf.JPF.run(JPF.java:613)
    at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
    at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
    at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
    at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)

This strange output (from our printing statement) show that our issue is routed from ClassFile.mhMethodRefIndexAt (int methodHandleInfoIdx) and code for it is :

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
  }
public final int u2(int dataIdx){
    return ((data[dataIdx]&0xff) << 8) | (data[dataIdx+1]&0xff);
  }

Am I in right direction ?

eklaDFF commented 1 month ago

And also please see the similarity between mhMethodRefIndexAt(int methodHandleInfoIdx) and methodClassNameAt(int methodRefInfoIdx) in ClassFile.java :

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}
public int mhMethodRefIndexAt(int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}
int[] cpPos;     // cpPos[i] holds data start index for cp_entry i (0 is unused)
Object[] cpValue; // cpValue[i] hold the String/Integer/Float/Double associated with corresponding cp_entries
cyrille-artho commented 1 month ago

The method to parse the binary content is correct, but the index (54) is wrong. In the debug output, please also add the name of the class that you are printing the data for. I think cf.clsName is initialized at this point (as the class is loaded). We want to ensure that we are looking at the contents of the constant pool of the right class when trying to figure out why there is a wrong index.

eklaDFF commented 1 month ago
@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;

      if (cpArgs.length > 1) {
        // For Lambdas
        int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1]  = " + cpArgs[1] + ", cf.className = " + cf.className);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');
        System.out.println("clsName = " + clsName);

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
            && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

        int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
        String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]); 

        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                               isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                                              : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      }
      else {
        // For String Concatenation
        clsName = cls; 

        if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

Output :

running jpf with args:
int mrefIdx = 40, cpArgs[1]  = 138, cf.className = null
clsName = java.lang.annotation.Annotation
int mrefIdx = 144, cpArgs[1]  = 143, cf.className = null
clsName = java.lang.reflect.AnnotatedElement
int mrefIdx = 150, cpArgs[1]  = 149, cf.className = null
clsName = java.util.LinkedHashMap
int mrefIdx = 109, cpArgs[1]  = 108, cf.className = null
clsName = java.lang.CharSequence
int mrefIdx = 113, cpArgs[1]  = 112, cf.className = null
clsName = java.lang.CharSequence
int mrefIdx = 178, cpArgs[1]  = 177, cf.className = null
clsName = java.lang.Enum
JavaPathfinder core system v8.0 (rev 1af3982c6608c081b63048d004dcd56eb0b43176) - (C) 2005-2014 United States Government. All rights reserved.

====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 04/08/24, 7:22 pm
int mrefIdx = 259, cpArgs[1]  = 258, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 264, cpArgs[1]  = 263, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 267, cpArgs[1]  = 266, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 270, cpArgs[1]  = 269, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 273, cpArgs[1]  = 272, cf.className = null
clsName = java.util.Comparator
int mrefIdx = 276, cpArgs[1]  = 275, cf.className = null
clsName = java.util.Comparator
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
int mrefIdx = 148, cpArgs[1]  = 147, cf.className = null
clsName = java.util.concurrent.ConcurrentMap
int mrefIdx = 157, cpArgs[1]  = 156, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 163, cpArgs[1]  = 162, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 166, cpArgs[1]  = 165, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 169, cpArgs[1]  = 168, cf.className = null
clsName = java.util.Map$Entry
int mrefIdx = 63, cpArgs[1]  = 62, cf.className = null
clsName = java.util.function.Function
int mrefIdx = 66, cpArgs[1]  = 65, cf.className = null
clsName = java.util.function.Function
int mrefIdx = 69, cpArgs[1]  = 68, cf.className = null
clsName = java.util.function.Function
int mrefIdx = 57, cpArgs[1]  = 56, cf.className = null
clsName = java.util.function.BiFunction
int mrefIdx = 14081, cpArgs[1]  = 54, cf.className = null
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
    at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)

cpArgs[] is a parameter so if it cpArgs[1] produce 54 then should we look from where it coming ?

cyrille-artho commented 1 month ago

Yes, and if you can find out where the function call was made, that will likely give us clues on the correct value. You can try the use the MethodTracker listener, something like the additional option +listener=gov.nasa.jpf.listener.MethodTracker

eklaDFF commented 1 month ago

Above method is called from this (below) method. Both are actually overloaded methods in ClassFile.java

private void setBootstrapMethod (ClassFileReader reader, Object tag, int idx, 
                                   int refKind, String cls, String mth, String parameters, String descriptor, int[] cpArgs){
    int p = pos;
    reader.setBootstrapMethod( this, tag, idx, refKind, cls, mth, parameters, descriptor, cpArgs);
    pos = p;    
  }

And then above method is called from ClassFile.parseBootstrapMethodAttr (ClassFileReader reader, Object tag) (Please notice System.out.println("bmArgs[" + j + "] = " + bmArgs[j]);. I have wrote them to debug.)

public void parseBootstrapMethodAttr (ClassFileReader reader, Object tag){
    int nBootstrapMethods = readU2();

    setBootstrapMethodCount(reader, tag, nBootstrapMethods);

    for (int i=0; i<nBootstrapMethods; i++){
      int cpMhIdx = readU2();
      int nArgs = readU2();
      int[] bmArgs = new int[nArgs];
      for (int j=0; j<nArgs; j++){
        bmArgs[j] = readU2();
        System.out.println("bmArgs[" + j + "] = " + bmArgs[j]);
      }

      // kind of this method handle
      int refKind = mhRefTypeAt(cpMhIdx);

      // CONSTANT_Methodref_info structure
      int mrefIdx = mhMethodRefIndexAt(cpMhIdx);

      String clsName = methodClassNameAt(mrefIdx);
      String mthName = methodNameAt(mrefIdx);
      String parameters = methodDescriptorAt(mrefIdx);
      String descriptor= callSiteDescriptor(bsmIdxToIndyCpIdx.get(i));

      setBootstrapMethod(reader, tag, i, refKind, clsName, mthName, parameters, descriptor, bmArgs);
    }

    setBootstrapMethodsDone( reader, tag);
  }

Here is the output :

running jpf with args:
bmArgs[0] = 396
bmArgs[0] = 398
bmArgs[0] = 400
bmArgs[0] = 402
bmArgs[0] = 404
bmArgs[0] = 137
bmArgs[1] = 138
bmArgs[2] = 139
int mrefIdx = 40, cpArgs[1]  = 138, cf.className = null
clsName = java.lang.annotation.Annotation
bmArgs[0] = 141
bmArgs[1] = 143
bmArgs[2] = 146
int mrefIdx = 144, cpArgs[1]  = 143, cf.className = null
clsName = java.lang.reflect.AnnotatedElement
bmArgs[0] = 147
bmArgs[1] = 149
bmArgs[2] = 156
int mrefIdx = 150, cpArgs[1]  = 149, cf.className = null
clsName = java.util.LinkedHashMap
bmArgs[0] = 240
bmArgs[0] = 793
bmArgs[0] = 795
bmArgs[0] = 797
bmArgs[0] = 799
bmArgs[0] = 106
bmArgs[1] = 108
bmArgs[2] = 111
int mrefIdx = 109, cpArgs[1]  = 108, cf.className = null
clsName = java.lang.CharSequence
bmArgs[0] = 106
bmArgs[1] = 112
bmArgs[2] = 111
int mrefIdx = 113, cpArgs[1]  = 112, cf.className = null
clsName = java.lang.CharSequence
bmArgs[0] = 303
bmArgs[0] = 305
bmArgs[0] = 267
bmArgs[0] = 269
bmArgs[0] = 176
bmArgs[1] = 177
bmArgs[2] = 180
int mrefIdx = 178, cpArgs[1]  = 177, cf.className = null
clsName = java.lang.Enum
bmArgs[0] = 175
bmArgs[0] = 921
bmArgs[0] = 923
bmArgs[0] = 925
bmArgs[0] = 927
bmArgs[0] = 929
bmArgs[0] = 931
bmArgs[0] = 933
bmArgs[0] = 935
bmArgs[0] = 937
bmArgs[0] = 939
bmArgs[0] = 941
bmArgs[0] = 943
bmArgs[0] = 945
bmArgs[0] = 947
bmArgs[0] = 949
bmArgs[0] = 951
bmArgs[0] = 953
bmArgs[0] = 955
bmArgs[0] = 957
bmArgs[0] = 959
bmArgs[0] = 961
bmArgs[0] = 963
bmArgs[0] = 965
bmArgs[0] = 967
bmArgs[0] = 969
bmArgs[0] = 971
bmArgs[0] = 973
bmArgs[0] = 975
bmArgs[0] = 977
bmArgs[0] = 979
bmArgs[0] = 981
bmArgs[0] = 983
bmArgs[0] = 985
JavaPathfinder core system v8.0 (rev 1af3982c6608c081b63048d004dcd56eb0b43176) - (C) 2005-2014 United States Government. All rights reserved.

====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 05/08/24, 3:41 am
bmArgs[0] = 257
bmArgs[1] = 258
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 259, cpArgs[1]  = 258, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 263
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 264, cpArgs[1]  = 263, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 266
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 267, cpArgs[1]  = 266, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 269
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 270, cpArgs[1]  = 269, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 272
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 273, cpArgs[1]  = 272, cf.className = null
clsName = java.util.Comparator
bmArgs[0] = 257
bmArgs[1] = 275
bmArgs[2] = 257
bmArgs[3] = 261
bmArgs[4] = 262
int mrefIdx = 276, cpArgs[1]  = 275, cf.className = null
clsName = java.util.Comparator
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
bmArgs[0] = 146
bmArgs[1] = 147
bmArgs[2] = 146
int mrefIdx = 148, cpArgs[1]  = 147, cf.className = null
clsName = java.util.concurrent.ConcurrentMap
bmArgs[0] = 155
bmArgs[1] = 156
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 157, cpArgs[1]  = 156, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 155
bmArgs[1] = 162
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 163, cpArgs[1]  = 162, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 155
bmArgs[1] = 165
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 166, cpArgs[1]  = 165, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 155
bmArgs[1] = 168
bmArgs[2] = 159
bmArgs[3] = 160
bmArgs[4] = 161
int mrefIdx = 169, cpArgs[1]  = 168, cf.className = null
clsName = java.util.Map$Entry
bmArgs[0] = 61
bmArgs[1] = 62
bmArgs[2] = 61
int mrefIdx = 63, cpArgs[1]  = 62, cf.className = null
clsName = java.util.function.Function
bmArgs[0] = 61
bmArgs[1] = 65
bmArgs[2] = 61
int mrefIdx = 66, cpArgs[1]  = 65, cf.className = null
clsName = java.util.function.Function
bmArgs[0] = 61
bmArgs[1] = 68
bmArgs[2] = 61
int mrefIdx = 69, cpArgs[1]  = 68, cf.className = null
clsName = java.util.function.Function
bmArgs[0] = 55
bmArgs[1] = 56
bmArgs[2] = 55
int mrefIdx = 57, cpArgs[1]  = 56, cf.className = null
clsName = java.util.function.BiFunction
bmArgs[0] = 8
bmArgs[1] = 54
bmArgs[2] = 56
bmArgs[3] = 57
int mrefIdx = 14081, cpArgs[1]  = 54, cf.className = null
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
    at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:315)

index 54 is generated from ClassFile.readU2() :

public final int readU2(){
    int idx = pos;
    pos += 2;
    return ((data[idx++]&0xff) << 8) | (data[idx]&0xff);
  }
cyrille-artho commented 1 month ago

Please try to set up the MethodTracker listener, so we can see which methods call these bootstrap methods (BMs). We can now see what type the BMs have, but not where the call comes from; this makes it very hard to guess what the correct mrefIdx at the end should be, because we can't see yet where in the code that call is made.

eklaDFF commented 1 month ago

Yes, and if you can find out where the function call was made, that will likely give us clues on the correct value. You can try the use the MethodTracker listener, something like the additional option +listener=gov.nasa.jpf.listener.MethodTracker

Where do I have to write the listener ? Not working in command.

cyrille-artho commented 1 month ago

The option is passed to the jpf command on the command line. You can also add the option listener=... to the .jpf config file instead.

eklaDFF commented 1 month ago

But the new output is very large. How can I show the result to you ? Around 40 MB.

eklaDFF commented 1 month ago
> Task :compileAnnotationsJava UP-TO-DATE
> Task :processAnnotationsResources NO-SOURCE
> Task :annotationsClasses UP-TO-DATE
> Task :copyLibs UP-TO-DATE
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :generateBuildInfo
> Task :generateVersion
> Task :copyResources
> Task :compileExamplesJava UP-TO-DATE
> Task :compileClassesJava UP-TO-DATE
> Task :processClassesResources NO-SOURCE
> Task :classesClasses UP-TO-DATE
> Task :compilePeersJava UP-TO-DATE
> Task :processPeersResources NO-SOURCE
> Task :peersClasses UP-TO-DATE
> Task :compileTestJava UP-TO-DATE
> Task :compileModules UP-TO-DATE
> Task :compile UP-TO-DATE
> Task :createAnnotationsJar UP-TO-DATE
> Task :createClassloaderSpecificTestsJar UP-TO-DATE
> Task :createJpfClassesJar UP-TO-DATE
> Task :createJpfJar
> Task :createRunJpfJar UP-TO-DATE
> Task :createRunTestJar UP-TO-DATE
> Task :buildJars
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
  running jpf with args:
----------------------------------- search started
JavaPathfinder core system v8.0 (rev 1af3982c6608c081b63048d004dcd56eb0b43176) - (C) 2005-2014 United States Government. All rights reserved.

====================================================== system under test
java17.RecordFeatureTest.runTestMethod()

====================================================== search started: 07/08/24, 3:10 am
0:                              java.lang.Boolean.[<clinit>]...
0:                                java.lang.Boolean.<clinit>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                    java.lang.Object.<init>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                java.lang.Boolean.<clinit>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                    java.lang.Object.<init>()V
0:                                  java.lang.Boolean.<init>(Z)V
0:                                java.lang.Boolean.<clinit>()V
0:                                  native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                                  native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                                java.lang.Boolean.<clinit>()V
0:                              java.lang.Boolean.[<clinit>]
0:                            java.lang.Character.[<clinit>]
0:                              native java.lang.Character.<clinit>()V
0:                            java.lang.Character.[<clinit>]
0:                          java.lang.Short.[<clinit>]
0:                            java.lang.Short.<clinit>()V
0:                              native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                              native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                            java.lang.Short.<clinit>()V
0:                          java.lang.Short.[<clinit>]
0:                        java.lang.Integer.[<clinit>]
0:                          java.lang.Integer.<clinit>()V
0:                            native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                            native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                          java.lang.Integer.<clinit>()V
0:                        java.lang.Integer.[<clinit>]
0:                      java.lang.Long.[<clinit>]
0:                        java.lang.Long.<clinit>()V
0:                          native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                          native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                        java.lang.Long.<clinit>()V
0:                      java.lang.Long.[<clinit>]
0:                    java.lang.Float.[<clinit>]
0:                      java.lang.Float.<clinit>()V
0:                        native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                        native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                      java.lang.Float.<clinit>()V
0:                    java.lang.Float.[<clinit>]
0:                  java.lang.Double.[<clinit>]
0:                    java.lang.Double.<clinit>()V
0:                      native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                      native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                    java.lang.Double.<clinit>()V
0:                  java.lang.Double.[<clinit>]
0:                java.lang.Byte.[<clinit>]
0:                  java.lang.Byte.<clinit>()V
0:                    native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                    native java.lang.Class.getPrimitiveClass(Ljava/lang/String;)Ljava/lang/Class;
0:                  java.lang.Byte.<clinit>()V
0:                java.lang.Byte.[<clinit>]
0:              java.lang.String.[<clinit>]
0:                java.lang.String.<clinit>()V
0:                  native java.lang.Class.desiredAssertionStatus()Z
0:                  native java.lang.Class.desiredAssertionStatus()Z
0:                java.lang.String.<clinit>()V
0:                  java.lang.String$CaseInsensitiveComparator.<init>()V
0:                    java.lang.Object.<init>()V
0:                  java.lang.String$CaseInsensitiveComparator.<init>()V
0:                java.lang.String.<clinit>()V
0:              java.lang.String.[<clinit>]
0:            java.lang.Thread.[<clinit>]
0:              java.lang.Thread.<clinit>()V
0:            java.lang.Thread.[<clinit>]
0:          java.lang.Thread$State.[<clinit>]
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:                  java.lang.Object.<init>()V
0:                java.lang.Enum.<init>(Ljava/lang/String;I)V
0:              java.lang.Thread$State.<init>(Ljava/lang/String;I)V
0:            java.lang.Thread$State.<clinit>()V
0:              java.lang.Thread$State.$values()[Ljava/lang/Thread$State;
0:            java.lang.Thread$State.<clinit>()V
0:          java.lang.Thread$State.[<clinit>]
0:        java.lang.System.[<clinit>]
0:          java.lang.System.<clinit>()V
0:            java.lang.System$1.<init>()V
0:              java.io.InputStream.<init>()V
0:                java.lang.Object.<init>()V
0:              java.io.InputStream.<init>()V
0:            java.lang.System$1.<init>()V
0:          java.lang.System.<clinit>()V
0:            native java.lang.System.createSystemOut()Ljava/io/PrintStream;
0:            native java.lang.System.createSystemOut()Ljava/io/PrintStream;
0:          java.lang.System.<clinit>()V
0:            native java.lang.System.createSystemErr()Ljava/io/PrintStream;
0:            native java.lang.System.createSystemErr()Ljava/io/PrintStream;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.[<clinit>]
0:              java.util.Properties.<clinit>()V
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
0:                jdk.internal.misc.Unsafe.[<clinit>]
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    jdk.internal.misc.Unsafe.<init>()V
0:                      java.lang.Object.<init>()V
0:                    jdk.internal.misc.Unsafe.<init>()V
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  jdk.internal.misc.Unsafe.<clinit>()V
0:                jdk.internal.misc.Unsafe.[<clinit>]
0:              java.util.Properties.<clinit>()V
0:                jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:              java.util.Properties.<clinit>()V
0:            java.util.Properties.[<clinit>]
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.<init>()V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                java.util.Hashtable.<init>(Ljava/lang/Void;)V
0:                  java.util.Dictionary.<init>()V
0:                    java.lang.Object.<init>()V
0:                  java.util.Dictionary.<init>()V
0:                java.util.Hashtable.<init>(Ljava/lang/Void;)V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                java.util.concurrent.ConcurrentHashMap.[<clinit>]
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.lang.Runtime.[<clinit>]
0:                      java.lang.Runtime.<clinit>()V
0:                        java.lang.Runtime.<init>()V
0:                          java.lang.Object.<init>()V
0:                        java.lang.Runtime.<init>()V
0:                      java.lang.Runtime.<clinit>()V
0:                    java.lang.Runtime.[<clinit>]
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.lang.Runtime.getRuntime()Ljava/lang/Runtime;
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native java.lang.Runtime.availableProcessors()I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                        java.lang.Object.<init>()V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                        java.lang.Object.<init>()V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                        java.lang.Object.<init>()V
0:                      java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;Z)V
0:                    java.io.ObjectStreamField.<init>(Ljava/lang/String;Ljava/lang/Class;)V
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                    native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayBaseOffset(Ljava/lang/Class;)I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                    native jdk.internal.misc.Unsafe.arrayIndexScale(Ljava/lang/Class;)I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                    java.lang.Integer.numberOfLeadingZeros(I)I
0:                  java.util.concurrent.ConcurrentHashMap.<clinit>()V
0:                java.util.concurrent.ConcurrentHashMap.[<clinit>]
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                java.util.concurrent.ConcurrentHashMap.<init>(I)V
0:                  java.util.concurrent.ConcurrentHashMap.<init>(IFI)V
0:                    java.util.AbstractMap.<init>()V
0:                      java.lang.Object.<init>()V
0:                    java.util.AbstractMap.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap.<init>(IFI)V
0:                    java.util.concurrent.ConcurrentHashMap.tableSizeFor(I)I
0:                      java.lang.Integer.numberOfLeadingZeros(I)I
0:                    java.util.concurrent.ConcurrentHashMap.tableSizeFor(I)I
0:                  java.util.concurrent.ConcurrentHashMap.<init>(IFI)V
0:                java.util.concurrent.ConcurrentHashMap.<init>(I)V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:                native jdk.internal.misc.Unsafe.storeFence()V
0:                native jdk.internal.misc.Unsafe.storeFence()V
0:              java.util.Properties.<init>(Ljava/util/Properties;I)V
0:            java.util.Properties.<init>()V
0:          java.lang.System.<clinit>()V
0:            native java.lang.System.getKeyValuePairs()[Ljava/lang/String;
0:            native java.lang.System.getKeyValuePairs()[Ljava/lang/String;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.initTable()[Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                  java.util.concurrent.ConcurrentHashMap.initTable()[Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.equals(Ljava/lang/Object;)Z
0:                  native java.lang.String.equals(Ljava/lang/Object;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                  java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                      java.lang.Integer.numberOfLeadingZeros(I)I
0:                    java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap$ForwardingNode.<init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                          java.lang.Object.<init>()V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap$ForwardingNode.<init>([Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                          java.lang.Object.<init>()V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                        native jdk.internal.misc.Unsafe.compareAndSetReference(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z
0:                      java.util.concurrent.ConcurrentHashMap.casTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;Ljava/util/concurrent/ConcurrentHashMap$Node;)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                          java.lang.Object.<init>()V
0:                        java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                          native jdk.internal.misc.Unsafe.putReferenceVolatile(Ljava/lang/Object;JLjava/lang/Object;)V
0:                        jdk.internal.misc.Unsafe.putReferenceRelease(Ljava/lang/Object;JLjava/lang/Object;)V
0:                      java.util.concurrent.ConcurrentHashMap.setTabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;ILjava/util/concurrent/ConcurrentHashMap$Node;)V
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                      native jdk.internal.misc.Unsafe.compareAndSetInt(Ljava/lang/Object;JII)Z
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                        java.lang.Integer.numberOfLeadingZeros(I)I
0:                      java.util.concurrent.ConcurrentHashMap.resizeStamp(I)I
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                          native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    java.util.concurrent.ConcurrentHashMap.transfer([Ljava/util/concurrent/ConcurrentHashMap$Node;[Ljava/util/concurrent/ConcurrentHashMap$Node;)V
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    java.util.concurrent.ConcurrentHashMap.sumCount()J
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                    java.lang.Object.<init>()V
0:                  java.util.concurrent.ConcurrentHashMap$Node.<init>(ILjava/lang/Object;Ljava/lang/Object;)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                    native jdk.internal.misc.Unsafe.compareAndSetLong(Ljava/lang/Object;JJJ)Z
0:                  java.util.concurrent.ConcurrentHashMap.addCount(JI)V
0:                java.util.concurrent.ConcurrentHashMap.putVal(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;
0:              java.util.concurrent.ConcurrentHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:            java.util.Properties.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
0:          java.lang.System.<clinit>()V
0:            java.lang.System.createJavaLangAccess()Ljdk/internal/access/JavaLangAccess;
0:              java.lang.System$2.<init>()V
0:                java.lang.Object.<init>()V
0:              java.lang.System$2.<init>()V
0:            java.lang.System.createJavaLangAccess()Ljdk/internal/access/JavaLangAccess;
0:          java.lang.System.<clinit>()V
0:            jdk.internal.access.SharedSecrets.[<clinit>]
0:              jdk.internal.access.SharedSecrets.<clinit>()V
0:                jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:              jdk.internal.access.SharedSecrets.<clinit>()V
0:            jdk.internal.access.SharedSecrets.[<clinit>]
0:          java.lang.System.<clinit>()V
0:            jdk.internal.access.SharedSecrets.setJavaLangAccess(Ljdk/internal/access/JavaLangAccess;)V
0:          java.lang.System.<clinit>()V
0:        java.lang.System.[<clinit>]
0:      java.lang.invoke.VarHandle.[<clinit>]
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          native java.lang.Class.desiredAssertionStatus()Z
0:          native java.lang.Class.desiredAssertionStatus()Z
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          java.lang.invoke.VarHandle$1.<init>()V
0:            java.lang.Object.<init>()V
0:          java.lang.invoke.VarHandle$1.<init>()V
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          jdk.internal.util.Preconditions.outOfBoundsExceptionFormatter(Ljava/util/function/Function;)Ljava/util/function/BiFunction;
0:            jdk.internal.util.Preconditions$1.<init>(Ljava/util/function/Function;)V
0:              java.lang.Object.<init>()V
0:            jdk.internal.util.Preconditions$1.<init>(Ljava/util/function/Function;)V
0:          jdk.internal.util.Preconditions.outOfBoundsExceptionFormatter(Ljava/util/function/Function;)Ljava/util/function/BiFunction;
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          java.lang.invoke.MethodHandleStatics.[<clinit>]
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              jdk.internal.misc.Unsafe.getUnsafe()Ljdk/internal/misc/Unsafe;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              sun.security.action.GetPropertyAction.privilegedGetProperties()Ljava/util/Properties;
0:                java.lang.System.getSecurityManager()Ljava/lang/SecurityManager;
0:              sun.security.action.GetPropertyAction.privilegedGetProperties()Ljava/util/Properties;
0:                java.lang.System.getProperties()Ljava/util/Properties;
0:              sun.security.action.GetPropertyAction.privilegedGetProperties()Ljava/util/Properties;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  native java.lang.String.hashCode()I
0:                  native java.lang.String.hashCode()I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                  java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:              java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:                native java.lang.String.equalsIgnoreCase(Ljava/lang/String;)Z
0:              java.lang.Boolean.parseBoolean(Ljava/lang/String;)Z
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    native java.lang.String.hashCode()I
0:                    native java.lang.String.hashCode()I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.spread(I)I
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                        native jdk.internal.misc.Unsafe.getReferenceVolatile(Ljava/lang/Object;J)Ljava/lang/Object;
0:                      jdk.internal.misc.Unsafe.getReferenceAcquire(Ljava/lang/Object;J)Ljava/lang/Object;
0:                    java.util.concurrent.ConcurrentHashMap.tabAt([Ljava/util/concurrent/ConcurrentHashMap$Node;I)Ljava/util/concurrent/ConcurrentHashMap$Node;
0:                  java.util.concurrent.ConcurrentHashMap.get(Ljava/lang/Object;)Ljava/lang/Object;
0:                java.util.Properties.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:              java.util.Properties.getProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:              native java.lang.Integer.parseInt(Ljava/lang/String;)I
0:            java.lang.invoke.MethodHandleStatics.<clinit>()V
0:          java.lang.invoke.MethodHandleStatics.[<clinit>]
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:          native jdk.internal.misc.Unsafe.objectFieldOffset(Ljava/lang/Class;Ljava/lang/String;)J
0:        java.lang.invoke.VarHandle.<clinit>()V
0:          native jdk.internal.misc.Unsafe.ensureClassInitialized(Ljava/lang/Class;)V
0:          native jdk.internal.misc.Unsafe.ensureClassInitialized(Ljava/lang/Class;)V
0:        java.lang.invoke.VarHandle.<clinit>()V
0:      java.lang.invoke.VarHandle.[<clinit>]
0:    gov.nasa.jpf.util.test.TestJPF.[<clinit>]
0:      gov.nasa.jpf.util.test.TestJPF.<clinit>()V
0:        native gov.nasa.jpf.util.test.TestJPF.isJPFRun()Z
0:        native gov.nasa.jpf.util.test.TestJPF.isJPFRun()Z
0:      gov.nasa.jpf.util.test.TestJPF.<clinit>()V
0:    gov.nasa.jpf.util.test.TestJPF.[<clinit>]
0:  gov.nasa.jpf.util.test.TestJPF.[runTestMethod]
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:      native gov.nasa.jpf.util.test.TestJPF.getProperty(Ljava/lang/String;)Ljava/lang/String;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.Class.forName(Ljava/lang/String;)Ljava/lang/Class;
0:      native java.lang.Class.forName(Ljava/lang/String;)Ljava/lang/Class;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.Class.getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
0:      native java.lang.Class.getDeclaredConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object;
0:      native java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object;
0:        java17.RecordFeatureTest.[<init>]
0:          java17.RecordFeatureTest.<init>()V
0:            native gov.nasa.jpf.util.test.TestJPF.<init>()V
0:            native gov.nasa.jpf.util.test.TestJPF.<init>()V
0:          java17.RecordFeatureTest.<init>()V
0:        java17.RecordFeatureTest.[<init>]
0:      native java.lang.reflect.Constructor.newInstance([Ljava/lang/Object;)Ljava/lang/Object;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.Class.getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
0:      native java.lang.Class.getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
0:    gov.nasa.jpf.util.test.TestJPF.runTestMethod([Ljava/lang/String;)V
0:      native java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
0:      native java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
0:        java17.RecordFeatureTest.[testRecordFieldsDirectly]
0:          java17.RecordFeatureTest.testRecordFieldsDirectly()V
0:            native gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation([Ljava/lang/String;)Z
0:            native gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation([Ljava/lang/String;)Z
0:          java17.RecordFeatureTest.testRecordFieldsDirectly()V
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
    at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131)
    at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
    at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:112)
    at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
    at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
    at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
    at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:80)
    at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:770)
    at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
    at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
    at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
    at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
    at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
    at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
    at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
    at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
    at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
    at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
    at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
    at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
    at gov.nasa.jpf.search.Search.forward(Search.java:937)
    at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
    at gov.nasa.jpf.JPF.run(JPF.java:613)
    at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
    at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
    at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
        at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
    at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

java.lang.AssertionError: JPF internal exception executing: :java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
    at gov.nasa.jpf.util.test.TestJPF.fail(TestJPF.java:164)
    at gov.nasa.jpf.util.test.TestJPF.fail(TestJPF.java:156)
    at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:810)
    at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
    at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
    at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
    at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
    at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
    at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:60)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:52)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at jdk.proxy1/jdk.proxy1.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:176)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
    at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:113)
    at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:65)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)

> Task :test FAILED
java17.RecordFeatureTest > testRecordFieldsDirectly FAILED
    java.lang.AssertionError at RecordFeatureTest.java:15
Test Execution: FAILURE
Summary: 1 tests, 0 passed, 1 failed, 0 skipped
1 test completed, 1 failed
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':test'.
> There were failing tests. See the report at: file:///Users/ekla/GSOC/JPFjava17/jpf-core/build/reports/tests/test/index.html
BUILD FAILED in 2s
18 actionable tasks: 5 executed, 13 up-to-date

They are to cluttered to understand. How do they mean something valuable ?

cyrille-artho commented 1 month ago

Only the last part is important. We see that the problem is triggered by java17.RecordFeatureTest.testRecordFieldsDirectly()V. (There is also the ExecTracker listener that would show at which instruction the problem occurs, but there are only two accesses in that small test, so it is clear enough in this case.)

Now, you can look into the bytecode of that test method to see what the instructions are, and which part of the record class is used. Then, we can deduce where the wrong index comes from.

eklaDFF commented 1 month ago

I only executed java17.RecordFeatureTest.testRecordFieldsDirectly() Test so only this thing showing in listener (may be), but of all the Tests cause same error.


We can see the ByteCode above (here is only related to this) :

public void testRecordFieldsDirectly();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=1
         0: aload_0
         1: iconst_0
         2: anewarray     #7                  // class java/lang/String
         5: invokevirtual #9                  // Method verifyNoPropertyViolation:([Ljava/lang/String;)Z
         8: ifeq          41
        11: new           #15                 // class java17/RecordFeatureTest$Point
        14: dup
        15: iconst_4
        16: iconst_5
        17: invokespecial #17                 // Method java17/RecordFeatureTest$Point."<init>":(II)V
        20: astore_1
        21: ldc           #20                 // String
        23: iconst_4
        24: aload_1
        25: getfield      #22                 // Field java17/RecordFeatureTest$Point.x:I
        28: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        31: ldc           #20                 // String
        33: iconst_5
        34: aload_1
        35: getfield      #30                 // Field java17/RecordFeatureTest$Point.y:I
        38: invokestatic  #26                 // Method assertEquals:(Ljava/lang/String;II)V
        41: return
      LineNumberTable:
        line 15: 0
        line 17: 11
        line 19: 21
        line 20: 31
        line 23: 41
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           21      20     1 point   Ljava17/RecordFeatureTest$Point;
            0      42     0  this   Ljava17/RecordFeatureTest;
      StackMapTable: number_of_entries = 1
        frame_type = 41 /* same */
    RuntimeVisibleAnnotations:
      0: #68()
        org.junit.Test

and constant pool

Constant pool:
   #1 = Methodref          #2.#3          // gov/nasa/jpf/util/test/TestJPF."<init>":()V
   #2 = Class              #4             // gov/nasa/jpf/util/test/TestJPF
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               gov/nasa/jpf/util/test/TestJPF
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Class              #8             // java/lang/String
   #8 = Utf8               java/lang/String
   #9 = Methodref          #10.#11        // java17/RecordFeatureTest.verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #10 = Class              #12            // java17/RecordFeatureTest
  #11 = NameAndType        #13:#14        // verifyNoPropertyViolation:([Ljava/lang/String;)Z
  #12 = Utf8               java17/RecordFeatureTest
  #13 = Utf8               verifyNoPropertyViolation
  #14 = Utf8               ([Ljava/lang/String;)Z
  #15 = Class              #16            // java17/RecordFeatureTest$Point
  #16 = Utf8               java17/RecordFeatureTest$Point
  #17 = Methodref          #15.#18        // java17/RecordFeatureTest$Point."<init>":(II)V
  #18 = NameAndType        #5:#19         // "<init>":(II)V
  #19 = Utf8               (II)V
  #20 = String             #21            //
  #21 = Utf8
  #22 = Fieldref           #15.#23        // java17/RecordFeatureTest$Point.x:I
  #23 = NameAndType        #24:#25        // x:I
  #24 = Utf8               x
  #25 = Utf8               I
  #26 = Methodref          #10.#27        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;II)V
  #27 = NameAndType        #28:#29        // assertEquals:(Ljava/lang/String;II)V
  #28 = Utf8               assertEquals
  #29 = Utf8               (Ljava/lang/String;II)V
  #30 = Fieldref           #15.#31        // java17/RecordFeatureTest$Point.y:I
  #31 = NameAndType        #32:#25        // y:I
  #32 = Utf8               y
  #33 = Methodref          #15.#34        // java17/RecordFeatureTest$Point.x:()I
  #34 = NameAndType        #24:#35        // x:()I
  #35 = Utf8               ()I
  #36 = Methodref          #15.#37        // java17/RecordFeatureTest$Point.y:()I
  #37 = NameAndType        #32:#35        // y:()I
  #38 = Methodref          #10.#39        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #39 = NameAndType        #28:#40        // assertEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #40 = Utf8               (Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #41 = Methodref          #10.#42        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #42 = NameAndType        #43:#40        // assertNotEquals:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
  #43 = Utf8               assertNotEquals
  #44 = Methodref          #15.#45        // java17/RecordFeatureTest$Point.hashCode:()I
  #45 = NameAndType        #46:#35        // hashCode:()I
  #46 = Utf8               hashCode
  #47 = Methodref          #10.#48        // java17/RecordFeatureTest.assertNotEquals:(Ljava/lang/String;II)V
  #48 = NameAndType        #43:#29        // assertNotEquals:(Ljava/lang/String;II)V
  #49 = String             #50            // Point[x=4, y=5]
  #50 = Utf8               Point[x=4, y=5]
  #51 = Methodref          #15.#52        // java17/RecordFeatureTest$Point.toString:()Ljava/lang/String;
  #52 = NameAndType        #53:#54        // toString:()Ljava/lang/String;
  #53 = Utf8               toString
  #54 = Utf8               ()Ljava/lang/String;
  #55 = Methodref          #10.#56        // java17/RecordFeatureTest.assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #56 = NameAndType        #28:#57        // assertEquals:(Ljava/lang/Object;Ljava/lang/Object;)V
  #57 = Utf8               (Ljava/lang/Object;Ljava/lang/Object;)V
  #58 = Utf8               Code
  #59 = Utf8               LineNumberTable
  #60 = Utf8               LocalVariableTable
  #61 = Utf8               this
  #62 = Utf8               Ljava17/RecordFeatureTest;
  #63 = Utf8               testRecordFieldsDirectly
  #64 = Utf8               point
  #65 = Utf8               Ljava17/RecordFeatureTest$Point;
  #66 = Utf8               StackMapTable
  #67 = Utf8               RuntimeVisibleAnnotations
  #68 = Utf8               Lorg/junit/Test;
  #69 = Utf8               testRecordFields
  #70 = Utf8               testRecordEquality
  #71 = Utf8               point1
  #72 = Utf8               point2
  #73 = Utf8               point3
  #74 = Utf8               testRecordHashCode
  #75 = Utf8               testRecordToString
  #76 = Utf8               SourceFile
  #77 = Utf8               RecordFeatureTest.java
  #78 = Utf8               NestMembers
  #79 = Utf8               InnerClasses
  #80 = Utf8               Point
eklaDFF commented 1 month ago

From Bytecode, it seems like it's been treated like a regular class ?

(Should I delete some comments to make this issue short)

cyrille-artho commented 1 month ago

We need the ExecTracker here to see at which instruction the failure occurs. It is somewhere inside class RecordFeatureTest$Point. Let's keep all comments, as they are all on the same topic, unless there is something where we repeated ourselves.

eklaDFF commented 1 month ago

As mentioned in our last meeting, index (in this case 54) is correct. Then we have look how 14081 (in this case) is produced. So here is last state from where we can move ...

Flow of Code :

Here is the method gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}

And this method has been used in gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:131) (Please notice the statement System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1] = " + cpArgs[1]);, as I have wrote them to debug things)

@Override
    public void setBootstrapMethod (ClassFile cf, Object tag, int idx, int refKind, String cls, String mth,
                                     String parameters, String descriptor, int[] cpArgs) {
      String clsName = null;
      ClassInfo enclosingLambdaCls;

      if (cpArgs.length > 1) {
        // For Lambdas
          int mrefIdx = cf.mhMethodRefIndexAt(cpArgs[1]);
        System.out.println("int mrefIdx = " + mrefIdx + ", cpArgs[1]  = " + cpArgs[1]);
        clsName = cf.methodClassNameAt(mrefIdx).replace('/', '.');

        if(!clsName.equals(JVMClassInfo.this.getName())) {
          if (JVMClassInfo.resolvedClasses.containsKey(clsName))
            enclosingLambdaCls = (JVMClassInfo) JVMClassInfo.resolvedClasses.get(clsName);
          else
            enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
          JVMClassInfo.resolvedClasses.put(clsName, enclosingLambdaCls);
        }

        // The following check should be up-to-date
        // with OpenJDK 11' implementation of
        // java.lang.invoke.LambdaMetafactory::altMetafactory()
        //
        // Check if it is serializable lambda expression. It is if:
        //   1. bootstrap method is "altMetafactory"
        //   2. 4-th cp arg value has FLAG_SERIALIZABLE (1 << 0) bit set
        // The check order cannot be reversed since other BSM may not
        // have forth argument in `cpArgs`
        boolean isSerializable = false;
        if (cls.equals("java/lang/invoke/LambdaMetafactory")
            && mth.equals("altMetafactory")) {
          int flags = cf.intAt(cpArgs[3]);
          int FLAG_SERIALIZABLE = 1 << 0;
          if ((flags & FLAG_SERIALIZABLE) != 0) {
            isSerializable = true;
          }
        }

        assert (enclosingLambdaCls!=null);

          int lambdaRefKind = cf.mhRefTypeAt(cpArgs[1]);
          String mthName = cf.methodNameAt(mrefIdx);
        String signature = cf.methodDescriptorAt(mrefIdx);
        String samDescriptor = cf.methodTypeDescriptorAt(cpArgs[2]); 

        setBootstrapMethodInfo(enclosingLambdaCls, mthName, signature, idx, lambdaRefKind, samDescriptor, null,
                               isSerializable ? BootstrapMethodInfo.BMType.SERIALIZABLE_LAMBDA_EXPRESSION
                                              : BootstrapMethodInfo.BMType.LAMBDA_EXPRESSION);
      }
      else {
        // For String Concatenation
        clsName = cls; 

        if(!clsName.equals(JVMClassInfo.this.getName())) {
        enclosingLambdaCls = ClassLoaderInfo.getCurrentResolvedClassInfo(clsName);
        } else {
          enclosingLambdaCls = JVMClassInfo.this;
        }

        assert (enclosingLambdaCls!=null);

        String bmArg = cf.getBmArgString(cpArgs[0]);

        setBootstrapMethodInfo(enclosingLambdaCls, mth, parameters, idx, refKind, descriptor, bmArg,
                BootstrapMethodInfo.BMType.STRING_CONCATENATION);
      }

    }

When we run at this level, the output is like below :

====================================================== search started: 04/08/24, 4:30 am
int mrefIdx = 259, cpArgs[1]  = 258
int mrefIdx = 264, cpArgs[1]  = 263
int mrefIdx = 267, cpArgs[1]  = 266
int mrefIdx = 270, cpArgs[1]  = 269
int mrefIdx = 273, cpArgs[1]  = 272
int mrefIdx = 276, cpArgs[1]  = 275
[WARNING] orphan NativePeer method: jdk.internal.misc.Unsafe.getUnsafe()Lsun/misc/Unsafe;
int mrefIdx = 148, cpArgs[1]  = 147
int mrefIdx = 157, cpArgs[1]  = 156
int mrefIdx = 163, cpArgs[1]  = 162
int mrefIdx = 166, cpArgs[1]  = 165
int mrefIdx = 169, cpArgs[1]  = 168
int mrefIdx = 63, cpArgs[1]  = 62
int mrefIdx = 66, cpArgs[1]  = 65
int mrefIdx = 69, cpArgs[1]  = 68
int mrefIdx = 57, cpArgs[1]  = 56
int mrefIdx = 14081, cpArgs[1]  = 54
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
  at gov.nasa.jpf.jvm.ClassFile.methodClassNameAt(ClassFile.java:313)
  at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setBootstrapMethod(JVMClassInfo.java:105)
  at gov.nasa.jpf.jvm.ClassFile.setBootstrapMethod(ClassFile.java:694)
  at gov.nasa.jpf.jvm.ClassFile.parseBootstrapMethodAttr(ClassFile.java:1528)
  at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.setClassAttribute(JVMClassInfo.java:85)
  at gov.nasa.jpf.jvm.ClassFile.setClassAttribute(ClassFile.java:671)
  at gov.nasa.jpf.jvm.ClassFile.parseClassAttributes(ClassFile.java:1411)
  at gov.nasa.jpf.jvm.ClassFile.parse(ClassFile.java:980)
  at gov.nasa.jpf.jvm.JVMClassInfo$Initializer.<init>(JVMClassInfo.java:53)
  at gov.nasa.jpf.jvm.JVMClassInfo.<init>(JVMClassInfo.java:744)
  at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:59)
  at gov.nasa.jpf.jvm.JVMClassFileContainer$JVMClassFileMatch.createClassInfo(JVMClassFileContainer.java:34)
  at gov.nasa.jpf.vm.ClassLoaderInfo.getResolvedClassInfo(ClassLoaderInfo.java:356)
  at gov.nasa.jpf.vm.SystemClassLoaderInfo.getResolvedClassInfo(SystemClassLoaderInfo.java:148)
  at gov.nasa.jpf.vm.SystemClassLoaderInfo.loadClass(SystemClassLoaderInfo.java:183)
  at gov.nasa.jpf.vm.ClassInfo.resolveReferencedClass(ClassInfo.java:2485)
  at gov.nasa.jpf.vm.ThreadInfo.resolveReferencedClass(ThreadInfo.java:1243)
  at gov.nasa.jpf.jvm.bytecode.NEW.execute(NEW.java:55)
  at gov.nasa.jpf.vm.ThreadInfo.executeInstruction(ThreadInfo.java:1910)
  at gov.nasa.jpf.vm.ThreadInfo.executeTransition(ThreadInfo.java:1861)
  at gov.nasa.jpf.vm.SystemState.executeNextTransition(SystemState.java:765)
  at gov.nasa.jpf.vm.VM.forward(VM.java:1721)
  at gov.nasa.jpf.search.Search.forward(Search.java:937)
  at gov.nasa.jpf.search.DFSearch.search(DFSearch.java:79)
  at gov.nasa.jpf.JPF.run(JPF.java:613)
  at gov.nasa.jpf.util.test.TestJPF.createAndRunJPF(TestJPF.java:675)
  at gov.nasa.jpf.util.test.TestJPF.noPropertyViolation(TestJPF.java:806)
  at gov.nasa.jpf.util.test.TestJPF.verifyNoPropertyViolation(TestJPF.java:830)
  at java17.RecordFeatureTest.testRecordFieldsDirectly(RecordFeatureTest.java:15)

This strange output (from our printing statement) show that our issue is routed from ClassFile.mhMethodRefIndexAt (int methodHandleInfoIdx) and code for it is :

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
  }
public final int u2(int dataIdx){
    return ((data[dataIdx]&0xff) << 8) | (data[dataIdx+1]&0xff);
  }

Am I in right direction ?

And also please see the similarity between mhMethodRefIndexAt(int methodHandleInfoIdx) and methodClassNameAt(int methodRefInfoIdx) in ClassFile.java :

public String methodClassNameAt(int methodRefInfoIdx){
    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
}
public int mhMethodRefIndexAt(int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}
int[] cpPos;     // cpPos[i] holds data start index for cp_entry i (0 is unused)
Object[] cpValue; // cpValue[i] hold the String/Integer/Float/Double associated with corresponding cp_entries

From above, 14081 is returned from u2(cpPos[methodHandleInfoIdx]+2)

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    return u2(cpPos[methodHandleInfoIdx]+2);
}

It seems like we should check what content cpPos[] holds from where it is being initialized ?


One more thing, I printed some value which helped me a bit...

public int mhMethodRefIndexAt  (int methodHandleInfoIdx){
    System.out.println("MESSAGE : ClassFile.mhMethodRefIndexAt(methodHandleInfoIdx=" + methodHandleInfoIdx + ") called. returns (u2(cpPos[methodHandleInfoIdx]+2)) = " + u2(cpPos[methodHandleInfoIdx]+2));
    return u2(cpPos[methodHandleInfoIdx]+2);
  }
  public String methodClassNameAt(int methodRefInfoIdx){
    System.out.println("MESSAGE : ClassFile.methodClassNameAt(methodRefInfoIdx=" + methodRefInfoIdx + ") called. cpPos[].length=" + cpPos.length);

    return (String) cpValue[ u2(cpPos[methodRefInfoIdx]+1)];
  }

Outputs below result (here is relevant part) :

MESSAGE : ClassFile.mhMethodRefIndexAt(methodHandleInfoIdx=47) called. returns (u2(cpPos[methodHandleInfoIdx]+2)) = 48
MESSAGE : ClassFile.methodClassNameAt(methodRefInfoIdx=48) called. cpPos[].length=65
MESSAGE : ClassFile.mhMethodRefIndexAt(methodHandleInfoIdx=54) called. returns (u2(cpPos[methodHandleInfoIdx]+2)) = 14081
MESSAGE : ClassFile.methodClassNameAt(methodRefInfoIdx=14081) called. cpPos[].length=65
java.lang.ArrayIndexOutOfBoundsException: Index 14081 out of bounds for length 65
cyrille-artho commented 1 month ago

You are looking at the right data and code. JPF currently handles bootstrap methods for a couple of cases, in particular, when using altMetaFactory. If you can find out how the encoding of the arguments differs for ObjectMethods.bootstrap, then we can hopefully see where in the code the decoding goes wrong.

eklaDFF commented 1 month ago

"If you can find out how the encoding of the arguments differs for ObjectMethods.bootstrap, then we can hopefully see where in the code the decoding goes wrong." ----->

From OpenJDK 17 Documentation, "Bootstrap method to generate the Object.equals(Object), Object.hashCode(), and Object.toString() methods, based on a description of the component names and accessor methods, for either invokedynamic call sites or dynamic constant pool entries. For more detail on the semantics of the generated methods see the specification of Record.equals(Object), Record.hashCode() and Record.toString()."

public static Object bootstrap(MethodHandles.Lookup lookup, String methodName, TypeDescriptor type,
                                   Class<?> recordClass,
                                   String names,
                                   MethodHandle... getters) throws Throwable {
        MethodType methodType;
        if (type instanceof MethodType)
            methodType = (MethodType) type;
        else {
            methodType = null;
            if (!MethodHandle.class.equals(type))
                throw new IllegalArgumentException(type.toString());
        }
        List<MethodHandle> getterList = List.of(getters);
        MethodHandle handle = switch (methodName) {
            case "equals"   -> {
                if (methodType != null && !methodType.equals(MethodType.methodType(boolean.class, recordClass, Object.class)))
                    throw new IllegalArgumentException("Bad method type: " + methodType);
                yield makeEquals(recordClass, getterList);
            }
            case "hashCode" -> {
                if (methodType != null && !methodType.equals(MethodType.methodType(int.class, recordClass)))
                    throw new IllegalArgumentException("Bad method type: " + methodType);
                yield makeHashCode(recordClass, getterList);
            }
            case "toString" -> {
                if (methodType != null && !methodType.equals(MethodType.methodType(String.class, recordClass)))
                    throw new IllegalArgumentException("Bad method type: " + methodType);
                List<String> nameList = "".equals(names) ? List.of() : List.of(names.split(";"));
                if (nameList.size() != getterList.size())
                    throw new IllegalArgumentException("Name list and accessor list do not match");
                yield makeToString(recordClass, getterList, nameList);
            }
            default -> throw new IllegalArgumentException(methodName);
        };
        return methodType != null ? new ConstantCallSite(handle) : handle;
    }

It is not somewhat you told like encoding of arguments ? Looks like it is generating some methods from predefined templates. For example, if I say "need a method to access a private variable", then this bootstrap method will be called to generate getter() method or something like that. Right ?

cyrille-artho commented 1 month ago

Interesting. The code does not seem to check the types of the arguments inside the list, only the size of it. As you can see, this code generation is quite complex. The result is not typed (returned as an Object rather than a CallSite), and the complexity is inside the make... methods. Perhaps this can still work with JPF's interpretation approach, even though in the long term, generating valid CallSite objects at load time would be preferable.

For now, try to find out what the valid constant pool index should be. Even if we cannot find out where the wrong index is computed, knowing the right one gives us a better idea of how the mechanism works in the case where everything is correct.

eklaDFF commented 1 month ago

Please explain Constant Pool. Index in Constant Pool is fixed or depends on the compiler and also differs program-wise ?

And whose index do we have to look in Constant Pool ?

cyrille-artho commented 1 month ago

The constant pool provides a mechanism to store common constants in a program (such as constant values, type names, method names, etc.) in a single place, making the bytecode more space-efficient. See: https://blogs.oracle.com/javamagazine/post/java-class-file-constant-pool The indices in bytecode (or the constant pool itself) refer to specific elements in it, like pointers in software. If one of these indices is wrong, the wrong element (or a non-existent one) is referred to.

eklaDFF commented 4 weeks ago

I tried to see the Bytecode for below example on regular OpenJDK17.

package org.example;

public class Main {
    record Point(int x, int y){}

    // Official documents suggest that fields of "record" are "private" and "final".
    // So we are testing by direct access. It should fail here at compile time, but do not know why it works.
    public static void main(String[] args) {
        Point point = new Point(4, 5);
        System.out.println(point.x);
    }
}
ekla@Eklas-MacBook-Air CustomTestingProject % javap -v -cp build/classes/java/main/org/example Main
Warning: File build/classes/java/main/org/example/Main.class does not contain class Main
Classfile /Users/ekla/Java Learning/CustomTestingProject/build/classes/java/main/org/example/Main.class
  Last modified 15-Aug-2024; size 693 bytes
  SHA-256 checksum 73e492c12d0b1fdae02a3dea80a93af5d8a452464d021985f9ef50cc1d69b255
  Compiled from "Main.java"
public class org.example.Main
  minor version: 0
  major version: 61
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #28                         // org/example/Main
  super_class: #2                         // java/lang/Object
  interfaces: 0, fields: 0, methods: 2, attributes: 3
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Object."<init>":()V
   #2 = Class              #4             // java/lang/Object
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Object
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Class              #8             // org/example/Main$Point
   #8 = Utf8               org/example/Main$Point
   #9 = Methodref          #7.#10         // org/example/Main$Point."<init>":(II)V
  #10 = NameAndType        #5:#11         // "<init>":(II)V
  #11 = Utf8               (II)V
  #12 = Fieldref           #13.#14        // java/lang/System.out:Ljava/io/PrintStream;
  #13 = Class              #15            // java/lang/System
  #14 = NameAndType        #16:#17        // out:Ljava/io/PrintStream;
  #15 = Utf8               java/lang/System
  #16 = Utf8               out
  #17 = Utf8               Ljava/io/PrintStream;
  #18 = Fieldref           #7.#19         // org/example/Main$Point.x:I
  #19 = NameAndType        #20:#21        // x:I
  #20 = Utf8               x
  #21 = Utf8               I
  #22 = Methodref          #23.#24        // java/io/PrintStream.println:(I)V
  #23 = Class              #25            // java/io/PrintStream
  #24 = NameAndType        #26:#27        // println:(I)V
  #25 = Utf8               java/io/PrintStream
  #26 = Utf8               println
  #27 = Utf8               (I)V
  #28 = Class              #29            // org/example/Main
  #29 = Utf8               org/example/Main
  #30 = Utf8               Code
  #31 = Utf8               LineNumberTable
  #32 = Utf8               LocalVariableTable
  #33 = Utf8               this
  #34 = Utf8               Lorg/example/Main;
  #35 = Utf8               main
  #36 = Utf8               ([Ljava/lang/String;)V
  #37 = Utf8               args
  #38 = Utf8               [Ljava/lang/String;
  #39 = Utf8               point
  #40 = Utf8               Lorg/example/Main$Point;
  #41 = Utf8               SourceFile
  #42 = Utf8               Main.java
  #43 = Utf8               NestMembers
  #44 = Utf8               InnerClasses
  #45 = Utf8               Point
{
  public org.example.Main();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      LineNumberTable:
        line 3: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Lorg/example/Main;

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
         0: new           #7                  // class org/example/Main$Point
         3: dup
         4: iconst_4
         5: iconst_5
         6: invokespecial #9                  // Method org/example/Main$Point."<init>":(II)V
         9: astore_1
        10: getstatic     #12                 // Field java/lang/System.out:Ljava/io/PrintStream;
        13: aload_1
        14: getfield      #18                 // Field org/example/Main$Point.x:I
        17: invokevirtual #22                 // Method java/io/PrintStream.println:(I)V
        20: return
      LineNumberTable:
        line 10: 0
        line 11: 10
        line 12: 20
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      21     0  args   [Ljava/lang/String;
           10      11     1 point   Lorg/example/Main$Point;
}
SourceFile: "Main.java"
NestMembers:
  org/example/Main$Point
InnerClasses:
  static final #45= #7 of #28;            // Point=class org/example/Main$Point of class org/example/Main
ekla@Eklas-MacBook-Air CustomTestingProject % 
cyrille-artho commented 4 weeks ago

Yes, the field is indeed private. You can access x and y, which are private, from Main, because Point is an inner class of Main. You can't access them from a different class.

eklaDFF commented 4 weeks ago

We were talking about to see the bytecode for a valid case of record feature. Because we want to see how the what index are the in the Constant Pool.

I am unable to understand which one goes wrong in case of JPF. As JPF uses additional code verifyNoPropertyViol.....

cyrille-artho commented 3 weeks ago

The method verifyNoPropertyViolation executes the part of the method inside the curly braces inside the JPF engine. (Unit tests are as such run by the host JVM, so this extra method is needed to pass control to JPF.) The internals of this are not so important, as it's only needed for running unit tests in JPF and does not concern JPF's handling of bootstrap methods. It would be useful if you could look into how the data structures from the constant pool are parsed, so we have an idea of where things go wrong. This is not dependent on how JPF takes control of a code section during unit testing. You might, instead of using JPF, look into how the data structure relates to different entries "on paper" (using the output of javap -v above); at some point, the correct values will deviate from the logged output that JPF produces.

eklaDFF commented 2 days ago

I when we create a simple java program like below

public class RecordFeatureTest {
    record Point(int x, int y){}
}

The bytecode for above program differs from the one written in our JPF


Bytecode for above simple program

ekla@Eklas-MacBook-Air RoughFolder % javap -v RecordFeatureTest\$Point
Classfile /Users/ekla/RoughFolder/RecordFeatureTest$Point.class
  Last modified 05-Sep-2024; size 1283 bytes
  SHA-256 checksum fe9dd488dbe8d6323ce52851036bd03ca7ea11cd73d152a846082e7c238ad456
  Compiled from "RecordFeatureTest.java"
final class RecordFeatureTest$Point extends java.lang.Record
  minor version: 0
  major version: 61
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: #8                          // RecordFeatureTest$Point
  super_class: #2                         // java/lang/Record
  interfaces: 0, fields: 2, methods: 6, attributes: 5
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Record."<init>":()V
   #2 = Class              #4             // java/lang/Record
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Record
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // RecordFeatureTest$Point.x:I
   #8 = Class              #10            // RecordFeatureTest$Point
   #9 = NameAndType        #11:#12        // x:I
  #10 = Utf8               RecordFeatureTest$Point
  #11 = Utf8               x
  #12 = Utf8               I
  #13 = Fieldref           #8.#14         // RecordFeatureTest$Point.y:I
  #14 = NameAndType        #15:#12        // y:I
  #15 = Utf8               y
  #16 = InvokeDynamic      #0:#17         // #0:toString:(LRecordFeatureTest$Point;)Ljava/lang/String;
  #17 = NameAndType        #18:#19        // toString:(LRecordFeatureTest$Point;)Ljava/lang/String;
  #18 = Utf8               toString
  #19 = Utf8               (LRecordFeatureTest$Point;)Ljava/lang/String;
  #20 = InvokeDynamic      #0:#21         // #0:hashCode:(LRecordFeatureTest$Point;)I
  #21 = NameAndType        #22:#23        // hashCode:(LRecordFeatureTest$Point;)I
  #22 = Utf8               hashCode
  #23 = Utf8               (LRecordFeatureTest$Point;)I
  #24 = InvokeDynamic      #0:#25         // #0:equals:(LRecordFeatureTest$Point;Ljava/lang/Object;)Z
  #25 = NameAndType        #26:#27        // equals:(LRecordFeatureTest$Point;Ljava/lang/Object;)Z
  #26 = Utf8               equals
  #27 = Utf8               (LRecordFeatureTest$Point;Ljava/lang/Object;)Z
  #28 = Utf8               (II)V
  #29 = Utf8               Code
  #30 = Utf8               LineNumberTable
  #31 = Utf8               MethodParameters
  #32 = Utf8               ()Ljava/lang/String;
  #33 = Utf8               ()I
  #34 = Utf8               (Ljava/lang/Object;)Z
  #35 = Utf8               SourceFile
  #36 = Utf8               RecordFeatureTest.java
  #37 = Utf8               NestHost
  #38 = Class              #39            // RecordFeatureTest
  #39 = Utf8               RecordFeatureTest
  #40 = Utf8               Record
  #41 = Utf8               BootstrapMethods
  #42 = MethodHandle       6:#43          // REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #43 = Methodref          #44.#45        // java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #44 = Class              #46            // java/lang/runtime/ObjectMethods
  #45 = NameAndType        #47:#48        // bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #46 = Utf8               java/lang/runtime/ObjectMethods
  #47 = Utf8               bootstrap
  #48 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #49 = String             #50            // x;y
  #50 = Utf8               x;y
  #51 = MethodHandle       1:#7           // REF_getField RecordFeatureTest$Point.x:I
  #52 = MethodHandle       1:#13          // REF_getField RecordFeatureTest$Point.y:I
  #53 = Utf8               InnerClasses
  #54 = Utf8               Point
  #55 = Class              #56            // java/lang/invoke/MethodHandles$Lookup
  #56 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #57 = Class              #58            // java/lang/invoke/MethodHandles
  #58 = Utf8               java/lang/invoke/MethodHandles
  #59 = Utf8               Lookup
{
  RecordFeatureTest$Point(int, int);
    descriptor: (II)V
    flags: (0x0000)
    Code:
      stack=2, locals=3, args_size=3
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Record."<init>":()V
         4: aload_0
         5: iload_1
         6: putfield      #7                  // Field x:I
         9: aload_0
        10: iload_2
        11: putfield      #13                 // Field y:I
        14: return
      LineNumberTable:
        line 2: 0
    MethodParameters:
      Name                           Flags
      x
      y

  public final java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #16,  0             // InvokeDynamic #0:toString:(LRecordFeatureTest$Point;)Ljava/lang/String;
         6: areturn
      LineNumberTable:
        line 2: 0

  public final int hashCode();
    descriptor: ()I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #20,  0             // InvokeDynamic #0:hashCode:(LRecordFeatureTest$Point;)I
         6: ireturn
      LineNumberTable:
        line 2: 0

  public final boolean equals(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: aload_1
         2: invokedynamic #24,  0             // InvokeDynamic #0:equals:(LRecordFeatureTest$Point;Ljava/lang/Object;)Z
         7: ireturn
      LineNumberTable:
        line 2: 0

  public int x();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #7                  // Field x:I
         4: ireturn
      LineNumberTable:
        line 2: 0

  public int y();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #13                 // Field y:I
         4: ireturn
      LineNumberTable:
        line 2: 0
}
SourceFile: "RecordFeatureTest.java"
NestHost: class RecordFeatureTest
Record:
  int x;
    descriptor: I

  int y;
    descriptor: I

BootstrapMethods:
  0: #42 REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
    Method arguments:
      #8 RecordFeatureTest$Point
      #49 x;y
      #51 REF_getField RecordFeatureTest$Point.x:I
      #52 REF_getField RecordFeatureTest$Point.y:I
InnerClasses:
  static final #54= #8 of #38;            // Point=class RecordFeatureTest$Point of class RecordFeatureTest
  public static final #59= #55 of #57;    // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
ekla@Eklas-MacBook-Air RoughFolder % java -version
openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+11)
OpenJDK 64-Bit Server VM (build 17.0.10+11, mixed mode, sharing)

ByteCode for JPF record

ekla@Eklas-MacBook-Air java17 % javap -v RecordFeatureTest\$Point
Warning: File ./RecordFeatureTest$Point.class does not contain class RecordFeatureTest$Point
Classfile /Users/ekla/GSOC/JPFjava17/jpf-core/build/tests/java17/RecordFeatureTest$Point.class
  Last modified 04-Sep-2024; size 1544 bytes
  SHA-256 checksum f5e6bcbb1967b31aebab060eef3f89fad6f1470a60e00c683d7e8e26b2c57611
  Compiled from "RecordFeatureTest.java"
final class java17.RecordFeatureTest$Point extends java.lang.Record
  minor version: 0
  major version: 61
  flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: #8                          // java17/RecordFeatureTest$Point
  super_class: #2                         // java/lang/Record
  interfaces: 0, fields: 2, methods: 6, attributes: 5
Constant pool:
   #1 = Methodref          #2.#3          // java/lang/Record."<init>":()V
   #2 = Class              #4             // java/lang/Record
   #3 = NameAndType        #5:#6          // "<init>":()V
   #4 = Utf8               java/lang/Record
   #5 = Utf8               <init>
   #6 = Utf8               ()V
   #7 = Fieldref           #8.#9          // java17/RecordFeatureTest$Point.x:I
   #8 = Class              #10            // java17/RecordFeatureTest$Point
   #9 = NameAndType        #11:#12        // x:I
  #10 = Utf8               java17/RecordFeatureTest$Point
  #11 = Utf8               x
  #12 = Utf8               I
  #13 = Fieldref           #8.#14         // java17/RecordFeatureTest$Point.y:I
  #14 = NameAndType        #15:#12        // y:I
  #15 = Utf8               y
  #16 = InvokeDynamic      #0:#17         // #0:toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #17 = NameAndType        #18:#19        // toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #18 = Utf8               toString
  #19 = Utf8               (Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
  #20 = InvokeDynamic      #0:#21         // #0:hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #21 = NameAndType        #22:#23        // hashCode:(Ljava17/RecordFeatureTest$Point;)I
  #22 = Utf8               hashCode
  #23 = Utf8               (Ljava17/RecordFeatureTest$Point;)I
  #24 = InvokeDynamic      #0:#25         // #0:equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #25 = NameAndType        #26:#27        // equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #26 = Utf8               equals
  #27 = Utf8               (Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
  #28 = Utf8               (II)V
  #29 = Utf8               Code
  #30 = Utf8               LineNumberTable
  #31 = Utf8               LocalVariableTable
  #32 = Utf8               this
  #33 = Utf8               Ljava17/RecordFeatureTest$Point;
  #34 = Utf8               MethodParameters
  #35 = Utf8               ()Ljava/lang/String;
  #36 = Utf8               ()I
  #37 = Utf8               (Ljava/lang/Object;)Z
  #38 = Utf8               o
  #39 = Utf8               Ljava/lang/Object;
  #40 = Utf8               SourceFile
  #41 = Utf8               RecordFeatureTest.java
  #42 = Utf8               NestHost
  #43 = Class              #44            // java17/RecordFeatureTest
  #44 = Utf8               java17/RecordFeatureTest
  #45 = Utf8               Record
  #46 = Utf8               BootstrapMethods
  #47 = MethodHandle       6:#48          // REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #48 = Methodref          #49.#50        // java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #49 = Class              #51            // java/lang/runtime/ObjectMethods
  #50 = NameAndType        #52:#53        // bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #51 = Utf8               java/lang/runtime/ObjectMethods
  #52 = Utf8               bootstrap
  #53 = Utf8               (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
  #54 = String             #55            // x;y
  #55 = Utf8               x;y
  #56 = MethodHandle       1:#7           // REF_getField java17/RecordFeatureTest$Point.x:I
  #57 = MethodHandle       1:#13          // REF_getField java17/RecordFeatureTest$Point.y:I
  #58 = Utf8               InnerClasses
  #59 = Utf8               Point
  #60 = Class              #61            // java/lang/invoke/MethodHandles$Lookup
  #61 = Utf8               java/lang/invoke/MethodHandles$Lookup
  #62 = Class              #63            // java/lang/invoke/MethodHandles
  #63 = Utf8               java/lang/invoke/MethodHandles
  #64 = Utf8               Lookup
{
  java17.RecordFeatureTest$Point(int, int);
    descriptor: (II)V
    flags: (0x0000)
    Code:
      stack=2, locals=3, args_size=3
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Record."<init>":()V
         4: aload_0
         5: iload_1
         6: putfield      #7                  // Field x:I
         9: aload_0
        10: iload_2
        11: putfield      #13                 // Field y:I
        14: return
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      15     0  this   Ljava17/RecordFeatureTest$Point;
            0      15     1     x   I
            0      15     2     y   I
    MethodParameters:
      Name                           Flags
      x
      y

  public final java.lang.String toString();
    descriptor: ()Ljava/lang/String;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #16,  0             // InvokeDynamic #0:toString:(Ljava17/RecordFeatureTest$Point;)Ljava/lang/String;
         6: areturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       7     0  this   Ljava17/RecordFeatureTest$Point;

  public final int hashCode();
    descriptor: ()I
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokedynamic #20,  0             // InvokeDynamic #0:hashCode:(Ljava17/RecordFeatureTest$Point;)I
         6: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       7     0  this   Ljava17/RecordFeatureTest$Point;

  public final boolean equals(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Z
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: aload_1
         2: invokedynamic #24,  0             // InvokeDynamic #0:equals:(Ljava17/RecordFeatureTest$Point;Ljava/lang/Object;)Z
         7: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       8     0  this   Ljava17/RecordFeatureTest$Point;
            0       8     1     o   Ljava/lang/Object;

  public int x();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #7                  // Field x:I
         4: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Ljava17/RecordFeatureTest$Point;

  public int y();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: getfield      #13                 // Field y:I
         4: ireturn
      LineNumberTable:
        line 8: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Ljava17/RecordFeatureTest$Point;
}
SourceFile: "RecordFeatureTest.java"
NestHost: class java17/RecordFeatureTest
Record:
  int x;
    descriptor: I

  int y;
    descriptor: I

BootstrapMethods:
  0: #47 REF_invokeStatic java/lang/runtime/ObjectMethods.bootstrap:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;
    Method arguments:
      #8 java17/RecordFeatureTest$Point
      #54 x;y
      #56 REF_getField java17/RecordFeatureTest$Point.x:I
      #57 REF_getField java17/RecordFeatureTest$Point.y:I
InnerClasses:
  static final #59= #8 of #43;            // Point=class java17/RecordFeatureTest$Point of class java17/RecordFeatureTest
  public static final #64= #60 of #62;    // Lookup=class java/lang/invoke/MethodHandles$Lookup of class java/lang/invoke/MethodHandles
ekla@Eklas-MacBook-Air java17 % java -version
openjdk version "17.0.10" 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+11)
OpenJDK 64-Bit Server VM (build 17.0.10+11, mixed mode, sharing)

My Question is, both the programs is compiled under same compiler ? If yes, how can be different bytecode for same record class(subclass) ?

eklaDFF commented 2 days ago

Should I send you more detailed explanation of the above comment . (Please check email regarding today's meeting?)

cyrille-artho commented 2 days ago

Probably you are using a slightly different version of the compiler than what gradle uses. Your own Java environment does two things: 1. It runs Gradle. 2. It runs JPF when you run bin/jpf. The compilation of JPF itself is handled by Gradle, which downloads a Java compiler of its choice (adhering to given version restrictions in the configuration). It is important that these two Java environments match closely, so the resulting JPF application runs successfully in your JVM. However, small deviations are possible and often (as in this case) benign.

eklaDFF commented 2 days ago

So, now I should go for debugging the bootstrap method along with a proper diagram comfortably?

cyrille-artho commented 2 days ago

Yes, please do that; use the bytecode that Gradle produces (i.e., when you build JPF and run the tests normally).

eklaDFF commented 1 day ago

In the diagram you suggested, it is difficult to show the behaviour of the methods like manipulation of the parameters within the method. Because sometimes it is more important to show the behaviour proceeding the flow of calls.

How do you do ?

cyrille-artho commented 1 day ago

You want to focus on one aspect in the diagram, and I recommend you focus on the data dependencies. The control flow is simpler, and, from what we can see, JPF handles the instructions themselves correctly, but not the data.