// File: /workspace/github_cpp_makefile_star2_O2/johan-bjareholt[P]lua-compiler/src/convert.cc
// Function: convertThreeAd(ThreeAd&, std::ostream&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, bool)
void convertThreeAd(ThreeAd& op, std::ostream& ss, std::set<std::string>& outputSymbols, std::set<std::string>& inputSymbols, bool localScope){
	regVar(op.result);
	
	std::string lhs = op.lhs;
	std::string rhs = op.rhs;

	switch(op.op){
		case '+':
			{
            formatSymbol(rhs, inputSymbols, localScope);
            formatSymbol(lhs, inputSymbols, localScope);
            formatSymbol(op.result, outputSymbols, localScope);

			ss << pre_in << "movq " << lhs << ", %%rax" << post_in;
			ss << pre_in << "addq " << rhs << ", %%rax" << post_in;
			ss << pre_in << "movq " << "%%rax, " << op.result << post_in;
			}
			break;
		case '-':
			{
            formatSymbol(rhs, inputSymbols, localScope);
            formatSymbol(lhs, inputSymbols, localScope);
            formatSymbol(op.result, outputSymbols, localScope);

			ss << pre_in << "movq " << lhs << ", %%rax" << post_in;
			ss << pre_in << "subq " << rhs << ", %%rax" << post_in;
			ss << pre_in << "movq " << "%%rax, " << op.result << post_in;
			}
			break;
		case '*':
            {
            formatSymbol(rhs, inputSymbols, localScope);
            formatSymbol(lhs, inputSymbols, localScope);
            formatSymbol(op.result, outputSymbols, localScope);

			ss << pre_in << "movq " << rhs << ", %%rax" << post_in;
			ss << pre_in << "movq " << lhs << ", %%rbx" << post_in;
			ss << pre_in << "imulq " << "%%rbx" << ", %%rax" << post_in;
			ss << pre_in << "movq " << "%%rax" << ", " << op.result << post_in;
            }
			break;
        case '/':
            {
            formatSymbol(rhs, inputSymbols, localScope);
            formatSymbol(lhs, inputSymbols, localScope);
            formatSymbol(op.result, outputSymbols, localScope);
			
            ss << pre_in << "movq " << lhs << ", %%rax" << post_in;
            ss << pre_in << "movq " << rhs << ", %%rbx" << post_in;
			ss << pre_in << "cqto" << post_in; // Sign extend %rax to %rdx:rax
			ss << pre_in << "idivq " << "%%rbx" << post_in;
			ss << pre_in << "movq " << "%%rax" << ", " << op.result << post_in;
            }
            break;
        case '%':
            {
            formatSymbol(rhs, inputSymbols, localScope);
            formatSymbol(lhs, inputSymbols, localScope);
            formatSymbol(op.result, outputSymbols, localScope);
			
            ss << pre_in << "movq " << lhs << ", %%rax" << post_in;
            ss << pre_in << "movq " << rhs << ", %%rbx" << post_in;
			ss << pre_in << "cqto" << post_in; // Sign extend %rax to %rdx:rax
			ss << pre_in << "idivq " << "%%rbx" << post_in;
			ss << pre_in << "movq " << "%%rdx" << ", " << op.result << post_in;
            }
            break;
		case '=':
        case 'e':
        case '<':
        case '>':
			{
            formatSymbol(rhs, inputSymbols, localScope);
            formatSymbol(lhs, inputSymbols, localScope);

			ss << pre_in << "movq " << lhs << ", %%rax" << post_in;
			ss << pre_in << "movq " << rhs << ", %%rbx" << post_in;
			ss << pre_in << "cmp "  << "%%rbx, %%rax" << post_in;
			}
			break;
		// Copy
		case 'c':
            {
            if (is_string(rhs)){
                //std::cout << "test1: " << lhs << "," << rhs << std::endl;
                formatSymbol(rhs, inputSymbols, localScope);
                addVar(lhs, VT_POINTER, "");
                add_brackets(lhs);
            }
            else if (is_digits(rhs)){
                formatSymbol(lhs, inputSymbols, localScope);
                std::stringstream tempss;
                tempss << "$" << rhs;
                rhs = tempss.str();
            }
            else {
                formatSymbol(lhs, inputSymbols, localScope);
                formatSymbol(rhs, inputSymbols, localScope);
            }
            ss << pre_in << "movq " << rhs << ", " << "%%rax" << post_in;
            ss << pre_in << "movq " << "%%rax" << ", " << lhs << post_in;
            }
			break;
        // Function argument
        case 'a':
            // TODO: Support for multiple arguments
            formatSymbol(lhs, inputSymbols, localScope);
            // Push to stack
            ss << pre_in << "movq %%rdi, " << lhs << post_in;
            break;
        // Function Return
		case 'r':
            {
            formatSymbol(lhs, inputSymbols, localScope);
			ss << pre_in << "movq " << lhs << ", " << "%%rax" << post_in;
            }
			break;
		// Call function
		case 'f':
            {
            // FIXME: Ugly type check and convertion
            std::string funcname = lhs;
            if (funcname == "print" || funcname == "io_write"){
                bool is_int = false;
                if (is_digits(rhs))
                    is_int = true;
                else {
                    auto arginfo = vars2.find(rhs);
                    if (arginfo != vars2.end()){
                        if ((*arginfo).second.first == VT_INT)
                            is_int = true;
                        else if ((*arginfo).second.first == VT_UNKNOWN)
                            is_int = true;
                    }
                }
                
                if (is_int){
                    if (lhs == "print")
                        funcname = "print_i";
                    else
                        funcname = "io_write_i";
                }
            }

            formatSymbol(op.result, outputSymbols, localScope);
            formatSymbol(rhs, inputSymbols, localScope);

            // Set arguments
            // FIXME: Only supports one argument :(
            ss << pre_in << "movq " << rhs << ", %%rdi" << post_in;
           
            // Call
            ss << pre_in << "call " << funcname << post_in;
            // Move return 
            ss << pre_in << "movq " << "%%rax, " << op.result << post_in;
            }
			break;
        default:
            std::cout << "Unknown 3ac: " << op.op << std::endl;
            exit(-1);
	 }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x258, %rsp            # imm = 0x258
movl %r8d, %r14d
movq %rcx, %r12
movq %rdx, -0x38(%rbp)
movq %rsi, -0x30(%rbp)
movq %rdi, %rbx
leaq 0x8(%rdi), %rsi
leaq -0xd8(%rbp), %r15
movq %r15, %rdi
movq %rsi, %r13
callq 0x32f0
movq %r15, %rdi
callq 0xa242
leaq -0xd8(%rbp), %rdi
callq 0x3448
leaq 0x28(%rbx), %rsi
leaq -0x78(%rbp), %r15
movq %r15, %rdi
callq 0x32f0
leaq 0x48(%rbx), %rsi
leaq -0x58(%rbp), %rdi
callq 0x32f0
movzbl (%rbx), %eax
leal -0x25(%rax), %ecx
cmpl $0xa, %ecx
jbe 0x934b
leal -0x61(%rax), %ecx
cmpl $0x5, %ecx
ja 0x94b1
leaq 0x8fda(%rip), %rax      # 0x122f0
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movzbl %r14b, %edx
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
callq 0x9f11
leaq 0x1302a(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x935b(%rip), %rbx      # 0x126a1
jmp 0x9d42
leaq 0x8f72(%rip), %rax      # 0x122c4
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movzbl %r14b, %ebx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
movq %r13, %rdi
movq -0x38(%rbp), %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12fd0(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x92b4(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x92de(%rip), %rsi      # 0x12699
movq %rax, %rdi
callq 0x31f0
leaq 0x12fb6(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12f87(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x926b(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x926a(%rip), %rsi      # 0x1266e
movq %rax, %rdi
callq 0x31f0
leaq 0x12f6d(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12f3e(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x924b(%rip), %rsi      # 0x1267d
movq %rax, %rdi
callq 0x31f0
leaq 0x12f3f(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12f10(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x9222(%rip), %rsi      # 0x12682
movq %rax, %rdi
callq 0x31f0
leaq 0x9201(%rip), %rsi      # 0x12670
movq %rax, %rdi
callq 0x31f0
leaq 0x12f02(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12ed3(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x91b7(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq 0x91dd(%rip), %rsi      # 0x12689
jmp 0x98db
leal -0x3c(%rax), %ecx
cmpl $0x3, %ecx
jae 0x9597
movzbl %r14b, %ebx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12e7c(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x9160(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x918a(%rip), %rsi      # 0x12699
movq %rax, %rdi
callq 0x31f0
leaq 0x12e62(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12e33(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x9117(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x9116(%rip), %rsi      # 0x1266e
movq %rax, %rdi
callq 0x31f0
leaq 0x12e19(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12dea(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x9109(%rip), %rsi      # 0x1268f
movq %rax, %rdi
callq 0x31f0
leaq 0x90ff(%rip), %rsi      # 0x12694
jmp 0x95f1
cmpl $0x72, %eax
jne 0x9d8e
movzbl %r14b, %edx
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
callq 0x9f11
leaq 0x12da9(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x908d(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x90c9(%rip), %rsi      # 0x126ab
movq %rax, %rdi
callq 0x31f0
leaq 0x90aa(%rip), %rsi      # 0x1269b
movq %rax, %rdi
callq 0x31f0
jmp 0x9d5b
movzbl %r14b, %ebx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
movq %r13, %rdi
movq -0x38(%rbp), %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12d2d(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x9011(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x903b(%rip), %rsi      # 0x12699
movq %rax, %rdi
callq 0x31f0
leaq 0x12d13(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12ce4(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8fc8(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x8fc7(%rip), %rsi      # 0x1266e
movq %rax, %rdi
callq 0x31f0
leaq 0x12cca(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12c9b(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8fa8(%rip), %rsi      # 0x1267d
movq %rax, %rdi
callq 0x31f0
leaq 0x12c9c(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12c6d(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8f7f(%rip), %rsi      # 0x12682
movq %rax, %rdi
callq 0x31f0
leaq 0x8f5e(%rip), %r14      # 0x12670
jmp 0x989b
movzbl %r14b, %ebx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
movq %r13, %rdi
movq -0x38(%rbp), %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12c14(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8ef8(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x8f22(%rip), %rsi      # 0x12699
movq %rax, %rdi
callq 0x31f0
leaq 0x12bfa(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12bcb(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8eb5(%rip), %rsi      # 0x1265a
jmp 0x997d
movzbl %r14b, %ebx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
movq %r13, %rdi
movq -0x38(%rbp), %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12b81(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8e65(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x8e8f(%rip), %r14      # 0x12699
movq %rax, %rdi
movq %r14, %rsi
callq 0x31f0
leaq 0x12b64(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12b35(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8e19(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x8e18(%rip), %rsi      # 0x1266e
movq %rax, %rdi
callq 0x31f0
leaq 0x12b1b(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12aec(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8df2(%rip), %rsi      # 0x12676
movq %rax, %rdi
callq 0x31f0
leaq 0x8ddd(%rip), %rsi      # 0x12670
movq %rax, %rdi
callq 0x31f0
movq %rax, %rdi
movq %r14, %rsi
callq 0x31f0
leaq 0x12ad3(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12aa4(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8d88(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq 0x8dc0(%rip), %rsi      # 0x1269b
movq %rax, %rdi
callq 0x31f0
leaq 0x8dc1(%rip), %rsi      # 0x126ab
jmp 0x99d5
movzbl %r14b, %ebx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
movq %r13, %rdi
movq -0x38(%rbp), %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12a3c(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8d20(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x78(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x8d4a(%rip), %rsi      # 0x12699
movq %rax, %rdi
callq 0x31f0
leaq 0x12a22(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x129f3(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8ceb(%rip), %rsi      # 0x12668
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x8d01(%rip), %rsi      # 0x12699
movq %rax, %rdi
callq 0x31f0
leaq 0x129d9(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x129aa(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8c8e(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq 0x8c8b(%rip), %rsi      # 0x12660
movq %rax, %rdi
callq 0x31f0
jmp 0x9d50
movq -0x58(%rbp), %rax
cmpb $0x22, (%rax)
jne 0x9c15
movq -0x50(%rbp), %rcx
cmpb $0x22, -0x1(%rax,%rcx)
jne 0x9c15
movzbl %r14b, %edx
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
callq 0x9f11
leaq -0xb8(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x32f0
leaq 0x88f1(%rip), %rsi      # 0x12316
leaq -0x98(%rbp), %rdi
leaq -0x280(%rbp), %rdx
callq 0x30d0
leaq -0xb8(%rbp), %rdi
pushq $0x2
popq %rsi
leaq -0x98(%rbp), %rdx
callq 0x8184
leaq -0x98(%rbp), %rdi
callq 0x3448
leaq -0xb8(%rbp), %rdi
callq 0x3448
leaq -0x78(%rbp), %rdi
callq 0x9e6f
jmp 0x9cb9
leaq -0x280(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x32f0
leaq 0x8c23(%rip), %rsi      # 0x126ae
leaq -0x280(%rbp), %rdi
callq 0x6ae1
testb %al, %al
jne 0x9ab2
leaq 0x8c12(%rip), %rsi      # 0x126b4
leaq -0x280(%rbp), %rdi
callq 0x6ae1
testb %al, %al
je 0x9b16
leaq -0x58(%rbp), %rdi
callq 0x9e33
testb %al, %al
jne 0x9ae6
leaq 0x128da(%rip), %rdi     # 0x1c3a0
leaq -0x58(%rbp), %rsi
callq 0xaa58
leaq 0x128d2(%rip), %rcx     # 0x1c3a8
cmpq %rcx, %rax
je 0x9b16
movl 0x40(%rax), %eax
orl $0x4, %eax
cmpl $0x5, %eax
jne 0x9b16
leaq 0x8bc1(%rip), %rsi      # 0x126ae
leaq -0x78(%rbp), %rdi
callq 0x6ae1
leaq 0x8bc0(%rip), %rcx      # 0x126bd
leaq 0x8bc1(%rip), %rsi      # 0x126c5
testb %al, %al
cmovneq %rcx, %rsi
leaq -0x280(%rbp), %rdi
callq 0x3410
movzbl %r14b, %ebx
movq %r13, %rdi
movq -0x38(%rbp), %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x12823(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8b07(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x895f(%rip), %rsi      # 0x124c7
movq %rax, %rdi
callq 0x31f0
leaq 0x12809(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x127da(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8b3a(%rip), %rsi      # 0x126d0
movq %rax, %rdi
callq 0x31f0
leaq -0x280(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x127cc(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x1279d(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8a81(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq 0x8a7e(%rip), %rsi      # 0x12660
movq %rax, %rdi
callq 0x31f0
movq %rax, %rdi
movq %r13, %rsi
callq 0x31d0
leaq 0x12784(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq -0x280(%rbp), %rdi
callq 0x3448
jmp 0x9d6a
leaq -0x58(%rbp), %rdi
callq 0x9e33
testb %al, %al
je 0x9c99
movzbl %r14b, %edx
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
callq 0x9f11
leaq -0x280(%rbp), %rdi
callq 0x3180
leaq -0x270(%rbp), %rdi
leaq 0x89f9(%rip), %rsi      # 0x12645
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq -0x268(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x3380
leaq -0x58(%rbp), %rdi
leaq -0xf8(%rbp), %rbx
movq %rbx, %rsi
callq 0x32b0
movq %rbx, %rdi
callq 0x3448
leaq -0x280(%rbp), %rdi
callq 0x3190
jmp 0x9cb9
movzbl %r14b, %ebx
leaq -0x78(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq -0x58(%rbp), %rdi
movq %r12, %rsi
movl %ebx, %edx
callq 0x9f11
leaq 0x126a0(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8984(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq -0x58(%rbp), %rsi
movq %rax, %rdi
callq 0x31d0
leaq 0x89c0(%rip), %rbx      # 0x126ab
movq %rax, %rdi
movq %rbx, %rsi
callq 0x31f0
leaq 0x899e(%rip), %rsi      # 0x1269b
movq %rax, %rdi
callq 0x31f0
leaq 0x12674(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq 0x12645(%rip), %rsi     # 0x1c360
movq -0x30(%rbp), %rdi
callq 0x31d0
leaq 0x8929(%rip), %rsi      # 0x12654
movq %rax, %rdi
callq 0x31f0
leaq 0x8961(%rip), %rsi      # 0x1269b
movq %rax, %rdi
callq 0x31f0
movq %rax, %rdi
movq %rbx, %rsi
callq 0x31f0
movq %r15, %r13
movq %rax, %rdi
movq %r13, %rsi
callq 0x31d0
leaq 0x1261e(%rip), %rsi     # 0x1c380
movq %rax, %rdi
callq 0x31d0
leaq -0x58(%rbp), %rdi
callq 0x3448
leaq -0x78(%rbp), %rdi
callq 0x3448
addq $0x258, %rsp            # imm = 0x258
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x12233(%rip), %rdi     # 0x1bfc8
leaq 0x893a(%rip), %rsi      # 0x126d6
callq 0x31f0
movsbl (%rbx), %esi
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3100
pushq $-0x1
popq %rdi
callq 0x32a0
movq %rax, %rbx
leaq -0x98(%rbp), %rdi
callq 0x3448
jmp 0x9dd0
movq %rax, %rbx
leaq -0xb8(%rbp), %rdi
jmp 0x9e0f
jmp 0x9ddf
jmp 0x9e05
jmp 0x9e16
movq %rax, %rbx
leaq -0x280(%rbp), %rdi
callq 0x3190
jmp 0x9e19
jmp 0x9e16
jmp 0x9e05
movq %rax, %rbx
jmp 0x9e22
movq %rax, %rbx
leaq -0xd8(%rbp), %rdi
jmp 0x9e26
movq %rax, %rbx
leaq -0x280(%rbp), %rdi
callq 0x3448
jmp 0x9e19
movq %rax, %rbx
leaq -0x58(%rbp), %rdi
callq 0x3448
leaq -0x78(%rbp), %rdi
callq 0x3448
movq %rbx, %rdi
callq 0x33f0