// File: /workspace/github_cpp_makefile_star2_O1/AndrewAlbert[P]Compiler-Theory/SourceCode/codeGenerator.cpp
// Function: codeGenerator::evalExpr(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, int, int, int)
string codeGenerator::evalExpr( string op, int size_left, int size_right, int type_left, int type_right ){
	if( !ShouldGenerate() ) return "";
	string lhs, rhs, result;
	int i, type_result;
	bool checkBool = false;
	// Ensure sizes are at least 1 so that loops will execute for scalars
	if( size_left == 0 ) size_left++;
	if( size_right == 0 ) size_right++;
	
	/* Invalidate OUT/INOUT arguments since an expresion such as <Name> * 2 has occurred
	 * there is no return value now and so there is no location to put an OUT argument */
	if( checkArguments() ) invalidateArgument();
	
	//Select int registers or float registers to put the result in
	if( type_left != type_right ){
		if( ( type_left == TYPE_FLOAT ) || ( type_right == TYPE_FLOAT ) ){ 
			type_result = TYPE_FLOAT;
		}
		else if( ( type_left == TYPE_BOOL ) || ( type_right == TYPE_BOOL ) ){
			type_result = TYPE_BOOL;
			if( (type_left == TYPE_INTEGER ) || (type_right == TYPE_INTEGER) ) checkBool = true;
		}
		else type_result = TYPE_INTEGER;
	}
	else type_result = type_left;

	// Convert operations for bitwise or boolean comparison to the correct C operator
	if(op.compare("&") == 0){ 
		if( (type_left == TYPE_BOOL) || (type_right == TYPE_BOOL) ){
			op = "&&";
			// add runtime check for integer/bool
		}
		else op = "&";
	}
	else if(op.compare("|") == 0){ 
		if( (type_left == TYPE_BOOL) || (type_right == TYPE_BOOL) ){
			op = "||";
			// add runtime check for integer/bool
		}
		else op = "|";
	}
	else if(op.compare("NOT") == 0){
		if( (type_left == TYPE_BOOL) || (type_right == TYPE_BOOL) ){
			op = "!";
			// add runtime check for integer/bool
		}
		else op = "~";
	}

	// Push the LHS and RHS operands to their respective stacks and then result to exprStack
	if( ( size_left > 1 ) && ( size_right > 1) ){
		// If LHS and RHS are both arrays ( same size checked by parser )
		for( i = 0; i < size_right; i++ ){
			rhs = popStack('E', type_right);
			pushStack(rhs, 'R', type_right);
		}
		for( i = 0; i < size_left; i++ ){
			lhs = popStack('E', type_left);
			pushStack(lhs, 'L', type_left);
		}
		for( i = 0; i < size_left; i++ ){
			rhs = popStack('R', type_right);
			lhs = popStack('L', type_left);
			result = newRegister(type_result);
			pushStack( result, 'E', type_result );
			if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
			fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
		}
	}
	else if( size_left > 1 ){
		// If LHS is an array and RHS is a single value
		rhs = popStack('E', type_right);
		for( i = 0; i < size_left; i++ ){
			lhs = popStack('E', type_left);
			pushStack(lhs, 'L', type_left);
		}
		for( i = 0; i < size_left; i++ ){
			lhs = popStack('L', type_left);
			result = newRegister(type_result);
			pushStack( result, 'E', type_result );
			if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
			fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
		}
	}
	else if( size_right > 1 ){
		// If LHS is a single value and RHS is an array
		for( i = 0; i < size_right; i++ ){
			rhs = popStack('R', type_right);
			pushStack(rhs, 'R', type_right);
		}
		lhs = popStack('E', type_left);
		for( i = 0; i < size_right; i++ ){
			rhs = popStack('R', type_right);
			result = newRegister(type_result);
			pushStack( result, 'E', type_result );
			if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
			fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
		}
	}
	else{
		// If LHS and RHS are both single values
		rhs = popStack('E', type_right);
		lhs = popStack('E', type_left);
		result = newRegister(type_result);
		pushStack( result, 'E', type_result );
		if(checkBool) fprintf( oFile, "   handleBoolOp( %s, %s );\n", lhs.c_str(), rhs.c_str() );
		fprintf( oFile, "   %s = %s %s %s;\n", result.c_str(), lhs.c_str(), op.c_str(), rhs.c_str() );
	}
	return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movl %r9d, 0x30(%rsp)
movq %rdi, %rbx
cmpb $0x0, 0x330(%rsi)
je 0x11f69
movl %r8d, %r13d
movl %ecx, %r12d
movq %rdx, %r14
movq %rsi, %r15
movl 0x1d0(%rsp), %esi
leaq 0x80(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x60(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x10(%rbx), %rbp
movq %rbp, (%rbx)
movq %rax, 0x8(%rbx)
movq %rbx, 0x40(%rsp)
movb %al, 0x10(%rbx)
cmpl $0x1, %r12d
adcl $0x0, %r12d
cmpl $0x1, %r8d
adcl $0x0, %r13d
cmpb $0x1, 0x2b6(%r15)
jne 0x11f53
cmpb $0x0, 0x2b7(%r15)
jne 0x11f53
movb $0x1, 0x2b7(%r15)
movl 0x30(%rsp), %edx
cmpl %esi, %edx
jne 0x11f87
movl $0x0, 0xc(%rsp)
movl %edx, 0x8(%rsp)
jmp 0x11fe4
leaq 0x10(%rbx), %rax
movq %rax, (%rbx)
leaq 0x89e6(%rip), %rdx      # 0x1a95d
movq %rbx, %rdi
movq %rdx, %rsi
callq 0x3c34
jmp 0x12ab0
movl $0x10b, %ecx            # imm = 0x10B
cmpl %ecx, %edx
sete %al
movl $0x10b, 0x8(%rsp)       # imm = 0x10B
cmpl %ecx, %esi
sete %cl
orb %al, %cl
jne 0x11fdc
movl $0x10c, %ecx            # imm = 0x10C
cmpl %ecx, %edx
setne %al
movl $0x10c, 0x8(%rsp)       # imm = 0x10C
cmpl %ecx, %esi
setne %cl
testb %cl, %al
jne 0x11fd4
movl $0x10a, %eax            # imm = 0x10A
cmpl %eax, %edx
sete %cl
cmpl %eax, %esi
sete %al
orb %cl, %al
movl %eax, 0xc(%rsp)
jmp 0x11fe4
movl $0x10a, 0x8(%rsp)       # imm = 0x10A
movl $0x0, 0xc(%rsp)
leaq 0x8e06(%rip), %rbx      # 0x1adf1
movq %r14, %rdi
movq %rbx, %rsi
callq 0x20a0
testl %eax, %eax
je 0x12055
leaq 0x8df3(%rip), %rbx      # 0x1adf4
movq %r14, %rdi
movq %rbx, %rsi
callq 0x20a0
testl %eax, %eax
je 0x12076
leaq 0x70dd(%rip), %rsi      # 0x190f4
movq %r14, %rdi
callq 0x20a0
testl %eax, %eax
jne 0x120b1
movl $0x10c, %eax            # imm = 0x10C
cmpl %eax, 0x1d0(%rsp)
leaq 0x8952(%rip), %rcx      # 0x1a98c
leaq 0x8db5(%rip), %rbx      # 0x1adf6
cmoveq %rcx, %rbx
cmpl %eax, 0x30(%rsp)
cmoveq %rcx, %rbx
movl $0x1, %r8d
jmp 0x120a0
movl $0x10c, %eax            # imm = 0x10C
cmpl %eax, 0x30(%rsp)
sete %cl
cmpl %eax, 0x1d0(%rsp)
sete %al
orb %cl, %al
leaq 0x8d7c(%rip), %rcx      # 0x1adf0
jmp 0x12095
movl $0x10c, %eax            # imm = 0x10C
cmpl %eax, 0x30(%rsp)
sete %cl
cmpl %eax, 0x1d0(%rsp)
sete %al
orb %cl, %al
leaq 0x8d5e(%rip), %rcx      # 0x1adf3
cmovneq %rcx, %rbx
movzbl %al, %r8d
incq %r8
movq 0x8(%r14), %rdx
movq %r14, %rdi
xorl %esi, %esi
movq %rbx, %rcx
callq 0x22e0
cmpl $0x2, %r12d
setl %al
cmpl $0x2, %r13d
setl %cl
orb %al, %cl
jne 0x123ee
movq %r14, 0x90(%rsp)
movq %rbp, 0x48(%rsp)
leaq 0x188(%rsp), %rbp
leaq 0x180(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbx
leaq 0x178(%rsp), %r14
movq %rbx, %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11b40
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x12135
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, 0x178(%rsp)
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x12169
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x176d0
movq 0x178(%rsp), %rdi
cmpq %rbp, %rdi
je 0x12186
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x2200
decl %r13d
jne 0x120f5
leaq 0x168(%rsp), %r14
leaq 0x1d0(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbx
leaq 0x158(%rsp), %rbp
movl %r12d, %r13d
movq %rbx, %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11b40
leaq 0x70(%rsp), %rdi
movq %rbx, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x121f0
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r14, 0x158(%rsp)
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x12224
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0x176d0
movq 0x158(%rsp), %rdi
cmpq %r14, %rdi
je 0x12241
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x2200
decl %r13d
jne 0x121b3
leaq 0x148(%rsp), %rbx
leaq 0x130(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbp
leaq 0x138(%rsp), %r14
movq 0x40(%rsp), %r13
movq %rbp, %rdi
movq %r15, %rsi
movl $0x52, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11b40
leaq 0x50(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x122b0
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, %rdi
movq %r15, %rsi
movl $0x4c, %edx
movl 0x30(%rsp), %ecx
callq 0x11b40
leaq 0x70(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x122ed
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12c8c
movq %r13, %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x12323
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, 0x138(%rsp)
movq (%r13), %rsi
movq 0x8(%r13), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x1236f
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x176d0
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x12368
incl 0x124(%r15)
jmp 0x1236f
incl 0x120(%r15)
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1238c
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
je 0x123b2
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x8a4d(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq (%r13), %rdx
movq 0x70(%rsp), %rcx
movq 0x90(%rsp), %rax
movq (%rax), %r8
movq 0x50(%rsp), %r9
leaq 0x8a3b(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
decl %r12d
jne 0x12270
jmp 0x12a6d
cmpl $0x2, %r12d
jl 0x12668
movq %r14, 0x90(%rsp)
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x1d0(%rsp), %ecx
movq %rbp, 0x48(%rsp)
callq 0x11b40
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %r14
movq %r14, %rsi
callq 0x2270
movq (%r14), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1244a
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x128(%rsp), %r14
leaq 0x1d0(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbp
leaq 0x118(%rsp), %r13
movl %r12d, %ebx
movq %rbp, %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11b40
leaq 0x70(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x124ab
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r14, 0x118(%rsp)
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x124df
movq 0x38(%rsp), %rdi
movq %r13, %rsi
callq 0x176d0
movq 0x118(%rsp), %rdi
cmpq %r14, %rdi
je 0x124fc
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x2200
decl %ebx
jne 0x1246e
leaq 0x108(%rsp), %r13
leaq 0x130(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %rbp
leaq 0xf8(%rsp), %r14
leaq 0x20(%rsp), %rbx
movq %rbp, %rdi
movq %r15, %rsi
movl $0x4c, %edx
movl 0x30(%rsp), %ecx
callq 0x11b40
leaq 0x70(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12562
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbp, %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12c8c
movq 0x40(%rsp), %rdi
movq %rbp, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12595
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r13, 0xf8(%rsp)
movq 0x40(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x125e5
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x176d0
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x125de
incl 0x124(%r15)
jmp 0x125e5
incl 0x120(%r15)
movq 0xf8(%rsp), %rdi
cmpq %r13, %rdi
je 0x12602
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
je 0x12628
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x87d7(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq 0x40(%rsp), %rax
movq (%rax), %rdx
movq 0x70(%rsp), %rcx
movq 0x90(%rsp), %rax
movq (%rax), %r8
movq 0x50(%rsp), %r9
leaq 0x87c1(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
decl %r12d
jne 0x1252a
jmp 0x12a6d
cmpl $0x2, %r13d
jl 0x128e2
movq %r14, 0x90(%rsp)
movq %rbp, 0x48(%rsp)
leaq 0xe8(%rsp), %rbx
leaq 0x180(%r15), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %r12
leaq 0xd8(%rsp), %rbp
movl %r13d, %r14d
movq %r12, %rdi
movq %r15, %rsi
movl $0x52, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11b40
leaq 0x50(%rsp), %rdi
movq %r12, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x126e3
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, 0xd8(%rsp)
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x12717
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0x176d0
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12734
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x2200
decl %r14d
jne 0x126a3
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11b40
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %r12
movq %r12, %rsi
callq 0x2270
movq (%r12), %rdi
leaq 0x20(%rsp), %rbx
cmpq %rbx, %rdi
je 0x12780
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0xc8(%rsp), %r12
leaq 0x130(%r15), %rax
movq %rax, 0x30(%rsp)
leaq 0x10(%rsp), %r14
leaq 0xb8(%rsp), %rbp
movq %r14, %rdi
movq %r15, %rsi
movl $0x52, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11b40
leaq 0x50(%rsp), %rdi
movq %r14, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x127dc
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r14, %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12c8c
movq 0x40(%rsp), %rdi
movq %r14, %rsi
callq 0x2270
movq 0x10(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1280f
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r12, 0xb8(%rsp)
movq 0x40(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x1285f
movq 0x30(%rsp), %rdi
movq %rbp, %rsi
callq 0x176d0
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x12858
incl 0x124(%r15)
jmp 0x1285f
incl 0x120(%r15)
movq 0xb8(%rsp), %rdi
cmpq %r12, %rdi
je 0x1287c
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
je 0x128a2
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x855d(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq 0x40(%rsp), %rax
movq (%rax), %rdx
movq 0x70(%rsp), %rcx
movq 0x90(%rsp), %rax
movq (%rax), %r8
movq 0x50(%rsp), %r9
leaq 0x8547(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
decl %r13d
jne 0x127a1
jmp 0x12a6d
movq %r14, %r13
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x1d0(%rsp), %ecx
callq 0x11b40
leaq 0x50(%rsp), %rdi
leaq 0x10(%rsp), %rbx
movq %rbx, %rsi
callq 0x2270
movq (%rbx), %rdi
leaq 0x20(%rsp), %r14
cmpq %r14, %rdi
movq 0x40(%rsp), %r12
je 0x1292f
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl $0x45, %edx
movl 0x30(%rsp), %ecx
callq 0x11b40
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %rbx
movq %rbx, %rsi
callq 0x2270
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x1296c
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
movl 0x8(%rsp), %edx
callq 0x12c8c
leaq 0x10(%rsp), %rbx
movq %r12, %rdi
movq %rbx, %rsi
callq 0x2270
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x129a2
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x2200
leaq 0xa8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%r12), %rsi
movq 0x8(%r12), %rdx
addq %rsi, %rdx
leaq 0x98(%rsp), %rdi
callq 0x3ba4
cmpb $0x1, 0x330(%r15)
jne 0x129ff
leaq 0x130(%r15), %rdi
leaq 0x98(%rsp), %rsi
callq 0x176d0
cmpl $0x10b, 0x8(%rsp)       # imm = 0x10B
jne 0x129f8
incl 0x124(%r15)
jmp 0x129ff
incl 0x120(%r15)
movq 0x98(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12a1c
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x2200
cmpb $0x0, 0xc(%rsp)
movq 0x40(%rsp), %rbx
je 0x12a47
movq 0x308(%r15), %rdi
movq 0x70(%rsp), %rdx
movq 0x50(%rsp), %rcx
leaq 0x83b8(%rip), %rsi      # 0x1adf8
xorl %eax, %eax
callq 0x22a0
movq 0x308(%r15), %rdi
movq (%rbx), %rdx
movq 0x70(%rsp), %rcx
movq (%r13), %r8
movq 0x50(%rsp), %r9
leaq 0x83ae(%rip), %rsi      # 0x1ae14
xorl %eax, %eax
callq 0x22a0
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x12a89
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
movq 0x40(%rsp), %rbx
je 0x12ab0
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x2200
movq %rbx, %rax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rbp, 0x48(%rsp)
movq %rax, %r15
movq 0x98(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12c09
movq 0xa8(%rsp), %rsi
jmp 0x12bee
jmp 0x12c06
jmp 0x12afb
jmp 0x12afb
jmp 0x12afb
jmp 0x12c06
movq %rbp, 0x48(%rsp)
jmp 0x12c06
movq %rax, %r15
movq 0xb8(%rsp), %rdi
cmpq %r12, %rdi
je 0x12c09
movq 0xc8(%rsp), %rsi
jmp 0x12bee
movq %rax, %r15
movq 0xd8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12c09
movq 0xe8(%rsp), %rsi
jmp 0x12bee
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
movq %rax, %r15
movq 0xf8(%rsp), %rdi
cmpq %r13, %rdi
je 0x12c09
movq 0x108(%rsp), %rsi
jmp 0x12bee
jmp 0x12c06
jmp 0x12c06
movq %rax, %r15
movq 0x118(%rsp), %rdi
cmpq %r14, %rdi
je 0x12c09
movq 0x128(%rsp), %rsi
jmp 0x12bee
movq %rax, %r15
movq 0x138(%rsp), %rdi
cmpq %rbx, %rdi
je 0x12c09
movq 0x148(%rsp), %rsi
jmp 0x12bee
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
movq %rax, %r15
movq 0x158(%rsp), %rdi
cmpq %r14, %rdi
je 0x12c09
movq 0x168(%rsp), %rsi
jmp 0x12bee
jmp 0x12c06
jmp 0x12c06
movq %rax, %r15
movq 0x178(%rsp), %rdi
cmpq %rbp, %rdi
je 0x12c09
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x2200
jmp 0x12c09
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
jmp 0x12c06
movq %rax, %r15
movq 0x40(%rsp), %rax
movq (%rax), %rdi
movq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x12c26
movq (%rax), %rsi
incq %rsi
callq 0x2200
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x12c42
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x2200
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x12c64
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x2200
movq %r15, %rdi
callq 0x2330