// File: /workspace/github_cpp_makefile_star2_O2/CobaltXII[P]cxcc/./compiler/compiler.hpp
// Function: compiler_t::compile_expression(expression_t*, symbol_table_t&)
void compile_expression(expression_t* expression, symbol_table_t& symbols) {
		if (expression->type == et_integer_literal) {
			emit("    movq    $%s, %%rax\n", expression->integer_literal.c_str());
		} else if (expression->type == et_string_literal) {
			emit("    leaq    S%ld(%%rip), %%rax\n", expression->string_label);
		} else if (expression->type == et_character_literal) {
			emit("    movq    $%u, %%rax\n", expression->character_literal[0]);
		} else if (expression->type == et_identifier) {
			emit("    movq    %ld(%%rbp), %%rax\n", symbols.fetch(expression->identifier).offset);
		} else if (expression->type == et_function_call) {
			function_call_expression_t expr = expression->function_call;
			if (expr.function == "sizeof") {
				compile_expression(expr.arguments[0], symbols);
				if (expr.arguments[0]->type == et_string_literal) {
					emit("    movq    $%lu, %%rax\n", expr.arguments[0]->string_literal.size() * 8 + 8);
				} else {
					emit("    movq    $8, %%rax\n");
				}
			} else {
				const char* registers[6] = {"%rdi", "%rsi", "%rdx", "%rcx", "%r8", "%r9"};
				if (expr.arguments.size() <= 6) {
					for (int i = 0; i < expr.arguments.size(); i++) {
						compile_expression(expr.arguments[i], symbols);
						emit("    pushq   %%rax\n");
					}
					for (int i = 0; i < expr.arguments.size(); i++) {
						emit("    popq    %s\n", registers[expr.arguments.size() - 1 - i]);
					}
					#ifdef __APPLE__
					emit("    callq   _%s\n", expr.function.c_str());
					#else
					emit("    callq   %s\n", expr.function.c_str());
					#endif
				} else {
					for (int i = 0; i < 6; i++) {
						compile_expression(expr.arguments[0], symbols);
						emit("    pushq   %%rax\n");
					}
					for (int i = 0; i < 6; i++) {
						emit("    popq    %s\n", registers[5 - i]);
						expr.arguments.erase(expr.arguments.begin());
					}
					for (int i = expr.arguments.size() - 1; i >= 0; i--) {
						compile_expression(expr.arguments[i], symbols);
						emit("    pushq   %%rax\n");
					}
					#ifdef __APPLE__
					emit("    callq   _%s\n", expr.function.c_str());
					#else
					emit("    callq   %s\n", expr.function.c_str());
					#endif
					emit("    addq    $%ld, %%rsp\n", expr.arguments.size() * 8);
				}
			}
		} else if (expression->type == et_binary) {
			binary_expression_t expr = expression->binary;
			if (expr.binary_operator == bi_addition) {
				if (expr.left_operand->return_type.pointer_depth > 0 ||
					expr.right_operand->return_type.pointer_depth > 0)
				{
					compile_expression(expr.left_operand, symbols);
					if (expr.left_operand->return_type.pointer_depth == 0) {
						emit("    salq    $3, %%rax\n");
					}
					emit("    pushq   %%rax\n");
					compile_expression(expr.right_operand, symbols);
					if (expr.right_operand->return_type.pointer_depth == 0) {
						emit("    salq    $3, %%rax\n");
					}
					emit("    popq    %%rcx\n");
					emit("    addq    %%rcx, %%rax\n");
				} else {
					compile_expression(expr.left_operand, symbols);
					emit("    pushq   %%rax\n");
					compile_expression(expr.right_operand, symbols);
					emit("    popq    %%rcx\n");
					emit("    addq    %%rcx, %%rax\n");
				}
			} else if (expr.binary_operator == bi_subtraction) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    subq    %%rcx, %%rax\n");
			} else if (expr.binary_operator == bi_multiplication) {
				compile_expression(expr.left_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.right_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    imulq   %%rcx, %%rax\n");
			} else if (expr.binary_operator == bi_division) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cqto\n");
				emit("    idivq   %%rcx\n");
			} else if (expr.binary_operator == bi_modulo) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cqto\n");
				emit("    idivq   %%rcx\n");
				emit("    movq    %%rdx, %%rax\n");
			} else if (expr.binary_operator == bi_assignment) {
				if (expr.left_operand->type == et_identifier) {
					compile_expression(expr.right_operand, symbols);
					emit("    movq    %%rax, %ld(%%rbp)\n", symbols.fetch(expr.left_operand->identifier).offset);
				} else {
					compile_expression(expr.right_operand, symbols);
					emit("    pushq   %%rax\n");
					compile_expression(expr.left_operand->unary.operand, symbols);
					emit("    popq    %%rcx\n");
					emit("    movq    %%rcx, (%%rax)\n");
					emit("    movq    (%%rax), %%rax\n");
				}
			} else if (expr.binary_operator == bi_logical_and) {
				long l0 = label++;
				long l1 = label++;
				compile_expression(expr.left_operand, symbols);
				emit("    cmpq    $0, %%rax\n");
				emit("    jne     L%ld\n", l0);
				emit("    jmp     L%ld\n", l1);
				emit("L%ld:\n", l0);
				compile_expression(expr.right_operand, symbols);
				emit("    cmpq    $0, %%rax\n");
				emit("    movq    $0, %%rax\n");
				emit("    setne   %%al\n");
				emit("L%ld:\n", l1);
			} else if (expr.binary_operator == bi_logical_or) {
				long l0 = label++;
				long l1 = label++;
				compile_expression(expr.left_operand, symbols);
				emit("    cmpq    $0, %%rax\n");
				emit("    je      L%ld\n", l0);
				emit("    movq    $1, %%rax\n");
				emit("    jmp     L%ld\n", l1);
				emit("L%ld:\n", l0);
				compile_expression(expr.right_operand, symbols);
				emit("    cmpq    $0, %%rax\n");
				emit("    movq    $0, %%rax\n");
				emit("    setne   %%al\n");
				emit("L%ld:\n", l1);
			} else if (expr.binary_operator == bi_relational_equal) {
				compile_expression(expr.left_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.right_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cmpq    %%rcx, %%rax\n");
				emit("    sete    %%al\n");
				emit("    movzbq  %%al, %%rax\n");
			} else if (expr.binary_operator == bi_relational_non_equal) {
				compile_expression(expr.left_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.right_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cmpq    %%rcx, %%rax\n");
				emit("    setne   %%al\n");
				emit("    movzbq  %%al, %%rax\n");
			} else if (expr.binary_operator == bi_relational_greater_than) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cmpq    %%rcx, %%rax\n");
				emit("    setg    %%al\n");
				emit("    movzbq  %%al, %%rax\n");
			} else if (expr.binary_operator == bi_relational_lesser_than) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cmpq    %%rcx, %%rax\n");
				emit("    setl    %%al\n");
				emit("    movzbq  %%al, %%rax\n");
			} else if (expr.binary_operator == bi_relational_greater_than_or_equal_to) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cmpq    %%rcx, %%rax\n");
				emit("    setge   %%al\n");
				emit("    movzbq  %%al, %%rax\n");
			} else if (expr.binary_operator == bi_relational_lesser_than_or_equal_to) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    cmpq    %%rcx, %%rax\n");
				emit("    setle   %%al\n");
				emit("    movzbq  %%al, %%rax\n");
			} else if (expr.binary_operator == bi_binary_and) {
				compile_expression(expr.left_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.right_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    andq    %%rcx, %%rax\n");
			} else if (expr.binary_operator == bi_binary_or) {
				compile_expression(expr.left_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.right_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    orq    %%rcx, %%rax\n");
			} else if (expr.binary_operator == bi_binary_xor) {
				compile_expression(expr.left_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.right_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    xorq    %%rcx, %%rax\n");
			} else if (expr.binary_operator == bi_binary_left_shift) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    salq    %%cl, %%rax\n");
			} else if (expr.binary_operator == bi_binary_right_shift) {
				compile_expression(expr.right_operand, symbols);
				emit("    pushq   %%rax\n");
				compile_expression(expr.left_operand, symbols);
				emit("    popq    %%rcx\n");
				emit("    sarq    %%cl, %%rax\n");
			}
		} else if (expression->type == et_unary) {
			unary_expression_t expr = expression->unary;
			if (expr.unary_operator == un_value_of) {
				compile_expression(expr.operand, symbols);
				emit("    movq    (%%rax), %%rax\n");
			} else if (expr.unary_operator == un_arithmetic_negative) {
				compile_expression(expr.operand, symbols);
				emit("    negq    %%rax\n");
			} else if (expr.unary_operator == un_address_of) {
				emit("    leaq    %ld(%%rbp), %%rax\n", symbols.fetch(expr.operand->identifier).offset);
			} else if (expr.unary_operator == un_logical_not) {
				compile_expression(expr.operand, symbols);
				emit("    cmpq    $0, %%rax\n");
				emit("    movq    $0, %%rax\n");
				emit("    sete    %%al\n");
			} else if (expr.unary_operator == un_binary_not) {
				compile_expression(expr.operand, symbols);
				emit("    notq    %%rax\n");
			}
		}
	}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movl (%rsi), %eax
