org_eclipse_ditto_protocol_adapter_DittoProtocolAdapterParameterizedTest_java
net.bytebuddy.jar.asm.ClassReader
private int readMethod(ClassVisitor classVisitor, Context context, int methodInfoOffset) {
        int currentAnnotationOffset;
        MethodWriter methodWriter;
        char[] charBuffer = context.charBuffer;
        int currentOffset = methodInfoOffset;
        context.currentMethodAccessFlags = this.readUnsignedShort(currentOffset);
        context.currentMethodName = this.readUTF8(currentOffset + 2, charBuffer);
        context.currentMethodDescriptor = this.readUTF8(currentOffset + 4, charBuffer);
        currentOffset += 6;
        int codeOffset = 0;
        int exceptionsOffset = 0;
        String[] exceptions = null;
        boolean synthetic = false;
        int signatureIndex = 0;
        int runtimeVisibleAnnotationsOffset = 0;
        int runtimeInvisibleAnnotationsOffset = 0;
        int runtimeVisibleParameterAnnotationsOffset = 0;
        int runtimeInvisibleParameterAnnotationsOffset = 0;
        int runtimeVisibleTypeAnnotationsOffset = 0;
        int runtimeInvisibleTypeAnnotationsOffset = 0;
        int annotationDefaultOffset = 0;
        int methodParametersOffset = 0;
        Attribute attributes = null;
        int attributesCount = this.readUnsignedShort(currentOffset);
        currentOffset += 2;
        while (attributesCount-- > 0) {
            String attributeName = this.readUTF8(currentOffset, charBuffer);
            int attributeLength = this.readInt(currentOffset + 2);
            currentOffset += 6;
            if ("Code".equals(attributeName)) {
                if ((context.parsingOptions & 1) == 0) {
                    codeOffset = currentOffset;
                }
            } else if ("Exceptions".equals(attributeName)) {
                exceptionsOffset = currentOffset;
                exceptions = new String[this.readUnsignedShort(exceptionsOffset)];
                int currentExceptionOffset = exceptionsOffset + 2;
                for (int i = 0; i < exceptions.length; ++i) {
                    exceptions[i] = this.readClass(currentExceptionOffset, charBuffer);
                    currentExceptionOffset += 2;
                }
            } else if ("Signature".equals(attributeName)) {
                signatureIndex = this.readUnsignedShort(currentOffset);
            } else if ("Deprecated".equals(attributeName)) {
                context.currentMethodAccessFlags |= 0x20000;
            } else if ("RuntimeVisibleAnnotations".equals(attributeName)) {
                runtimeVisibleAnnotationsOffset = currentOffset;
            } else if ("RuntimeVisibleTypeAnnotations".equals(attributeName)) {
                runtimeVisibleTypeAnnotationsOffset = currentOffset;
            } else if ("AnnotationDefault".equals(attributeName)) {
                annotationDefaultOffset = currentOffset;
            } else if ("Synthetic".equals(attributeName)) {
                synthetic = true;
                context.currentMethodAccessFlags |= 0x1000;
            } else if ("RuntimeInvisibleAnnotations".equals(attributeName)) {
                runtimeInvisibleAnnotationsOffset = currentOffset;
            } else if ("RuntimeInvisibleTypeAnnotations".equals(attributeName)) {
                runtimeInvisibleTypeAnnotationsOffset = currentOffset;
            } else if ("RuntimeVisibleParameterAnnotations".equals(attributeName)) {
                runtimeVisibleParameterAnnotationsOffset = currentOffset;
            } else if ("RuntimeInvisibleParameterAnnotations".equals(attributeName)) {
                runtimeInvisibleParameterAnnotationsOffset = currentOffset;
            } else if ("MethodParameters".equals(attributeName)) {
                methodParametersOffset = currentOffset;
            } else {
                Attribute attribute = this.readAttribute(context.attributePrototypes, attributeName, currentOffset, attributeLength, charBuffer, -1, null);
                attribute.nextAttribute = attributes;
                attributes = attribute;
            }
            currentOffset += attributeLength;
        }
        MethodVisitor methodVisitor = classVisitor.visitMethod(context.currentMethodAccessFlags, context.currentMethodName, context.currentMethodDescriptor, signatureIndex == 0 ? null : this.readUtf(signatureIndex, charBuffer), exceptions);
        if (methodVisitor == null) {
            return currentOffset;
        }
        if (methodVisitor instanceof MethodWriter && (methodWriter = (MethodWriter)methodVisitor).canCopyMethodAttributes(this, synthetic, (context.currentMethodAccessFlags & 0x20000) != 0, this.readUnsignedShort(methodInfoOffset + 4), signatureIndex, exceptionsOffset)) {
            methodWriter.setMethodAttributesSource(methodInfoOffset, currentOffset - methodInfoOffset);
            return currentOffset;
        }
        if (methodParametersOffset != 0 && (context.parsingOptions & 2) == 0) {
            int parametersCount = this.readByte(methodParametersOffset);
            int currentParameterOffset = methodParametersOffset + 1;
            while (parametersCount-- > 0) {
                methodVisitor.visitParameter(this.readUTF8(currentParameterOffset, charBuffer), this.readUnsignedShort(currentParameterOffset + 2));
                currentParameterOffset += 4;
            }
        }
        if (annotationDefaultOffset != 0) {
            AnnotationVisitor annotationVisitor = methodVisitor.visitAnnotationDefault();
            this.readElementValue(annotationVisitor, annotationDefaultOffset, null, charBuffer);
            if (annotationVisitor != null) {
                annotationVisitor.visitEnd();
            }
        }
        if (runtimeVisibleAnnotationsOffset != 0) {
            int numAnnotations = this.readUnsignedShort(runtimeVisibleAnnotationsOffset);
            currentAnnotationOffset = runtimeVisibleAnnotationsOffset + 2;
            while (numAnnotations-- > 0) {
                String annotationDescriptor = this.readUTF8(currentAnnotationOffset, charBuffer);
                currentAnnotationOffset += 2;
                currentAnnotationOffset = this.readElementValues(methodVisitor.visitAnnotation(annotationDescriptor, true), currentAnnotationOffset, true, charBuffer);
            }
        }
        if (runtimeInvisibleAnnotationsOffset != 0) {
            int numAnnotations = this.readUnsignedShort(runtimeInvisibleAnnotationsOffset);
            currentAnnotationOffset = runtimeInvisibleAnnotationsOffset + 2;
            while (numAnnotations-- > 0) {
                String annotationDescriptor = this.readUTF8(currentAnnotationOffset, charBuffer);
                currentAnnotationOffset += 2;
                currentAnnotationOffset = this.readElementValues(methodVisitor.visitAnnotation(annotationDescriptor, false), currentAnnotationOffset, true, charBuffer);
            }
        }
        if (runtimeVisibleTypeAnnotationsOffset != 0) {
            int numAnnotations = this.readUnsignedShort(runtimeVisibleTypeAnnotationsOffset);
            currentAnnotationOffset = runtimeVisibleTypeAnnotationsOffset + 2;
            while (numAnnotations-- > 0) {
                currentAnnotationOffset = this.readTypeAnnotationTarget(context, currentAnnotationOffset);
                String annotationDescriptor = this.readUTF8(currentAnnotationOffset, charBuffer);
                currentAnnotationOffset += 2;
                currentAnnotationOffset = this.readElementValues(methodVisitor.visitTypeAnnotation(context.currentTypeAnnotationTarget, context.currentTypeAnnotationTargetPath, annotationDescriptor, true), currentAnnotationOffset, true, charBuffer);
            }
        }
        if (runtimeInvisibleTypeAnnotationsOffset != 0) {
            int numAnnotations = this.readUnsignedShort(runtimeInvisibleTypeAnnotationsOffset);
            currentAnnotationOffset = runtimeInvisibleTypeAnnotationsOffset + 2;
            while (numAnnotations-- > 0) {
                currentAnnotationOffset = this.readTypeAnnotationTarget(context, currentAnnotationOffset);
                String annotationDescriptor = this.readUTF8(currentAnnotationOffset, charBuffer);
                currentAnnotationOffset += 2;
                currentAnnotationOffset = this.readElementValues(methodVisitor.visitTypeAnnotation(context.currentTypeAnnotationTarget, context.currentTypeAnnotationTargetPath, annotationDescriptor, false), currentAnnotationOffset, true, charBuffer);
            }
        }
        if (runtimeVisibleParameterAnnotationsOffset != 0) {
            this.readParameterAnnotations(methodVisitor, context, runtimeVisibleParameterAnnotationsOffset, true);
        }
        if (runtimeInvisibleParameterAnnotationsOffset != 0) {
            this.readParameterAnnotations(methodVisitor, context, runtimeInvisibleParameterAnnotationsOffset, false);
        }
        while (attributes != null) {
            Attribute nextAttribute = attributes.nextAttribute;
            attributes.nextAttribute = null;
            methodVisitor.visitAttribute(attributes);
            attributes = nextAttribute;
        }
        if (codeOffset != 0) {
            methodVisitor.visitCode();
            this.readCode(methodVisitor, context, codeOffset);
        }
        methodVisitor.visitEnd();
        return currentOffset;
    }
 -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.LinkedHashMap.remove(java.lang.Object): java.lang.Object -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.hashCode(): int -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.hashCode(): int -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.hashCode(): int -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Arrays.asList(java.lang.Object[]): java.util.List -> java.util.List.size(): int -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.next(): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.next(): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getParameterTypes(): java.lang.Class[] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getReturnType(): java.lang.Class -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.next(): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getParameterTypes(): java.lang.Class[] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getReturnType(): java.lang.Class -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.next(): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getParameterTypes(): java.lang.Class[] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getReturnType(): java.lang.Class -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.next(): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.Iterator.next(): java.lang.Object -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getName(): java.lang.String -> java.util.Iterator.hasNext(): boolean -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.Class.isInstance(java.lang.Object): boolean -> java.lang.Boolean.valueOf(boolean): java.lang.Boolean -> java.util.Iterator.hasNext(): boolean -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [EXIT] -> java.util.LinkedHashMap.remove(java.lang.Object): java.lang.Object [CALL] -> java.lang.String.hashCode(): int -> java.lang.String.hashCode(): int [EXIT] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [CALL] [CALL] -> java.lang.String.hashCode(): int [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] -> java.lang.String.hashCode(): int [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] -> java.lang.String.hashCode(): int [EXIT] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.util.Arrays.asList(java.lang.Object[]): java.util.List [CALL] -> java.util.List.size(): int -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getName(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getName(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getParameterTypes(): java.lang.Class[] [CALL] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [EXIT] -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getReturnType(): java.lang.Class [CALL] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [EXIT] -> java.lang.StringBuilder.toString(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getName(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getParameterTypes(): java.lang.Class[] [CALL] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [EXIT] -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getReturnType(): java.lang.Class [CALL] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [EXIT] -> java.lang.StringBuilder.toString(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] -> java.util.List.add(java.lang.Object): boolean -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getName(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getParameterTypes(): java.lang.Class[] [CALL] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [EXIT] -> java.lang.StringBuilder.append(char): java.lang.StringBuilder -> java.lang.reflect.Method.getReturnType(): java.lang.Class [CALL] -> java.lang.Class.isArray(): boolean -> java.lang.Class.isPrimitive(): boolean -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [CALL] -> java.lang.Class.getName(): java.lang.String -> java.lang.String.replace(char,char): java.lang.String [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(char): java.lang.StringBuilder [EXIT] -> java.lang.StringBuilder.toString(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getName(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.size(): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getName(): java.lang.String [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] -> java.util.List.size(): int [CALL] -> java.util.List.size(): int -> java.util.List.size(): int [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.List.size(): int [EXIT] [CALL] [CALL] -> java.util.List.size(): int [EXIT] [CALL] [CALL] -> java.util.List.get(int): java.lang.Object [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] -> java.lang.Class.isInstance(java.lang.Object): boolean -> java.lang.Boolean.valueOf(boolean): java.lang.Boolean [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.Iterator.hasNext(): boolean [CALL] [CALL] -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] [EXIT] [CALL] -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] [EXIT] [CALL] -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.reflect.Method.getDeclaringClass(): java.lang.Class -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [CALL] [EXIT] [CALL] -> java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]): java.lang.Object [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.append(java.lang.String): java.lang.StringBuilder -> java.lang.StringBuilder.toString(): java.lang.String -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [EXIT]