.<= public static void art.Trace.enableTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
<= public static void art.Trace.enableMethodTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$IterOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$IterOp.applyAsInt(int)
..=> static int art.Test988.iter_fibonacci(int)
..<= static int art.Test988.iter_fibonacci(int) -> <class java.lang.Integer: 832040>
.<= public int art.Test988$IterOp.applyAsInt(int) -> <class java.lang.Integer: 832040>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(30)=832040
...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$RecurOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$RecurOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$RecurOp.applyAsInt(int)
..=> static int art.Test988.fibonacci(int)
...=> static int art.Test988.fibonacci(int)
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
......=> static int art.Test988.fibonacci(int)
......<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
......=> static int art.Test988.fibonacci(int)
......<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 2>
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
...<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 3>
...=> static int art.Test988.fibonacci(int)
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
....=> static int art.Test988.fibonacci(int)
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
...<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 2>
..<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 5>
.<= public int art.Test988$RecurOp.applyAsInt(int) -> <class java.lang.Integer: 5>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(5)=5
...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$NativeOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$NativeOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$NativeOp.applyAsInt(int)
..=> static int art.Test988.nativeFibonacci(int)
..<= static int art.Test988.nativeFibonacci(int) -> <class java.lang.Integer: 5>
.<= public int art.Test988$NativeOp.applyAsInt(int) -> <class java.lang.Integer: 5>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(5)=5
...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$IterOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$IterOp.applyAsInt(int)
..=> static int art.Test988.iter_fibonacci(int)
...=> public java.lang.StringBuilder()
....=> java.lang.AbstractStringBuilder(int)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
....<= java.lang.AbstractStringBuilder(int) -> <null: null>
...<= public java.lang.StringBuilder() -> <null: null>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.fillBytes(byte[],int,byte)
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.fillBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(int)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int)
.....=> static int java.lang.Integer.stringSize(int)
.....<= static int java.lang.Integer.stringSize(int) -> <class java.lang.Integer: 3>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
......=> private int java.lang.AbstractStringBuilder.newCapacity(int)
......<= private int java.lang.AbstractStringBuilder.newCapacity(int) -> <class java.lang.Integer: 34>
......=> public static byte[] java.util.Arrays.copyOf(byte[],int)
.......=> public static int java.lang.Math.min(int,int)
.......<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 16>
.......=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.......<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
......<= public static byte[] java.util.Arrays.copyOf(byte[],int) -> <class [B: [66, 97, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 58, 32, 45, 49, 57, 32, 60, 32, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
.....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
.....=> static int java.lang.Integer.getChars(int,int,byte[])
.....<= static int java.lang.Integer.getChars(int,int,byte[]) -> <class java.lang.Integer: 14>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.fillBytes(byte[],int,byte)
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.fillBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.String java.lang.StringBuilder.toString()
....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
....=> public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int)
.....=> public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int)
.....<= public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int) -> <class java.lang.String: Bad argument: -19 < 0>
....<= public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int) -> <class java.lang.String: Bad argument: -19 < 0>
...<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: Bad argument: -19 < 0>
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:280)
	art.Test988$IterOp.applyAsInt(Test988.java:275)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:369)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.iter_fibonacci(int) EXCEPTION
.<= public int art.Test988$IterOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:280)
	art.Test988$IterOp.applyAsInt(Test988.java:275)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:369)
	<additional hidden frames>