cmpq $0x7, %rax
ja 0xf119
movq %rdx, %r14
movq %rdi, %rbx
leaq 0x157c(%rip), %rcx      # 0x102d0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x48(%rsi), %rdx
leaq 0x20c6(%rip), %rsi      # 0x10e2e
jmp 0xee20
movl 0x100(%rsi), %eax
cmpq $0x1a, %rax
ja 0xf119
movq 0xf0(%rsi), %r12
movq 0xf8(%rsi), %r15
leaq 0x1576(%rip), %rcx      # 0x10308
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpq $0x0, 0x8(%r12)
jg 0xedae
cmpq $0x0, 0x8(%r15)
jle 0xf89a
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
cmpq $0x0, 0x8(%r12)
jne 0xedd5
leaq 0x214e(%rip), %rsi      # 0x10f19
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x20f1(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
cmpq $0x0, 0x8(%r15)
jne 0xf8c7
leaq 0x2113(%rip), %rsi      # 0x10f19
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
jmp 0xf8c7
movq 0x40(%rsi), %rdx
leaq 0x2026(%rip), %rsi      # 0x10e46
movq %rbx, %rdi
xorl %eax, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xe4f2
movl 0x110(%rsi), %eax
cmpq $0x5, %rax
ja 0xf119
movq 0x108(%rsi), %rsi
leaq 0x1497(%rip), %rcx      # 0x102f0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
leaq 0x2170(%rip), %rsi      # 0x10fe4
jmp 0xf7a3
movq 0x68(%rsi), %rax
movsbl (%rax), %edx
leaq 0x1fdf(%rip), %rsi      # 0x10e66
movq %rbx, %rdi
xorl %eax, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xe4f2
addq $0x88, %rsi
leaq 0x78(%rsp), %r15
movq %r15, %rdi
callq 0x22e0
movq %r14, %rdi
movq %r15, %rsi
callq 0xcc74
movq 0x48(%rax), %rdx
leaq 0x1fb2(%rip), %rsi      # 0x10e7e
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x78(%rsp), %rdi
callq 0x2100
jmp 0xf119
addq $0xb8, %rsi
movq %rsp, %r15
movq %r15, %rdi
callq 0xd096
leaq 0x1b16(%rip), %rsi      # 0x10a14
movq %r15, %rdi
callq 0x58d0
testb %al, %al
je 0xef46
movq 0x20(%rsp), %rax
movq (%rax), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
movq 0x20(%rsp), %rax
movq (%rax), %rax
cmpl $0x1, (%rax)
jne 0xefd1
movq 0x28(%rax), %rax
leaq 0x8(,%rax,8), %rdx
leaq 0x1f5c(%rip), %rsi      # 0x10e9d
jmp 0xf107
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %rax
movq %rax, %rdx
subq %rcx, %rdx
cmpq $0x38, %rdx
jae 0xefa0
leaq 0x1f6a(%rip), %r15      # 0x10ecd
xorl %r12d, %r12d
movq %rax, %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r12, %rdx
jbe 0xefe7
movq (%rcx,%r12,8), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
movq %rbx, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0xe4f2
incq %r12
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %rax
jmp 0xef66
pushq $0x6
popq %rbp
leaq 0x1f23(%rip), %r15      # 0x10ecd
subl $0x1, %ebp
jb 0xf02e
movq 0x20(%rsp), %rax
movq (%rax), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
movq %rbx, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0xe4f2
jmp 0xefaa
leaq 0x1ede(%rip), %rsi      # 0x10eb6
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
jmp 0xf111
pushq $-0x1
popq %r15
leaq 0x8d8e(%rip), %r12      # 0x17d80
leaq 0x1ee7(%rip), %r14      # 0x10ee0
xorl %r13d, %r13d
subq %rcx, %rax
sarq $0x3, %rax
cmpq %r13, %rax
jbe 0xf086
addq %r15, %rax
movq (%r12,%rax,8), %rdx
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0xe4f2
incq %r13
movq 0x20(%rsp), %rcx
movq 0x28(%rsp), %rax
decq %r15
jmp 0xeffc
pushq $0x5
popq %r12
leaq 0x8d47(%rip), %r13      # 0x17d80
leaq 0x1ea0(%rip), %r15      # 0x10ee0
cmpq $-0x1, %r12
je 0xf093
movq (%r13,%r12,8), %rdx
movq %rbx, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0xe4f2
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rdx
leaq 0x8(%rdi), %rsi
cmpq %rdx, %rsi
je 0xf078
subq %rsi, %rdx
callq 0x2370
movq 0x28(%rsp), %rdx
addq $-0x8, %rdx
movq %rdx, 0x28(%rsp)
decq %r12
jmp 0xf040
movq (%rsp), %rdx
leaq 0x1e5f(%rip), %rsi      # 0x10ef0
jmp 0xf107
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
shrq $0x3, %rax
movl %eax, %r12d
decq %r12
leaq 0x1e1f(%rip), %r15      # 0x10ecd
testl %r12d, %r12d
js 0xf0e1
movl %r12d, %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq 0x20(%rsp), %rcx
movq (%rcx,%rax,8), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
movq %rbx, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0xe4f2
decq %r12
jmp 0xf0ae
movq (%rsp), %rdx
leaq 0x1e04(%rip), %rsi      # 0x10ef0
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq 0x28(%rsp), %rdx
subq 0x20(%rsp), %rdx
leaq 0x1df9(%rip), %rsi      # 0x10f00
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rsp, %rdi
callq 0x9afc
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
addq $0x88, %rsi
leaq 0x38(%rsp), %r15
movq %r15, %rdi
callq 0x22e0
movq %r14, %rdi
movq %r15, %rsi
callq 0xcc74
movq 0x48(%rax), %rdx
leaq 0x201c(%rip), %rsi      # 0x11171
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x38(%rsp), %rdi
jmp 0xeedb
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
leaq 0x1fe3(%rip), %rsi      # 0x1115e
jmp 0xf7a3
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
leaq 0x1c04(%rip), %rsi      # 0x10d96
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1e6f(%rip), %rsi      # 0x11012
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1eb8(%rip), %rsi      # 0x1106c
jmp 0xf7a3
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
leaq 0x1fc5(%rip), %rsi      # 0x11190
jmp 0xf7a3
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1ce8(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1d2c(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1f30(%rip), %rsi      # 0x11145
jmp 0xf7a3
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1c9e(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1ce2(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1df3(%rip), %rsi      # 0x11052
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1e5d(%rip), %rsi      # 0x110cd
jmp 0xf792
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1c43(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1c87(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1d98(%rip), %rsi      # 0x11052
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1dcc(%rip), %rsi      # 0x11097
jmp 0xf792
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1be8(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1c2c(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1c7c(%rip), %rsi      # 0x10f91
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1c75(%rip), %rsi      # 0x10f9b
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1c77(%rip), %rsi      # 0x10fae
jmp 0xf7a3
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1b7c(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1bc0(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1cd1(%rip), %rsi      # 0x11052
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1d29(%rip), %rsi      # 0x110bb
jmp 0xf792
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1b21(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1b65(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1b81(%rip), %rsi      # 0x10f5d
jmp 0xf7a3
movl (%r12), %ebp
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
cmpl $0x3, %ebp
jne 0xf84f
addq $0x88, %r12
leaq 0x58(%rsp), %r15
movq %r15, %rdi
movq %r12, %rsi
callq 0x22e0
movq %r14, %rdi
movq %r15, %rsi
callq 0xcc74
movq 0x48(%rax), %rdx
leaq 0x19e6(%rip), %rsi      # 0x10e0f
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x58(%rsp), %rdi
jmp 0xeedb
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1a7b(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1abf(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1bd0(%rip), %rsi      # 0x11052
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1c16(%rip), %rsi      # 0x110a9
jmp 0xf792
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1a20(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1a64(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1ab4(%rip), %rsi      # 0x10f91
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1aad(%rip), %rsi      # 0x10f9b
jmp 0xf7a3
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x19c5(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1a09(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1a3f(%rip), %rsi      # 0x10f77
jmp 0xf7a3
movq 0x20(%rbx), %rbp
leaq 0x1(%rbp), %r13
leaq 0x2(%rbp), %rax
movq %rax, 0x20(%rbx)
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1834(%rip), %rsi      # 0x10d96
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1a8d(%rip), %rsi      # 0x11000
movq %rbx, %rdi
movq %rbp, %rdx
xorl %eax, %eax
callq 0xe4f2
jmp 0xf5d6
movq 0x20(%rbx), %rbp
leaq 0x1(%rbp), %r13
leaq 0x2(%rbp), %rax
movq %rax, 0x20(%rbx)
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x17ef(%rip), %rsi      # 0x10d96
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x17f5(%rip), %rsi      # 0x10dad
movq %rbx, %rdi
movq %rbp, %rdx
xorl %eax, %eax
callq 0xe4f2
leaq 0x1a6f(%rip), %rsi      # 0x1103b
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x17e9(%rip), %rsi      # 0x10dc6
movq %rbx, %rdi
movq %r13, %rdx
xorl %eax, %eax
callq 0xe4f2
leaq 0x17ce(%rip), %r12      # 0x10dbf
movq %rbx, %rdi
movq %r12, %rsi
movq %rbp, %rdx
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
movq %rbx, %rdi
leaq 0x177d(%rip), %rsi      # 0x10d96
xorl %eax, %eax
callq 0xe4f2
leaq 0x19eb(%rip), %rsi      # 0x11012
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x19f1(%rip), %rsi      # 0x11029
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r13, %rdx
jmp 0xee23
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1868(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x18ac(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1a4a(%rip), %rsi      # 0x110df
jmp 0xf7a3
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x181e(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1862(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1a1a(%rip), %rsi      # 0x110f9
jmp 0xf7a3
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x17d4(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1818(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1929(%rip), %rsi      # 0x11052
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x18ef(%rip), %rsi      # 0x11029
jmp 0xf792
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x177c(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x17c0(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x18d1(%rip), %rsi      # 0x11052
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x18da(%rip), %rsi      # 0x1106c
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x18db(%rip), %rsi      # 0x1107e
movq %rbx, %rdi
xorl %eax, %eax
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x16fa(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x173e(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1929(%rip), %rsi      # 0x1112c
jmp 0xf7a3
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x16b3(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x16f7(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x18c8(%rip), %rsi      # 0x11112
jmp 0xf7a3
leaq 0x1677(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq 0x108(%r12), %rsi
movq %rbx, %rdi
movq %r14, %rdx
callq 0xed2a
leaq 0x16b6(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x173d(%rip), %rsi      # 0x10fc8
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
jmp 0xee6d
movq %rbx, %rdi
movq %r12, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x161e(%rip), %rsi      # 0x10ecd
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0xed2a
leaq 0x1662(%rip), %rsi      # 0x10f30
movq %rbx, %rdi
xorl %eax, %eax
callq 0xe4f2
leaq 0x1664(%rip), %rsi      # 0x10f43
jmp 0xf7a3
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
jmp 0xf902
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
jmp 0xf902
jmp 0xf90d
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x2100
jmp 0xf918
jmp 0xf90d
jmp 0xf90d
movq %rax, %rbx
movq %rsp, %rdi
callq 0x9afc
movq %rbx, %rdi
callq 0x2390