// File: /workspace/github_cpp_makefile_star2_O1/andrakis[P]alisp/eval_simple.cpp
// Function: ALisp::Eval::Simple::eval(ALisp::Cell const&, ALisp::Cell const&)
Cell eval(const Cell &_x, const Cell &_env) {
				Cell x = _x;
				Cell env = _env;
			recurse:
				switch (x.type()) {
					case CellType::Atom:
						return env.env()->get(x.atomId());
					case CellType::String:
					case CellType::Integer:
					case CellType::Float:
						return x;
				}
				if (x.empty()) return Nil;

				const Cell sym = x.head();
				if (sym.type() == CellType::Atom) {
					const AtomType id = sym.atomId();
					if (id == _quote) {				// (quote exp)
						return x.index(1);
					} else if (id == _if) {			// (if test conseq [alt])
						const Cell test = x.index(1);
						const Cell conseq = x.index(2);
						const Cell alt = x.index(3); // default: Nil
						const Cell result = eval(test, env);
						x = (result == False) ? alt : conseq;
						goto recurse;
					} else if (id == _define) {		// (define var exp) - create new variable
						AtomType newid = x.index(1).atomId();
						x = eval(x.index(2), env);
						env.env()->create(newid, x);
						return x;
					} else if (id == _set) {		// (set! var exp) - update existing variable
						AtomType newid = x.index(1).atomId();
						x = eval(x.index(2), env);
						env.env()->set(newid, x);
						return x;
					} else if (id == _lambda) {		// (lambda (var*) exp)
						LambdaCell lambda;
						lambda.lambda_ptr(env);
						lambda.lambda_args(x.index(1));
						lambda.lambda_body(x.index(2));
						return lambda;
					} else if (id == _macro) {		// (macro (var*) exp)
						MacroCell macro;
						macro.lambda_ptr(env);
						macro.lambda_args(x.index(1));
						macro.lambda_body(x.index(2));
						return macro;
					} else if (id == _begin) {		// (begin exp*)
						auto it = x.cbegin() + 1;
						for (; it != x.cend() - 1; ++it) {
							eval(*it, env);
						}
						x = *it;
						goto recurse;
					}
				}

				// (proc exp*)
				const Cell proc = eval(x.index(0), env);
				ListType exps;
				if (proc.type() == CellType::Macro) {
					const Cell tail = x.tail();
					exps = ListType(tail.cbegin(), tail.cend());
				}  else {
					// (map (tail x) (lambda (y) (eval y env)))
					for (auto it = x.cbegin() + 1; it != x.cend(); ++it)
						exps.push_back(eval(*it, env));
				}
				switch (proc.type()) {
					case CellType::Lambda: {
						EnvironmentType env_shared = std::make_shared<Environment>(proc.lambda_args(), exps, proc.lambda_ptr().env());
						env = EnvironmentCell(env_shared); // swap environments
						x = proc.lambda_body();
						goto recurse;
					}
					case CellType::Macro: {
						EnvironmentType env_shared = std::make_shared<Environment>(proc.lambda_args(), exps, proc.lambda_ptr().env());
						EnvironmentCell env2(env_shared); // short life
						x = eval(proc.lambda_body(), env2);
						// env2 should deallocate here
						goto recurse;
					}
					case CellType::Proc:
						return proc.proc()(exps);
					case CellType::ProcEnv:
						return proc.proc_env()(exps, env.env());
					default:
						throw Exception("Not an executable cell");
				}
			}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %rdx, %rbx