...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$RecurOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$RecurOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$RecurOp.applyAsInt(int)
..=> static int art.Test988.fibonacci(int)
...=> public java.lang.StringBuilder()
....=> java.lang.AbstractStringBuilder(int)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
....<= java.lang.AbstractStringBuilder(int) -> <null: null>
...<= public java.lang.StringBuilder() -> <null: null>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.fillBytes(byte[],int,byte)
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.fillBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(int)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int)
.....=> static int java.lang.Integer.stringSize(int)
.....<= static int java.lang.Integer.stringSize(int) -> <class java.lang.Integer: 3>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
......=> private int java.lang.AbstractStringBuilder.newCapacity(int)
......<= private int java.lang.AbstractStringBuilder.newCapacity(int) -> <class java.lang.Integer: 34>
......=> public static byte[] java.util.Arrays.copyOf(byte[],int)
.......=> public static int java.lang.Math.min(int,int)
.......<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 16>
.......=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.......<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
......<= public static byte[] java.util.Arrays.copyOf(byte[],int) -> <class [B: [66, 97, 100, 32, 97, 114, 103, 117, 109, 101, 110, 116, 58, 32, 45, 49, 57, 32, 60, 32, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
.....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
.....=> static int java.lang.Integer.getChars(int,int,byte[])
.....<= static int java.lang.Integer.getChars(int,int,byte[]) -> <class java.lang.Integer: 14>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String)
......=> final byte java.lang.AbstractStringBuilder.getCoder()
......<= final byte java.lang.AbstractStringBuilder.getCoder() -> <class java.lang.Byte: 0>
......=> byte java.lang.String.coder()
......<= byte java.lang.String.coder() -> <class java.lang.Byte: 0>
......=> void java.lang.String.fillBytes(byte[],int,byte)
.......=> public int java.lang.String.length()
.......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.......=> static void java.lang.String.checkBoundsOffCount(int,int,int)
.......<= static void java.lang.String.checkBoundsOffCount(int,int,int) -> <null: null>
.......=> private void java.lang.String.fillBytesLatin1(byte[],int)
.......<= private void java.lang.String.fillBytesLatin1(byte[],int) -> <null: null>
......<= void java.lang.String.fillBytes(byte[],int,byte) -> <null: null>
.....<= private final void java.lang.AbstractStringBuilder.putStringAt(int,java.lang.String) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.String java.lang.StringBuilder.toString()
....=> final boolean java.lang.AbstractStringBuilder.isLatin1()
....<= final boolean java.lang.AbstractStringBuilder.isLatin1() -> <class java.lang.Boolean: true>
....=> public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int)
.....=> public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int)
.....<= public static java.lang.String java.lang.StringFactory.newStringFromBytes(byte[],int,int,int) -> <class java.lang.String: Bad argument: -19 < 0>
....<= public static java.lang.String java.lang.StringLatin1.newString(byte[],int,int) -> <class java.lang.String: Bad argument: -19 < 0>
...<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: Bad argument: -19 < 0>
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:302)
	art.Test988$RecurOp.applyAsInt(Test988.java:297)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:370)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.fibonacci(int) EXCEPTION
.<= public int art.Test988$RecurOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:302)
	art.Test988$RecurOp.applyAsInt(Test988.java:297)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:370)
	<additional hidden frames>

...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$NativeOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$NativeOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$NativeOp.applyAsInt(int)
..=> static int art.Test988.nativeFibonacci(int)
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: bad argument
	art.Test988.nativeFibonacci(Native Method)
	art.Test988$NativeOp.applyAsInt(Test988.java:312)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:371)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.nativeFibonacci(int) EXCEPTION
.<= public int art.Test988$NativeOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> static void art.Test988.addToResults(art.Test988$Printable)
..=> public void java.util.ArrayList.ensureCapacity(int)
..<= public void java.util.ArrayList.ensureCapacity(int) -> <null: null>
..=> public boolean java.util.ArrayList.add(java.lang.Object)
fibonacci(-19) -> java.lang.Error: bad argument
	art.Test988.nativeFibonacci(Native Method)
	art.Test988$NativeOp.applyAsInt(Test988.java:312)
	art.Test988.doFibTest(Test988.java:413)
	art.Test988.run(Test988.java:371)
	<additional hidden frames>

