.<= 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>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(30)=832040
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= 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>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(5)=5
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= 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>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(5)=5
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= 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>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <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: 2>
.....=> 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 char[] java.util.Arrays.copyOf(char[],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 char[] java.util.Arrays.copyOf(char[],int) -> <class [C: [B, a, d,  , a, r, g, u, m, e, n, t, :,  , -, 1, 9,  , <,  , 0, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> static void java.lang.Integer.getChars(int,int,char[])
.....<= static void java.lang.Integer.getChars(int,int,char[]) -> <null: null>
....<= 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>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <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()
....=> public static java.lang.String java.lang.StringFactory.newStringFromChars(char[],int,int)
.....=> static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[])
.....<= static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[]) -> <class java.lang.String: Bad argument: -19 < 0>
....<= public static java.lang.String java.lang.StringFactory.newStringFromChars(char[],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:255)
	art.Test988$IterOp.applyAsInt(Test988.java:250)
	art.Test988.doFibTest(Test988.java:388)
	art.Test988.run(Test988.java:344)
	<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>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:255)
	art.Test988$IterOp.applyAsInt(Test988.java:250)
	art.Test988.doFibTest(Test988.java:388)
	art.Test988.run(Test988.java:344)
	<additional hidden frames>

.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= 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>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <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: 2>
.....=> 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 char[] java.util.Arrays.copyOf(char[],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 char[] java.util.Arrays.copyOf(char[],int) -> <class [C: [B, a, d,  , a, r, g, u, m, e, n, t, :,  , -, 1, 9,  , <,  , 0, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> static void java.lang.Integer.getChars(int,int,char[])
.....<= static void java.lang.Integer.getChars(int,int,char[]) -> <null: null>
....<= 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>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <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()
....=> public static java.lang.String java.lang.StringFactory.newStringFromChars(char[],int,int)
.....=> static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[])
.....<= static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[]) -> <class java.lang.String: Bad argument: -19 < 0>
....<= public static java.lang.String java.lang.StringFactory.newStringFromChars(char[],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:277)
	art.Test988$RecurOp.applyAsInt(Test988.java:272)
	art.Test988.doFibTest(Test988.java:388)
	art.Test988.run(Test988.java:345)
	<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>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:277)
	art.Test988$RecurOp.applyAsInt(Test988.java:272)
	art.Test988.doFibTest(Test988.java:388)
	art.Test988.run(Test988.java:345)
	<additional hidden frames>

.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= 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:287)
	art.Test988.doFibTest(Test988.java:388)
	art.Test988.run(Test988.java:346)
	<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>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(-19) -> java.lang.Error: bad argument
	art.Test988.nativeFibonacci(Native Method)
	art.Test988$NativeOp.applyAsInt(Test988.java:287)
	art.Test988.doFibTest(Test988.java:388)
	art.Test988.run(Test988.java:346)
	<additional hidden frames>

.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= 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)
