// File: /workspace/github_cpp_makefile_star2_O3/andrakis[P]alisp/ALisp.cpp
// Function: main
int main(int argc, char **argv) {
	MainState.readFrom(argc, argv);

	ErrorCode error_code;
	switch (error_code = alisp_init()) {
		case ErrorCode::NONE:
			// All good
			break;
		default:
			std::cerr << "alisp_init() returned " << error_code << std::endl;
			return 1;
	}

	auto after_startup = Atoms::Count();
	if (MainState.debug)
		std::cerr << "(dbg) " << after_startup << " atoms created at startup." << std::endl;

	EnvironmentCell ec(std::make_shared<Environment>());
	Stdlib::add_stdlib(ec);
	// Set argv in our environment
	ec.env()->create(Atoms::Declare("argv"), ListCell(MainState.args));
	auto after_stdlib = Atoms::Count();
	if (MainState.debug)
		std::cerr << "(dbg) " << (after_stdlib - after_startup) << " atoms created at add_stdlib." << std::endl;

	if (MainState.help) {
		MainState.did_anything = true;
		show_help();
		return 1;
	} else if (MainState.tests) {
		MainState.did_anything = true;
		test();
	}
	
	if (MainState.has_file()) {
		MainState.did_anything = true;
		try {
			// Find the full path to the file
			Cell full_path = invoke_lib(file_path, StringCell(MainState.file));
			if (invoke_lib(file_exists, full_path) == False) {
				std::cerr << "Failed to open " << full_path << std::endl;
				return 2;
			}
			// Read the file
			Cell read = invoke_lib(file_read, full_path);
			// Parse the read file
			auto parse_call = Timekeeping::timeCallbackResult<Cell>([&read] () {
				return Parser::read(read.str());
			});
			Cell parsed = std::get<1>(parse_call);
			if (MainState.timing)
				std::cerr << "(tmg) Parsing took " << std::get<0>(parse_call) << Timekeeping::time_type() << std::endl;
			auto after_parsing = Atoms::Count();
			if (MainState.debug)
				std::cerr << "(dbg) " << (after_parsing - after_stdlib) << " atoms created during parsing." << std::endl;
			// Execute the code
			auto eval_call = Timekeeping::timeCallbackResult<Cell>([&parsed, &ec] () {
				return Eval::Simple::eval(parsed, ec);
			});
			if (MainState.timing)
				std::cerr << "(tmg) Execution took " << std::get<0>(eval_call) << Timekeeping::time_type() << std::endl;
			if (MainState.debug) {
				std::cerr << "(dbg) Final result: " << std::get<1>(eval_call) << std::endl;
				std::cerr << "(dbg) Final atom count: " << Atoms::Count() << std::endl;
			}
		} catch (Exception &e) {
			std::cerr << "Exception: " << e.what() << std::endl;
			return 3;
		} catch (...) {
			std::cerr << "Unknown error occurred, exception details may follow" << std::endl;
			throw;
		}
	}

	if (MainState.interactive) {
		MainState.did_anything = true;
		REPL::REPL(ec);
	}
	auto clear_time = Timekeeping::timeCall([&ec] () {
		// Clear environment
		ec.env()->clear();
		// Also clear REPL
		REPL::shutdown_repl();
	});
	if (MainState.timing)
		std::cerr << "(tmg) Cleanup took " << clear_time << Timekeeping::time_type() << std::endl;

	if (MainState.did_anything == false) {
		show_help();
		return 1;
	}

	if (debugger_attached()) {
		std::cerr << "(debugger attached) Press enter to exit";
		while (std::cin.get() != '\n') /* Nothing */;
	}
	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %rsi, 0x88(%rsp)
cmpl $0x2, %edi
jl 0x95ec
movl %edi, %eax
movq %rax, 0xa0(%rsp)
movb $0x1, %cl
movl $0x1, %ebp
leaq 0x2512c(%rip), %r12     # 0x2e528
leaq 0x8(%rsp), %r13
leaq 0x28(%rsp), %r14
movq %r13, %rbx
movq 0x88(%rsp), %rax
movq (%rax,%rbp,8), %r15
movb (%r15), %r13b
movb $0x1, %al
cmpb $0x2d, %r13b
jne 0x942f
cmpb $0x2d, 0x1(%r15)
jne 0x942f
cmpb $0x0, 0x2(%r15)
setne %al
andb %al, %cl
movb %cl, 0x3c(%rsp)
cmpb $0x1, %cl
jne 0x9496
movq %r15, %rdi
leaq 0x16e84(%rip), %rsi     # 0x202c8
callq 0x74e0
testl %eax, %eax
je 0x9487
cmpb $0x2d, %r13b
jne 0x9521
movzbl 0x1(%r15), %eax
cmpl $0x67, %eax
jle 0x94d9
cmpl $0x74, %eax
je 0x94f3
cmpl $0x69, %eax
je 0x9503
cmpl $0x68, %eax
jne 0x9521
cmpb $0x0, 0x2(%r15)
jne 0x9521
movb $0x1, 0x25096(%rip)     # 0x2e524
movq %rbx, %r13
jmp 0x95a3
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq %r15, %rdi
callq 0x7180
leaq (%rax,%r15), %rdx
movq %rbx, %r13
movq %rbx, %rdi
movq %r15, %rsi
callq 0xb160
movq %r14, %rdi
movq %r13, %rsi
callq 0x18531
leaq 0x2507c(%rip), %rdi     # 0x2e548
movq %r14, %rsi
callq 0xaa8e
jmp 0x956e
cmpl $0x54, %eax
je 0x9516
cmpl $0x64, %eax
jne 0x9521
cmpb $0x0, 0x2(%r15)
jne 0x9521
movb $0x1, 0x25032(%rip)     # 0x2e523
jmp 0x948e
cmpb $0x0, 0x2(%r15)
jne 0x9521
movb $0x1, 0x25020(%rip)     # 0x2e521
jmp 0x948e
cmpb $0x0, 0x2(%r15)
jne 0x9521
movb $0x1, 0x2500f(%rip)     # 0x2e520
jmp 0x948e
cmpb $0x0, 0x2(%r15)
je 0x95e0
movq %r12, %rdi
leaq 0x18489(%rip), %rsi     # 0x219b4
callq 0x7100
testl %eax, %eax
je 0x95b9
movq 0x88(%rsp), %rax
movq (%rax,%rbp,8), %rsi
movq %rbx, %r13
movq %rbx, %rdi
leaq 0x40(%rsp), %rdx
callq 0x7160
movq %r14, %rdi
movq %r13, %rsi
callq 0x18531
leaq 0x24fe2(%rip), %rdi     # 0x2e548
movq %r14, %rsi
callq 0xaa8e
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x957e
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x28(%rsp)
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x95a3
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
incq %rbp
cmpl %ebp, 0xa0(%rsp)
movb 0x3c(%rsp), %cl
jne 0x9406
jmp 0x95ec
movq 0x88(%rsp), %rax
movq (%rax,%rbp,8), %rsi
movq %rbx, %r13
movq %rbx, %rdi
movq %r14, %rdx
callq 0x7160
movq %r12, %rdi
movq %rbx, %rsi
callq 0x7430
jmp 0x9587
movb $0x1, 0x24f3b(%rip)     # 0x2e522
jmp 0x948e
callq 0x152fc
testl %eax, %eax
je 0x9650
movl %eax, %ebx
movq 0x249f2(%rip), %r14     # 0x2dff0
leaq 0x16b8b(%rip), %rsi     # 0x20190
movl $0x16, %edx
movq %r14, %rdi
callq 0x73d0
movq %r14, %rdi
movl %ebx, %esi
callq 0x7610
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movl $0x1, %ebp
jmp 0xa096
callq 0xe074
movq %rax, %rbx
cmpb $0x1, 0x24ec4(%rip)     # 0x2e523
jne 0x96c5
movq 0x24988(%rip), %r14     # 0x2dff0
leaq 0x16b38(%rip), %rsi     # 0x201a7
movl $0x6, %edx
movq %r14, %rdi
callq 0x73d0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x7230
movq %rax, %r14
leaq 0x16b1d(%rip), %rsi     # 0x201ae
movl $0x1a, %edx
movq %rax, %rdi
callq 0x73d0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movl $0x58, %edi
callq 0x7310
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x2362c(%rip), %rcx     # 0x2cd10
movq %rcx, (%rax)
leaq 0x10(%rax), %rcx
movq $0x0, 0x30(%rax)
leaq 0x40(%rax), %rdx
movq %rdx, 0x10(%rax)
movq $0x1, 0x18(%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x20(%rax)
movl $0x3f800000, 0x30(%rax) # imm = 0x3F800000
movups %xmm0, 0x38(%rax)
movups %xmm0, 0x48(%rax)
leaq 0xc8(%rsp), %rsi
movq %rax, 0x8(%rsi)
movq %rcx, (%rsi)
leaq 0x48(%rsp), %rdi
callq 0xa4a2
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x9744
callq 0xac0e
movq 0x48(%rsp), %rsi
testq %rsi, %rsi
je 0x975f
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *(%rax)
movq 0x8(%rsp), %rax
jmp 0x9761
xorl %eax, %eax
leaq 0x80(%rsp), %rdi
movq %rax, (%rdi)
callq 0x19cf0
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x9784
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x80(%rsp)
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0xa552
movq 0x8(%rsp), %r14
leaq 0x16a1e(%rip), %rsi     # 0x201c9
leaq 0x28(%rsp), %rdi
callq 0xe6ec
leaq 0x24d8c(%rip), %rsi     # 0x2e548
leaq 0x40(%rsp), %rdi
callq 0xa7a2
movq 0x40(%rsp), %rax
leaq 0x78(%rsp), %rdx
movq %rax, (%rdx)
movq $0x0, 0x40(%rsp)
leaq 0x28(%rsp), %rsi
movq %r14, %rdi
callq 0xa57c
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0x97f9
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x78(%rsp)
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x9812
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x9822
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x9831
callq 0xac0e
callq 0xe074
movq %rax, %r15
cmpb $0x1, 0x24ce3(%rip)     # 0x2e523
jne 0x98aa
movq 0x247a7(%rip), %rdi     # 0x2dff0
leaq 0x16957(%rip), %rsi     # 0x201a7
movl $0x6, %edx
callq 0x73d0
movq %r15, %rsi
subq %rbx, %rsi
movq 0x24789(%rip), %rdi     # 0x2dff0
callq 0x7230
movq %rax, %rbx
leaq 0x16958(%rip), %rsi     # 0x201ce
movl $0x1d, %edx
movq %rax, %rdi
callq 0x73d0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
cmpb $0x1, 0x24c73(%rip)     # 0x2e524
jne 0x98c9
movb $0x1, 0x24ca6(%rip)     # 0x2e560
movl $0x1, %ebp
callq 0x9130
jmp 0xa086
cmpb $0x1, 0x24c52(%rip)     # 0x2e522
jne 0x98de
movb $0x1, 0x24c87(%rip)     # 0x2e560
callq 0x1efcb
leaq 0x24c43(%rip), %rdi     # 0x2e528
leaq 0x180c8(%rip), %rsi     # 0x219b4
callq 0x7100
testl %eax, %eax
je 0x9f16
movb $0x1, 0x24c60(%rip)     # 0x2e560
leaq 0xb8(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x24c15(%rip), %rsi     # 0x2e528
movq 0x24c16(%rip), %rdx     # 0x2e530
addq %rsi, %rdx
leaq 0xa8(%rsp), %rdi
callq 0xb0ca
leaq 0x50(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0xa8b0
leaq 0x12ac0(%rip), %rsi     # 0x1c403
leaq 0x58(%rsp), %rdi
leaq 0x50(%rsp), %rdx
callq 0xa7f8
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x9962
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x50(%rsp)
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0x9988
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x7330
movq 0x58(%rsp), %rsi
testq %rsi, %rsi
je 0x99a3
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *(%rax)
movq 0x8(%rsp), %rax
jmp 0x99a5
xorl %eax, %eax
leaq 0x70(%rsp), %rdx
movq %rax, (%rdx)
leaq 0x12948(%rip), %rsi     # 0x1c2fc
leaq 0x28(%rsp), %rdi
callq 0xa978
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x99ef
leaq 0x24d89(%rip), %rax     # 0x2e758
cmpq %rdi, (%rax)
je 0x99f3
movq (%rdi), %rax
leaq 0x24d7a(%rip), %rsi     # 0x2e758
callq *0x78(%rax)
movl %eax, %ebx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
jne 0x99f5
jmp 0x99fb
xorl %ebx, %ebx
jmp 0x99fb
movb $0x1, %bl
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x28(%rsp)
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x9a14
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x70(%rsp)
testb %bl, %bl
je 0x9a7e
movq 0x245c8(%rip), %rdi     # 0x2dff0
leaq 0x167bd(%rip), %rsi     # 0x201ec
movl $0xf, %edx
callq 0x73d0
movq 0x245b0(%rip), %rdi     # 0x2dff0
leaq 0x58(%rsp), %rsi
callq 0xf4b4
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movl $0x2, %ebp
movq %rax, %rdi
callq 0x7240
jmp 0x9efe
movq 0x58(%rsp), %rsi
testq %rsi, %rsi
je 0x9a99
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *(%rax)
movq 0x8(%rsp), %rax
jmp 0x9a9b
xorl %eax, %eax
leaq 0x68(%rsp), %rdx
movq %rax, (%rdx)
leaq 0x12d8e(%rip), %rsi     # 0x1c838
leaq 0x98(%rsp), %rdi
callq 0xa978
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x9ac7
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x68(%rsp)
callq 0x7080
movq %rax, %r14
movq 0x98(%rsp), %rsi
testq %rsi, %rsi
je 0x9af2
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *0x30(%rax)
jmp 0x9b1b
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
movabsq $0x5f7274705f6f6e3c, %rcx # imm = 0x5F7274705F6F6E3C
movq %rcx, (%rax)
movl $0x3e666572, 0x8(%rax)  # imm = 0x3E666572
movq $0xc, -0x8(%rax)
movb $0x0, 0xc(%rax)
leaq 0x28(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x18531
leaq 0x18(%rsp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0x9b46
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
callq 0x7080
subq %r14, %rax
movabsq $0x431bde82d7b634db, %rbp # imm = 0x431BDE82D7B634DB
imulq %rbp
movq %rdx, %r13
movq 0x28(%rsp), %rsi
testq %rsi, %rsi
je 0x9ba8
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *(%rax)
movq 0x8(%rsp), %r14
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x9b87
movq (%rdi), %rax
callq *0x10(%rax)
testq %r14, %r14
je 0x9ba8
movq (%r14), %rax
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq *(%rax)
movq 0x8(%rsp), %rax
movl $0x0, 0x3c(%rsp)
jmp 0x9bb3
movb $0x1, %al
movl %eax, 0x3c(%rsp)
xorl %r14d, %r14d
xorl %eax, %eax
movq %rax, 0x90(%rsp)
cmpb $0x1, 0x2495f(%rip)     # 0x2e521
jne 0x9c68
movq 0x24421(%rip), %rdi     # 0x2dff0
leaq 0x16626(%rip), %rsi     # 0x201fc
movl $0x13, %edx
callq 0x73d0
movq %r13, %rax
shrq $0x3f, %rax
sarq $0x12, %r13
addq %rax, %r13
movq 0x243fb(%rip), %rdi     # 0x2dff0
movq %r13, %rsi
callq 0x72d0
movq %r12, 0x8(%rsp)
movw $0x736d, 0x18(%rsp)     # imm = 0x736D
movq $0x2, 0x10(%rsp)
movb $0x0, 0x1a(%rsp)
movl $0x2, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x73d0
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r13, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x9c68
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
callq 0xe074
cmpb $0x1, 0x248af(%rip)     # 0x2e523
jne 0x9ce1
movq %rax, %r13
movq 0x24370(%rip), %rdi     # 0x2dff0
leaq 0x16520(%rip), %rsi     # 0x201a7
movl $0x6, %edx
callq 0x73d0
subq %r15, %r13
movq 0x24355(%rip), %rdi     # 0x2dff0
movq %r13, %rsi
callq 0x7230
movq %rax, %r15
leaq 0x16563(%rip), %rsi     # 0x20210
movl $0x1e, %edx
movq %rax, %rdi
callq 0x73d0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
callq 0x7080
movq %rax, %r15
leaq 0x40(%rsp), %rdi
leaq 0x90(%rsp), %rsi
leaq 0x48(%rsp), %rdx
callq 0x15588
callq 0x7080
subq %r15, %rax
imulq %rbp
movq %rdx, %r15
movq %rdx, %rax
shrq $0x3f, %rax
sarq $0x12, %r15
addq %rax, %r15
movq 0x40(%rsp), %rsi
testq %rsi, %rsi
je 0x9d51
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *(%rax)
movq 0x8(%rsp), %rax
movq 0x40(%rsp), %rdi
movq %rax, 0x28(%rsp)
movq %r15, 0x30(%rsp)
testq %rdi, %rdi
je 0x9d5f
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x9d5f
movq $0x0, 0x28(%rsp)
movq %r15, 0x30(%rsp)
cmpb $0x1, 0x247bb(%rip)     # 0x2e521
jne 0x9e00
movq 0x2427d(%rip), %rdi     # 0x2dff0
leaq 0x164b5(%rip), %rsi     # 0x2022f
movl $0x15, %edx
callq 0x73d0
movq 0x30(%rsp), %rsi
movq 0x24260(%rip), %rdi     # 0x2dff0
callq 0x72d0
movq %r12, 0x8(%rsp)
movw $0x736d, 0x18(%rsp)     # imm = 0x736D
movq $0x2, 0x10(%rsp)
movb $0x0, 0x1a(%rsp)
movl $0x2, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x73d0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x9e00
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
cmpb $0x1, 0x2471c(%rip)     # 0x2e523
jne 0x9eb6
movq 0x241dc(%rip), %rdi     # 0x2dff0
leaq 0x1642a(%rip), %rsi     # 0x20245
movl $0x14, %edx
callq 0x73d0
movq 0x241c4(%rip), %rdi     # 0x2dff0
leaq 0x28(%rsp), %rsi
callq 0xf4b4
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movq 0x24189(%rip), %rdi     # 0x2dff0
leaq 0x163ec(%rip), %rsi     # 0x2025a
movl $0x18, %edx
callq 0x73d0
callq 0xe074
movq 0x2416c(%rip), %rdi     # 0x2dff0
movq %rax, %rsi
callq 0x7230
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x9ec6
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x9ed9
movq (%rdi), %rax
callq *0x10(%rax)
cmpb $0x0, 0x3c(%rsp)
jne 0x9ee9
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x9efc
movq (%rdi), %rax
callq *0x10(%rax)
xorl %ebp, %ebp
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0x9f0e
movq (%rdi), %rax
callq *0x10(%rax)
testb %bl, %bl
jne 0xa086
cmpb $0x1, 0x24603(%rip)     # 0x2e520
jne 0x9f69
movb $0x1, 0x2463a(%rip)     # 0x2e560
movq 0x48(%rsp), %rsi
testq %rsi, %rsi
je 0x9f41
movq (%rsi), %rax
leaq 0x8(%rsp), %rdi
callq *(%rax)
movq 0x8(%rsp), %rax
jmp 0x9f43
xorl %eax, %eax
leaq 0x60(%rsp), %rdi
movq %rax, (%rdi)
callq 0x19546
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x9f60
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x60(%rsp)
callq 0x7080
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0xa552
movq 0x8(%rsp), %r14
movq %r14, %rdi
callq 0xb292
movq 0x38(%r14), %r14
testq %r14, %r14
jne 0x9f85
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x9fa5
callq 0xac0e
callq 0x19529
callq 0x7080
subq %rbx, %rax
movabsq $0x431bde82d7b634db, %rcx # imm = 0x431BDE82D7B634DB
imulq %rcx
cmpb $0x1, 0x2455b(%rip)     # 0x2e521
jne 0xa071
movq %rdx, %rbx
movq 0x2401a(%rip), %rdi     # 0x2dff0
leaq 0x162d7(%rip), %rsi     # 0x202b4
movl $0x13, %edx
callq 0x73d0
movq %rbx, %rax
shrq $0x3f, %rax
sarq $0x12, %rbx
addq %rax, %rbx
movq 0x23ff4(%rip), %rdi     # 0x2dff0
movq %rbx, %rsi
callq 0x72d0
leaq 0x18(%rsp), %r14
movq %r14, -0x10(%r14)
movw $0x736d, (%r14)         # imm = 0x736D
movq $0x2, -0x8(%r14)
movb $0x0, 0x2(%r14)
movl $0x2, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x73d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72e0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x7240
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0xa071
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
xorl %ebp, %ebp
cmpb $0x0, 0x244e6(%rip)     # 0x2e560
jne 0xa086
movl $0x1, %ebp
callq 0x9130
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0xa096
movq (%rdi), %rax
callq *0x10(%rax)
movl %ebp, %eax
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rdx, %rbx
movq %rax, %r15
jmp 0xa371
movq %rdx, %rbx
movq %rax, %r15
movq 0x40(%rsp), %rdi
jmp 0xa34c
movq %rdx, %rbx
movq %rax, %r15
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa37a
movq (%rdi), %rax
jmp 0xa377
movq %rdx, %rbx
movq %rax, %r15
jmp 0xa37a
jmp 0xa28e
movq %rdx, %rbx
movq %rax, %r15
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa107
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x28(%rsp)
jmp 0xa1e5
jmp 0xa25b
jmp 0xa25b
movq %rdx, %rbx
movq %rax, %r15
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa37a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
jmp 0xa37a
movq %rdx, %rbx
movq %rax, %r15
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0xa15f
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x68(%rsp)
jmp 0xa38d
movq %rax, %rbx
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xa180
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x60(%rsp)
jmp 0xa440
jmp 0xa28e
movq %rdx, %rbx
movq %rax, %r15
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0xa347
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
jmp 0xa347
movq %rdx, %rbx
movq %rax, %r15
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0xa357
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
jmp 0xa357
movq %rdx, %rbx
movq %rax, %r15
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0xa1f5
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x70(%rsp)
jmp 0xa38d
movq %rdx, %rbx
movq %rax, %r15
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xa219
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x50(%rsp)
jmp 0xa22a
movq %rdx, %rbx
movq %rax, %r15
movq 0xa8(%rsp), %rdi
cmpq %r14, %rdi
je 0xa39d
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x7330
jmp 0xa39d
movq %rdx, %rbx
movq %rax, %r15
jmp 0xa39d
movq %rdx, %rbx
movq %rax, %r15
jmp 0xa357
jmp 0xa43d
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
je 0xa440
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
jmp 0xa440
movq %rdx, %rbx
movq %rax, %r15
jmp 0xa38d
movq %rax, %rbx
movq 0x78(%rsp), %rdi
testq %rdi, %rdi
je 0xa2ac
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x78(%rsp)
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xa2ca
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0xa2ca
movq %rax, %rbx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa2df
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0xa2df
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0xa440
callq 0xac0e
jmp 0xa440
jmp 0xa43d
movq %rax, %rbx
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xa312
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x80(%rsp)
jmp 0xa440
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xa49a
callq 0xac0e
jmp 0xa49a
movq %rdx, %rbx
movq %rax, %r15
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa357
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xa36a
movq (%rdi), %rax
callq *0x10(%rax)
cmpb $0x0, 0x3c(%rsp)
jne 0xa37a
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0xa38d
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x58(%rsp), %rdi
testq %rdi, %rdi
je 0xa39d
movq (%rdi), %rax
callq *0x10(%rax)
movq %r15, %rdi
callq 0x7170
cmpl $0x2, %ebx
jne 0xa3f4
movq %rax, %r14
movq 0x23c3c(%rip), %rdi     # 0x2dff0
leaq 0x15eed(%rip), %rsi     # 0x202a8
movl $0xb, %edx
callq 0x73d0
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
movq 0x23c1b(%rip), %rdi     # 0x2dff0
movq %rax, %rsi
callq 0x72f0
movq %rax, %rdi
callq 0x71a0
movl $0x3, %ebp
callq 0x75e0
jmp 0xa086
movq 0x23bf5(%rip), %rdi     # 0x2dff0
leaq 0x15e71(%rip), %rsi     # 0x20273
movl $0x34, %edx
callq 0x73d0
movq 0x23bdd(%rip), %rdi     # 0x2dff0
callq 0x71a0
callq 0x7520
movq %rax, %rbx
callq 0x75e0
jmp 0xa440
jmp 0xa43d
movq %rax, %rbx
callq 0x75e0
jmp 0xa440
movq %rax, %rdi
callq 0xaa2f
jmp 0xa43d
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0xa49a
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0xa49a
jmp 0xa45d
jmp 0xa47b
jmp 0xa458
movq %rax, %rbx
jmp 0xa49a
movq %rax, %rbx
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0xa470
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x28(%rsp)
jmp 0xa47e
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xa49a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7330
movq %rbx, %rdi
callq 0x7630