...<= private void java.util.ArrayList.add(java.lang.Object,java.lang.Object[],int) -> <null: null>
..<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
.<= static void art.Test988.addToResults(art.Test988$Printable) -> <null: null>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> public final void <non-deterministic-type 0>.run()
.=> private static java.lang.Object java.lang.reflect.Proxy.invoke(java.lang.reflect.Proxy,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable
..=> public java.lang.Object art.Test988$TestRunnableInvokeHandler.invoke(java.lang.Object,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable
..<= public java.lang.Object art.Test988$TestRunnableInvokeHandler.invoke(java.lang.Object,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable -> <null: null>
.<= private static java.lang.Object java.lang.reflect.Proxy.invoke(java.lang.reflect.Proxy,java.lang.reflect.Method,java.lang.Object[]) throws java.lang.Throwable -> <null: null>
<= public final void <non-deterministic-type 0>.run() -> <null: null>
=> static void art.Test988$IntrinsicsTest.doTest()
.=> static void art.Test988Intrinsics.test()
..=> public static long java.lang.Double.doubleToRawLongBits(double)
..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
..=> public static long java.lang.Double.doubleToLongBits(double)
..<= public static long java.lang.Double.doubleToLongBits(double) -> <class java.lang.Long: 0>
..=> public static boolean java.lang.Double.isInfinite(double)
..<= public static boolean java.lang.Double.isInfinite(double) -> <class java.lang.Boolean: false>
..=> public static boolean java.lang.Double.isNaN(double)
..<= public static boolean java.lang.Double.isNaN(double) -> <class java.lang.Boolean: false>
..=> public static double java.lang.Double.longBitsToDouble(long)
..<= public static double java.lang.Double.longBitsToDouble(long) -> <class java.lang.Double: 0.0>
..=> public static int java.lang.Float.floatToRawIntBits(float)
..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Float.floatToIntBits(float)
..<= public static int java.lang.Float.floatToIntBits(float) -> <class java.lang.Integer: 0>
..=> public static boolean java.lang.Float.isInfinite(float)
..<= public static boolean java.lang.Float.isInfinite(float) -> <class java.lang.Boolean: false>
..=> public static boolean java.lang.Float.isNaN(float)
..<= public static boolean java.lang.Float.isNaN(float) -> <class java.lang.Boolean: false>
..=> public static float java.lang.Float.intBitsToFloat(int)
..<= public static float java.lang.Float.intBitsToFloat(int) -> <class java.lang.Float: 0.0>
..=> public static int java.lang.Integer.reverse(int)
..<= public static int java.lang.Integer.reverse(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.reverseBytes(int)
..<= public static int java.lang.Integer.reverseBytes(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.bitCount(int)
..<= public static int java.lang.Integer.bitCount(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.compare(int,int)
..<= public static int java.lang.Integer.compare(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.highestOneBit(int)
..<= public static int java.lang.Integer.highestOneBit(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.lowestOneBit(int)
..<= public static int java.lang.Integer.lowestOneBit(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.numberOfLeadingZeros(int)
..<= public static int java.lang.Integer.numberOfLeadingZeros(int) -> <class java.lang.Integer: 32>
..=> public static int java.lang.Integer.numberOfTrailingZeros(int)
..<= public static int java.lang.Integer.numberOfTrailingZeros(int) -> <class java.lang.Integer: 32>
..=> public static int java.lang.Integer.rotateRight(int,int)
..<= public static int java.lang.Integer.rotateRight(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.rotateLeft(int,int)
..<= public static int java.lang.Integer.rotateLeft(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.signum(int)
..<= public static int java.lang.Integer.signum(int) -> <class java.lang.Integer: 0>
..=> public static long java.lang.Long.reverse(long)
..<= public static long java.lang.Long.reverse(long) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.reverseBytes(long)
..<= public static long java.lang.Long.reverseBytes(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.bitCount(long)
..<= public static int java.lang.Long.bitCount(long) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Long.compare(long,long)
..<= public static int java.lang.Long.compare(long,long) -> <class java.lang.Integer: 0>
..=> public static long java.lang.Long.highestOneBit(long)
..<= public static long java.lang.Long.highestOneBit(long) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.lowestOneBit(long)
..<= public static long java.lang.Long.lowestOneBit(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.numberOfLeadingZeros(long)
..<= public static int java.lang.Long.numberOfLeadingZeros(long) -> <class java.lang.Integer: 64>
..=> public static int java.lang.Long.numberOfTrailingZeros(long)
..<= public static int java.lang.Long.numberOfTrailingZeros(long) -> <class java.lang.Integer: 64>
..=> public static long java.lang.Long.rotateRight(long,int)
..<= public static long java.lang.Long.rotateRight(long,int) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.rotateLeft(long,int)
..<= public static long java.lang.Long.rotateLeft(long,int) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.signum(long)
..<= public static int java.lang.Long.signum(long) -> <class java.lang.Integer: 0>
..=> public static short java.lang.Short.reverseBytes(short)
..<= public static short java.lang.Short.reverseBytes(short) -> <class java.lang.Short: 0>
..=> public static double java.lang.Math.abs(double)
..<= public static double java.lang.Math.abs(double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.abs(float)
..<= public static float java.lang.Math.abs(float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.abs(long)
..<= public static long java.lang.Math.abs(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.abs(int)
..<= public static int java.lang.Math.abs(int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.min(double,double)
..<= public static double java.lang.Math.min(double,double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.min(float,float)
..<= public static float java.lang.Math.min(float,float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.min(long,long)
..<= public static long java.lang.Math.min(long,long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.min(int,int)
..<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.max(double,double)
..<= public static double java.lang.Math.max(double,double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.max(float,float)
..<= public static float java.lang.Math.max(float,float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.max(long,long)
..<= public static long java.lang.Math.max(long,long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.max(int,int)
..<= public static int java.lang.Math.max(int,int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.cos(double)
..<= public static double java.lang.Math.cos(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.sin(double)
..<= public static double java.lang.Math.sin(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.acos(double)
..<= public static double java.lang.Math.acos(double) -> <class java.lang.Double: 1.5707963267948966>
..=> public static double java.lang.Math.asin(double)
..<= public static double java.lang.Math.asin(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.atan(double)
..<= public static double java.lang.Math.atan(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.atan2(double,double)
..<= public static double java.lang.Math.atan2(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.cbrt(double)
..<= public static double java.lang.Math.cbrt(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.cosh(double)
..<= public static double java.lang.Math.cosh(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.exp(double)
..<= public static double java.lang.Math.exp(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.expm1(double)
..<= public static double java.lang.Math.expm1(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.hypot(double,double)
..<= public static double java.lang.Math.hypot(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.log(double)
..<= public static double java.lang.Math.log(double) -> <class java.lang.Double: -Infinity>
..=> public static double java.lang.Math.log10(double)
..<= public static double java.lang.Math.log10(double) -> <class java.lang.Double: -Infinity>
..=> public static double java.lang.Math.nextAfter(double,double)
..<= public static double java.lang.Math.nextAfter(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.sinh(double)
..<= public static double java.lang.Math.sinh(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.tan(double)
..<= public static double java.lang.Math.tan(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.tanh(double)
..<= public static double java.lang.Math.tanh(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.sqrt(double)
..<= public static double java.lang.Math.sqrt(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.ceil(double)
..<= public static double java.lang.Math.ceil(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.floor(double)
..<= public static double java.lang.Math.floor(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.rint(double)
..<= public static double java.lang.Math.rint(double) -> <class java.lang.Double: 0.0>
..=> public static long java.lang.Math.round(double)
..<= public static long java.lang.Math.round(double) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.round(float)
..<= public static int java.lang.Math.round(float) -> <class java.lang.Integer: 0>
..=> public static java.lang.Thread java.lang.Thread.currentThread()
..<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
..=> public char java.lang.String.charAt(int)
..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: s>
..=> public int java.lang.String.compareTo(java.lang.String)
..<= public int java.lang.String.compareTo(java.lang.String) -> <class java.lang.Integer: 11>
..=> public boolean java.lang.String.equals(java.lang.Object)
..<= public boolean java.lang.String.equals(java.lang.Object) -> <class java.lang.Boolean: false>
..=> public int java.lang.String.indexOf(int)
..<= public int java.lang.String.indexOf(int) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(int,int)
..<= public int java.lang.String.indexOf(int,int) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(java.lang.String)
..<= public int java.lang.String.indexOf(java.lang.String) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(java.lang.String,int)
..<= public int java.lang.String.indexOf(java.lang.String,int) -> <class java.lang.Integer: -1>
..=> public boolean java.lang.String.isEmpty()
..<= public boolean java.lang.String.isEmpty() -> <class java.lang.Boolean: false>
..=> public int java.lang.String.length()
..<= public int java.lang.String.length() -> <class java.lang.Integer: 17>
..=> public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String)
..<= public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhello>
..=> public synchronized int java.lang.StringBuffer.length()
..<= public synchronized int java.lang.StringBuffer.length() -> <class java.lang.Integer: 29>
..=> public synchronized java.lang.String java.lang.StringBuffer.toString()
..<= public synchronized java.lang.String java.lang.StringBuffer.toString() -> <class java.lang.String: some large string bufferhello>
..=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
..<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhello>
..=> public int java.lang.StringBuilder.length()
..<= public int java.lang.StringBuilder.length() -> <class java.lang.Integer: 30>
..=> public java.lang.String java.lang.StringBuilder.toString()
..<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: some large string builderhello>
..=> public static java.lang.Integer java.lang.Integer.valueOf(int)
..<= public static java.lang.Integer java.lang.Integer.valueOf(int) -> <class java.lang.Integer: 0>
..=> public static boolean java.lang.Thread.interrupted()
..<= public static boolean java.lang.Thread.interrupted() -> <class java.lang.Boolean: false>
.<= static void art.Test988Intrinsics.test() -> <null: null>
.=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
.=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
<= static void art.Test988$IntrinsicsTest.doTest() -> <null: null>
=> public static java.lang.Thread java.lang.Thread.currentThread()
<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
=> public static void art.Trace.disableTracing(java.lang.Thread)