movq %rdi, 0x40(%rsp)
movq (%rsi), %rsi
testq %rsi, %rsi
je 0x15aea
movq (%rsi), %rax
leaq 0x10(%rsp), %r14
movq %r14, %rdi
callq *(%rax)
movq (%r14), %rax
movq $0x0, (%r14)
movq %rax, (%rsp)
jmp 0x15af2
movq $0x0, (%rsp)
movq (%rbx), %rsi
testq %rsi, %rsi
je 0x15b1c
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
movq 0x10(%rsp), %rax
movq $0x0, 0x10(%rsp)
movq %rax, 0x80(%rsp)
jmp 0x15b28
movq $0x0, 0x80(%rsp)
movq %rsp, %r12
leaq 0x10(%rsp), %rbp
leaq 0x80(%rsp), %r15
leaq 0x50(%rsp), %r13
movq (%rsp), %rcx
movl $0x0, %eax
testq %rcx, %rcx
je 0x15b4e
movl 0x8(%rcx), %eax
leal -0x2(%rax), %ecx
cmpl $0x3, %ecx
jb 0x16602
cmpl $0x1, %eax
je 0x1664f
movq %r12, %rdi
callq 0xf574
testb %al, %al
jne 0x1668f
leaq 0x98(%rsp), %rdi
movq %r12, %rsi
callq 0xf4a8
movq 0x98(%rsp), %rax
testq %rax, %rax
je 0x160a9
cmpl $0x1, 0x8(%rax)
jne 0x160a9
leaq 0x98(%rsp), %rdi
callq 0xadcc
leaq 0x19e96(%rip), %rcx     # 0x2fa48
cmpq (%rcx), %rax
jne 0x15bce
movl $0x1, %edx
movq 0x40(%rsp), %rdi
movq %r12, %rsi
callq 0xf5d4
jmp 0x1609a
leaq 0x19e6b(%rip), %rcx     # 0x2fa40
cmpq (%rcx), %rax
jne 0x15c47
movl $0x1, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movl $0x2, %edx
leaq 0x68(%rsp), %rdi
movq %r12, %rsi
callq 0xf5d4
movl $0x3, %edx
leaq 0x30(%rsp), %rdi
movq %r12, %rsi
callq 0xf5d4
leaq 0x8(%rsp), %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x15aac
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x15e0d
leaq 0x19e05(%rip), %rsi     # 0x2fa38
cmpq %rdi, (%rsi)
je 0x15ea9
movq (%rdi), %rax
callq *0x78(%rax)
jmp 0x15eab
leaq 0x19e02(%rip), %rcx     # 0x2fa50
cmpq (%rcx), %rax
jne 0x15d2a
movl $0x1, %edx
movq %rbp, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
callq 0xadcc
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x15c82
movq (%rdi), %rax
callq *0x10(%rax)
movl $0x2, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x15aac
movq 0x10(%rsp), %rax
movq $0x0, 0x10(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x15cc1
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x15cd1
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x10(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x15cea
movq (%rdi), %rax
callq *0x10(%rax)
movq %rbp, %rdi
movq %r15, %rsi
callq 0xa65a
movq 0x10(%rsp), %r14
movq (%rsp), %rsi
testq %rsi, %rsi
je 0x15f3a
movq (%rsi), %rax
movq %r13, %rdi
callq *(%rax)
movq 0x50(%rsp), %rax
movq $0x0, 0x50(%rsp)
movq %rax, 0x90(%rsp)
jmp 0x15f46
leaq 0x19d27(%rip), %rcx     # 0x2fa58
cmpq (%rcx), %rax
jne 0x15e14
movl $0x1, %edx
movq %rbp, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
callq 0xadcc
movq %rax, %r14
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x15d65
movq (%rdi), %rax
callq *0x10(%rax)
movl $0x2, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x15aac
movq 0x10(%rsp), %rax
movq $0x0, 0x10(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x15da4
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x15db4
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x10(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x15dcd
movq (%rdi), %rax
callq *0x10(%rax)
movq %rbp, %rdi
movq %r15, %rsi
callq 0xa65a
movq 0x10(%rsp), %rbx
movq (%rsp), %rsi
testq %rsi, %rsi
je 0x16039
movq (%rsi), %rax
movq %r13, %rdi
callq *(%rax)
movq 0x50(%rsp), %rax
movq $0x0, 0x50(%rsp)
movq %rax, 0x88(%rsp)
jmp 0x16045
xorl %eax, %eax
jmp 0x15eab
leaq 0x19c45(%rip), %rcx     # 0x2fa60
cmpq (%rcx), %rax
jne 0x15f8a
movl $0x28, %edi
callq 0x7300
movl $0x6, 0x8(%rax)
leaq 0x18664(%rip), %rcx     # 0x2e4a0
movq %rcx, (%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movq $0x0, 0x20(%rax)
movq %rax, 0x10(%rsp)
movq %rbp, %rdi
movq %r15, %rsi
callq 0xf6a0
movl $0x1, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
movq %r13, %rsi
callq 0xf722
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x15e89
movq (%rdi), %rax
callq *0x10(%rax)
movl $0x2, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
movq %r13, %rsi
callq 0xf7a4
jmp 0x1601a
movb $0x1, %al
testb %al, %al
leaq 0x68(%rsp), %rax
leaq 0x30(%rsp), %rcx
cmovneq %rcx, %rax
movq (%rax), %rsi
testq %rsi, %rsi
je 0x15edb
movq (%rsi), %rax
movq %rbp, %rdi
callq *(%rax)
movq 0x10(%rsp), %rax
movq $0x0, 0x10(%rsp)
jmp 0x15edd
xorl %eax, %eax
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x15ef0
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x15f00
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x15f10
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x15f20
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x15f30
movq (%rdi), %rax
callq *0x10(%rax)
movl $0x2, %ebx
jmp 0x1609f
movq $0x0, 0x90(%rsp)
movq %rbx, 0x50(%rsp)
movq %r14, %rdi
movq %r13, %rsi
callq 0xaee2
movq %rax, %rdi
leaq 0x90(%rsp), %rsi
callq 0xae9e
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x15f79
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x90(%rsp)
jmp 0x16077
leaq 0x19ad7(%rip), %rcx     # 0x2fa68
cmpq (%rcx), %rax
jne 0x16589
movl $0x28, %edi
callq 0x7300
movl $0x7, 0x8(%rax)
leaq 0x1861e(%rip), %rcx     # 0x2e5d0
movq %rcx, (%rax)
xorps %xmm0, %xmm0
movups %xmm0, 0x10(%rax)
movq $0x0, 0x20(%rax)
movq %rax, 0x10(%rsp)
movq %rbp, %rdi
movq %r15, %rsi
callq 0xf6a0
movl $0x1, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
movq %r13, %rsi
callq 0xf722
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x15fff
movq (%rdi), %rax
callq *0x10(%rax)
movl $0x2, %edx
movq %r13, %rdi
movq %r12, %rsi
callq 0xf5d4
movq %rbp, %rdi
movq %r13, %rsi
callq 0xf7a4
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x1602a
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rax
movq 0x40(%rsp), %rcx
movq %rax, (%rcx)
jmp 0x1609a
movq $0x0, 0x88(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
leaq 0x88(%rsp), %rdx
callq 0x16ba6
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x1606b
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x88(%rsp)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x16086
callq 0xad5c
movq (%rsp), %rax
movq 0x40(%rsp), %rcx
movq %rax, (%rcx)
movq $0x0, (%rsp)
movl $0x1, %ebx
xorl %eax, %eax
testb %al, %al
je 0x16568
movq %rbp, %rdi
movq %r12, %rsi
xorl %edx, %edx
callq 0xf5d4
leaq 0x30(%rsp), %rdi
movq %rbp, %rsi
movq %r15, %rdx
callq 0x15aac
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x160d6
movq (%rdi), %rax
callq *0x10(%rax)
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x161ac
cmpl $0x7, 0x8(%rax)
jne 0x161ac
leaq 0x8(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0xf50e
movq %r14, %rdi
callq 0xd0ee
movq %rax, %rbx
movq %r14, %rdi
callq 0xd1ba
leaq 0x68(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
leaq 0x48(%rsp), %rcx
callq 0xcda6
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movaps 0x50(%rsp), %xmm0
movq 0x60(%rsp), %rax
movups 0x68(%rsp), %xmm1
movaps %xmm1, 0x50(%rsp)
movq 0x78(%rsp), %rcx
movq %rcx, 0x60(%rsp)
movaps 0x10(%rsp), %xmm1
movaps %xmm0, 0x10(%rsp)
movq %rax, 0x20(%rsp)
movups %xmm1, 0x68(%rsp)
movq $0x0, 0x78(%rsp)
movq %rbp, %rdi
callq 0xab8e
movq %r14, %rdi
callq 0xab8e
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1619d
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x30(%rsp), %rax
testq %rax, %rax
je 0x161f3
movl 0x8(%rax), %eax
jmp 0x161f5
movq %r12, %rdi
callq 0xd0ee
movq %rax, %rbx
addq $0x8, %rbx
movq %r12, %rdi
callq 0xd1ba
cmpq %rax, %rbx
je 0x1619d
movq %rbp, %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x15aac
movq %r13, %rdi
movq %rbp, %rsi
callq 0xabdc
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x161b7
movq (%rdi), %rax
callq *0x10(%rax)
jmp 0x161b7
xorl %eax, %eax
addl $-0x6, %eax
cmpl $0x3, %eax
ja 0x166d7
leaq 0xc530(%rip), %rcx      # 0x22738
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rbx
movq %rbx, %rsi
callq 0xf6bc
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0xf63a
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa65a
movq $0x0, 0x10(%rsp)
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
leaq 0x3f(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movq %r13, %r8
movq %rbx, %r9
callq 0x18178
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x16278
callq 0xad5c
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x16288
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x16298
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0xb8(%rsp)
movq %rax, 0xc0(%rsp)
testq %rax, %rax
je 0x16406
movq 0x18cfe(%rip), %rcx     # 0x2efc0
cmpb $0x0, (%rcx)
je 0x16402
incl 0x8(%rax)
jmp 0x16406
leaq 0x30(%rsp), %rdi
callq 0x16d32
movl $0x1, %ebx
movq 0x40(%rsp), %rdi
movq %r13, %rsi
callq *%rax
jmp 0x16550
leaq 0x30(%rsp), %rdi
callq 0x16dfa
movq %rax, %rbx
leaq 0xc8(%rsp), %rdi
movq %r15, %rsi
callq 0xa65a
movq 0x40(%rsp), %rdi
movq %r13, %rsi
leaq 0xc8(%rsp), %rdx
callq *%rbx
movq 0xd0(%rsp), %rdi
movl $0x1, %ebx
testq %rdi, %rdi
je 0x16550
callq 0xad5c
jmp 0x16550
leaq 0x8(%rsp), %rdi
leaq 0x30(%rsp), %rbx
movq %rbx, %rsi
callq 0xf6bc
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0xf63a
leaq 0x68(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0xa65a
movq $0x0, 0x10(%rsp)
leaq 0x18(%rsp), %rdi
movq %rbp, %rsi
leaq 0x3f(%rsp), %rdx
leaq 0x8(%rsp), %rcx
movq %r13, %r8
movq %rbx, %r9
callq 0x18178
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x163a7
callq 0xad5c
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x163b7
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x163c7
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x10(%rsp), %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0xa8(%rsp)
movq %rax, 0xb0(%rsp)
testq %rax, %rax
je 0x1649a
movq 0x18bcf(%rip), %rcx     # 0x2efc0
cmpb $0x0, (%rcx)
je 0x16496
incl 0x8(%rax)
jmp 0x1649a
lock
incl 0x8(%rax)
leaq 0x68(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0xa5ca
movq 0x68(%rsp), %rax
movq $0x0, 0x68(%rsp)
movq 0x80(%rsp), %rdi
movq %rax, 0x80(%rsp)
testq %rdi, %rdi
je 0x16441
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x16451
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x68(%rsp)
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x1646c
callq 0xad5c
leaq 0x68(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xf73e
movq 0x68(%rsp), %rax
movq $0x0, 0x68(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
jmp 0x16521
lock
incl 0x8(%rax)
leaq 0x68(%rsp), %rdi
leaq 0xa8(%rsp), %rsi
callq 0xa5ca
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x164be
callq 0xad5c
leaq 0x48(%rsp), %rbx
movq %rbx, %rdi
leaq 0x30(%rsp), %rsi
callq 0xf73e
leaq 0x8(%rsp), %rdi
movq %rbx, %rsi
leaq 0x68(%rsp), %rdx
callq 0x15aac
movq 0x8(%rsp), %rax
movq $0x0, 0x8(%rsp)
movq (%rsp), %rdi
movq %rax, (%rsp)
testq %rdi, %rdi
je 0x16503
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x16513
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x8(%rsp)
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x1652c
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x1653c
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x1654b
callq 0xad5c
movl $0x2, %ebx
movq %r13, %rdi
callq 0xab8e
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x16568
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x1657b
movq (%rdi), %rax
callq *0x10(%rax)
cmpl $0x2, %ebx
je 0x15b3d
jmp 0x16616
leaq 0x194e0(%rip), %rcx     # 0x2fa70
cmpq (%rcx), %rax
jne 0x165e9
movq %r12, %rdi
callq 0xd0ee
movq %rax, %rbx
addq $0x8, %rbx
movq %r12, %rdi
callq 0xd1ba
addq $-0x8, %rax
cmpq %rax, %rbx
je 0x165f2
leaq 0xa0(%rsp), %rdi
movq %rbx, %rsi
movq %r15, %rdx
callq 0x15aac
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x165db
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0xa0(%rsp)
jmp 0x165a0
xorl %ebx, %ebx
movb $0x1, %al
jmp 0x160a1
movq %r12, %rdi
movq %rbx, %rsi
callq 0xae9e
jmp 0x15f30
movq (%rsp), %rax
movq 0x40(%rsp), %rcx
movq %rax, (%rcx)
movq $0x0, (%rsp)
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x16629
movq (%rdi), %rax
callq *0x10(%rax)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x16638
movq (%rdi), %rax
callq *0x10(%rax)
movq 0x40(%rsp), %rax
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x10(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0xa65a
movq 0x10(%rsp), %rbx
movq %rsp, %rdi
callq 0xadcc
movq 0x40(%rsp), %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x16ada
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x16616
callq 0xad5c
jmp 0x16616
leaq 0x19392(%rip), %rax     # 0x2fa28
movq (%rax), %rsi
testq %rsi, %rsi
je 0x166c6
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *(%rax)
movq 0x10(%rsp), %rax
xorl %ecx, %ecx
movq %rcx, 0x10(%rsp)
movq 0x40(%rsp), %rdx
movq %rax, (%rdx)
movq %rcx, 0x10(%rsp)
jmp 0x16616
movq 0x40(%rsp), %rax
movq $0x0, (%rax)
jmp 0x16616
movl $0x28, %edi
callq 0x71b0
movq %rax, %r14
leaq 0xe8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0xc051(%rip), %rsi      # 0x22748
leaq 0xc060(%rip), %rdx      # 0x2275e
leaq 0xd8(%rsp), %rdi
callq 0xb2e0
movb $0x1, %bpl
leaq 0xd8(%rsp), %rsi
movq %r14, %rdi
callq 0xae24
xorl %ebp, %ebp
leaq 0x17629(%rip), %rsi     # 0x2dd50
leaq -0xb8c0(%rip), %rdx     # 0xae6e
movq %r14, %rdi
callq 0x75f0
jmp 0x16a33
jmp 0x16a33
jmp 0x1675f
jmp 0x16a15
jmp 0x1675f
jmp 0x16a15
jmp 0x16a15
jmp 0x16a33
jmp 0x1675f
jmp 0x16a15
movq %rax, %rbx
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x16772
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x50(%rsp)
jmp 0x16a18
jmp 0x16a15
jmp 0x16a15
jmp 0x16a33
jmp 0x167d3
movq %rax, %rbx
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x167a7
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x88(%rsp)
jmp 0x1684f
jmp 0x16a33
jmp 0x16820
jmp 0x16a33
jmp 0x16a15
jmp 0x16a33
jmp 0x16a3a
movq %rax, %rbx
jmp 0x1684f
jmp 0x16a3a
jmp 0x16a33
jmp 0x16820
jmp 0x16a33
jmp 0x16a15
jmp 0x16a33
movq %rax, %rbx
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x16aa4
callq 0xad5c
jmp 0x16aa4
jmp 0x16a33
movq %rax, %rbx
jmp 0x16888
movq %rax, %rbx
jmp 0x168a1
movq %rax, %rbx
jmp 0x168ba
jmp 0x16a33
movq %rax, %rbx
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x16843
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x90(%rsp)
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x16a85
callq 0xad5c
jmp 0x16a85
jmp 0x16a33
movq %rax, %rbx
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x1687f
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x8(%rsp)
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x16898
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x30(%rsp)
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x168b1
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x68(%rsp)
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x168ca
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x50(%rsp)
jmp 0x16a85
movq %rax, %rbx
movq 0xd8(%rsp), %rdi
cmpq %r15, %rdi
je 0x16900
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x7320
jmp 0x16900
movq %rax, %rbx
movb $0x1, %bpl
testb %bpl, %bpl
je 0x16a62
movq %r14, %rdi
callq 0x7260
jmp 0x16a62
movq %rax, %rbx
jmp 0x16ac3
movq %rax, %rbx
jmp 0x16992
movq %rax, %rbx
movq 0xc0(%rsp), %rdi
jmp 0x16988
jmp 0x169aa
jmp 0x169be
jmp 0x169f3
jmp 0x16a5f
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x16954
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x48(%rsp)
jmp 0x16962
movq %rax, %rbx
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x16972
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x68(%rsp)
jmp 0x16992
movq %rax, %rbx
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x16992
callq 0xad5c
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x16a62
callq 0xad5c
jmp 0x16a62
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x169c1
callq 0xad5c
jmp 0x169c1
movq %rax, %rbx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x169d1
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x48(%rsp)
jmp 0x169f6
jmp 0x169f3
jmp 0x16a5f
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
jmp 0x16997
jmp 0x169f3
jmp 0x16a5f
jmp 0x16a33
movq %rax, %rbx
movq 0x8(%rsp), %rdi
testq %rdi, %rdi
je 0x16a06
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x8(%rsp)
jmp 0x16a62
jmp 0x16a5f
jmp 0x16a5f
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x16a28
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x10(%rsp)
jmp 0x16a85
movq %rax, %rbx
jmp 0x16a85
jmp 0x16a3a
movq %rax, %rbx
jmp 0x16aa4
jmp 0x16a5f
movq %rax, %rbx
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x16a54
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x10(%rsp)
jmp 0x16a62
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0xab8e
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x16a7c
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x30(%rsp)
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x16a98
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x98(%rsp)
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x16ab7
movq (%rdi), %rax
callq *0x10(%rax)
movq $0x0, 0x80(%rsp)
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x16ad2
movq (%rdi), %rax
callq *0x10(%rax)
movq %rbx, %rdi
callq 0x7620