// File: /workspace/github_cpp_makefile_star2_O1/pixlark[P]Badge/src/compiler.cc
// Function: Compiler::compile_expr(Expr*)
void compile_expr(Expr * expr)
	{
		switch (expr->kind) {
		case EXPR_NOTHING:
			push(BC::create(BC_LOAD_CONST,
							Value::nothing(),
							expr->assoc));
			break;
		case EXPR_UNARY:
			compile_expr(expr->unary.expr);
			compile_operator(expr->unary.op, expr->assoc);
			break;
		case EXPR_BINARY:
			compile_expr(expr->binary.left);
			compile_expr(expr->binary.right);
			compile_operator(expr->binary.op, expr->assoc);
			break;
		case EXPR_INTEGER:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->integer),
							expr->assoc));
			break;
		case EXPR_STRING:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->string),
							expr->assoc));
			push(BC::create(BC_SYMBOL_TO_STRING,
							expr->assoc));
			break;
		case EXPR_VARIABLE:
			push(BC::create(BC_LOAD_CONST,
							Value::raise(expr->variable),
							expr->assoc));
			push(BC::create(BC_RESOLVE_BINDING,
							expr->assoc));
			break;
		case EXPR_SCOPE: {
			auto body = expr->scope.body;
			auto terminator = expr->scope.terminator;
			push(BC::create(BC_ENTER_SCOPE, expr->assoc));
			for (int i = 0; i < body.size; i++) {
				compile_stmt(body[i]);
			}
			if (terminator) {
				compile_expr(terminator);
			} else {
				push(BC::create(BC_LOAD_CONST,
								Value::nothing(),
								expr->assoc));
			}
			push(BC::create(BC_EXIT_SCOPE, expr->assoc));
		} break;
		case EXPR_LAMBDA: {
			auto params = expr->lambda.parameters;
			for (int i = 0; i < params.size; i++) {
				push(BC::create(BC_LOAD_CONST,
								Value::raise(params[i]),
								expr->assoc));
			}
			push(BC::create(BC_LOAD_CONST,
							Value::raise(params.size),
							expr->assoc));
			Compiler compiler;
			compiler.init(blocks);
			compiler.compile_expr(expr->lambda.body);
			compiler.finalize();
			compiler.destroy();
			
			push(BC::create(BC_CONSTRUCT_FUNCTION,
							compiler.block_reference,
							expr->assoc));
		} break;
		case EXPR_FUNCALL: {
			auto args = expr->funcall.args;
			// Args are pushed in reverse order
			for (int i = args.size - 1; i >= 0; i--) {
				compile_expr(args[i]);
			}
			push(BC::create(BC_LOAD_CONST,
							Value::raise(args.size),
							expr->assoc));
			compile_expr(expr->funcall.func);
			push(BC::create(BC_POP_AND_CALL_FUNCTION,
							expr->assoc));
		} break;
		case EXPR_IF: {
			List<int> end_jumps;
			end_jumps.alloc();

			auto _if = expr->if_expr;
			assert(_if.conditions.size == _if.expressions.size);
			for (int i = 0; i < _if.conditions.size; i++) {
				compile_expr(_if.conditions[i]);
				push(BC::create(BC_NOT, _if.conditions[i]->assoc));
				push(BC::create(BC_POP_JUMP, _if.conditions[i]->assoc));
				int skip_pos = bytecode.size - 1;
				compile_expr(_if.expressions[i]);
				push(BC::create(BC_JUMP, _if.conditions[i]->assoc));
				end_jumps.push(bytecode.size - 1);
				bytecode[skip_pos].arg.integer = bytecode.size;
			}
			if (_if.else_expr) {
				compile_expr(_if.else_expr);
			} else {
				push(BC::create(BC_LOAD_CONST,
								Value::nothing(),
								expr->assoc));
			}
			push(BC::create(BC_NOP, expr->assoc));
			for (int i = 0; i < end_jumps.size; i++) {
				assert(bytecode[end_jumps[i]].kind == BC_JUMP);
				bytecode[end_jumps[i]].arg.integer = bytecode.size - 1;
			}
			
			end_jumps.dealloc();
		} break;
		case EXPR_DIRECTIVE: {
			auto name = expr->directive.name;
			auto args = expr->directive.arguments;
			if (name == Intern::intern("builtin")) {
				// @builtin directive
				if (args.size != 1) {
					fatal_assoc(expr->assoc, "@builtin directive expects one argument");
				}
				// TODO(pixlark): This is a little bit hacky because
				// it's not really a variable, it's meant to be a
				// compile-time symbol. They are technically the same
				// thing but still it feels like we're trying to build
				// a directive-based DSL here out of an AST that was
				// parsed for something else. Maybe there should be a
				// new subtree type for compile-time expressions.
				if (args[0]->kind != EXPR_VARIABLE) {
					fatal_assoc(args[0]->assoc, "@builtin directive expects constant symbol");
				}
				auto builtin_symbol = args[0]->variable;
				// Builtin binding
				auto builtin = Builtins::get_builtin(builtin_symbol);
				Value value = Value::create(TYPE_BUILTIN);
				value.builtin = builtin;
				push(BC::create(BC_LOAD_CONST, value, expr->assoc));
			} else if (name == Intern::intern("struct")) {
				// @struct directive
				auto args = expr->directive.arguments;
				for (int i = args.size - 1; i >= 0; i--) {
					if (args[i]->kind != EXPR_VARIABLE) {
						fatal_assoc(args[i]->assoc, "@struct directive expects constant symbols");
					}
					push(BC::create(BC_LOAD_CONST, Value::raise(args[i]->variable), args[i]->assoc));
				}
				push(BC::create(BC_LOAD_CONST, Value::raise(args.size), expr->assoc));
				push(BC::create(BC_CONSTRUCT_CONSTRUCTOR, expr->assoc));
			} else if (name == Intern::intern("import")) {
				// @import directive
				if (args.size != 1) {
					fatal_assoc(expr->assoc, "@import directive expects one argument");
				}
				const char * path;
				if (args[0]->kind == EXPR_STRING) {
					auto filename = args[0]->string;
					path = Files::path_for_file(filename);
				} else if (args[0]->kind == EXPR_VARIABLE) {
					auto filename = args[0]->variable;
					path = Files::stdlib_file(filename);
				} else {
					fatal_assoc(args[0]->assoc, "@import directive expects constant string or symbol");
				}
				defer { free((void*) path); };
				// Compile file into our global Blocks
				size_t block_reference = blocks->upcoming_block();
				auto source = load_and_compile_file(blocks, path);
				if (!source) {
					fatal_assoc(args[0]->assoc, "Source file '%s' does not exist", path);
				}
				// @Warning: Implicit cast from size_t->int
				push(BC::create(BC_LOAD_CONST, Value::raise(block_reference), expr->assoc));
				push(BC::create(BC_RUN_FILE_UNIT, expr->assoc));
			} else if (name == Intern::intern("export")) {
				for (int i = 0; i < args.size; i++) {
					if (args[i]->kind != EXPR_VARIABLE) {
						fatal_assoc(args[i]->assoc, "@export directive expects constant symbols");
					}
					push(BC::create(BC_LOAD_CONST, Value::raise(args[i]->variable), args[i]->assoc));
					push(BC::create(BC_EXPORT_SYMBOL, args[i]->assoc));
				}
			} else {
				// No such directive
				fatal_assoc(expr->assoc, "No such directive as '%s'", name);
			}
		} break;
		case EXPR_THIS: {
			push(BC::create(BC_THIS_FUNCTION, expr->assoc));
		} break;
		case EXPR_FIELD: {
			compile_expr(expr->field.left);
			push(BC::create(BC_LOAD_CONST, Value::raise(expr->field.right), expr->assoc));
			push(BC::create(BC_RESOLVE_FIELD, expr->assoc));
		} break;
		case EXPR_LOOP: {
            int push_body_pos = bytecode.size;
            push(BC::create(BC_PUSH_BODY, expr->assoc));

			// Create a dummy value to be popped by first iteration
			push(BC::create(BC_LOAD_CONST, Value::nothing(), expr->assoc));
            int beginning = bytecode.size;

			push(BC::create(BC_POP_AND_DISCARD, expr->assoc));
            compile_expr(expr->loop.body);

			push(BC::create(BC_DUPLICATE, expr->assoc));
            push(BC::create(BC_NOT, expr->assoc));
            push(BC::create(BC_POP_JUMP, beginning, expr->assoc));
            //push(BC::create(BC_LOAD_CONST, Value::nothing(), expr->assoc));

            int exit_pos = bytecode.size;
            push(BC::create(BC_NOP, expr->assoc));
            bytecode[push_body_pos].arg.integer = exit_pos;
		} break;
		case EXPR_ON: {
			push(BC::create(BC_GET_CALL_FLAG, Value::raise(expr->on.to_bind), expr->assoc));
			push(BC::create(BC_NOT, expr->assoc));
			
			int jump_pos = bytecode.size;
			push(BC::create(BC_POP_JUMP, expr->assoc));
			
			push(BC::create(BC_LOAD_CONST, Value::raise(expr->on.to_bind), expr->assoc));
			push(BC::create(BC_CREATE_BINDING, expr->assoc));
			compile_expr(expr->on.body);
			
			int exit_pos = bytecode.size;
			push(BC::create(BC_NOP, expr->assoc));
			bytecode[jump_pos].arg.integer = exit_pos;
		} break;
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movl (%rsi), %eax
cmpq $0xe, %rax
ja 0x880a
movq %rdi, %rbx
leaq 0x42b4(%rip), %rcx      # 0xb21c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
movq %rsi, -0x30(%rbp)
jmpq *%rax
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7f3d
testq %rax, %rax
js 0x7efd
cvtsi2ss %rax, %xmm0
jmp 0x7f12
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x780a
testq %rax, %rax
js 0x77c6
cvtsi2ss %rax, %xmm0
jmp 0x77db
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7aca
testq %rax, %rax
js 0x7a8a
cvtsi2ss %rax, %xmm0
jmp 0x7a9f
movq %rsi, %r14
movq 0x10(%rsi), %rsi
movq %rbx, %rdi
callq 0x6f3e
movl 0x4(%r14), %edx
movl 0x8(%r14), %esi
jmp 0x74a8
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x6f3e
movq -0x30(%rbp), %rsi
movq 0x10(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7b2d
testq %rax, %rax
js 0x7ae9
cvtsi2ss %rax, %xmm0
jmp 0x7afe
movq $0x0, -0xb0(%rbp)
movq $0x4, -0xa8(%rbp)
movq 0x9f5a(%rip), %rax      # 0x10fd0
movq %rax, -0xa0(%rbp)
movq 0x9f44(%rip), %rax      # 0x10fc8
movq %rax, -0x98(%rbp)
movl $0x10, %edi
callq 0x1200
movq -0x30(%rbp), %rcx
movq %rax, -0xb8(%rbp)
movq 0x10(%rcx), %rdx
movq 0x38(%rcx), %rax
movq %rax, -0x38(%rbp)
cmpq %rax, %rdx
jne 0x8b04
movq 0x58(%rcx), %rax
movq %rax, -0x40(%rbp)
testq %rdx, %rdx
je 0x72e1
movq -0x30(%rbp), %rax
movq 0x8(%rax), %r12
movq 0x30(%rax), %rax
movq %rax, -0x50(%rbp)
xorl %r14d, %r14d
movq %rdx, -0x48(%rbp)
movq (%r12,%r14,8), %rsi
movq %rbx, %rdi
callq 0x6f3e
movq (%r12,%r14,8), %rax
movl 0x4(%rax), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7153
testq %rax, %rax
js 0x7110
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7128
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3ec4(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x19, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movq (%r12,%r14,8), %rax
movl 0x4(%rax), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x71dc
testq %rax, %rax
js 0x7199
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x71b1
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3e3b(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1b, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
cmpq %r14, -0x38(%rbp)
je 0x8a92
movq 0x8(%rbx), %r15
movq -0x50(%rbp), %rax
movq (%rax,%r14,8), %rsi
movq %rbx, %rdi
callq 0x6f3e
movq (%r12,%r14,8), %rax
movl 0x4(%rax), %r13d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7283
testq %rax, %rax
js 0x7240
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7258
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3d94(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1a, (%rax,%rcx,8)
movl %r13d, 0x4(%rax,%rcx,8)
movl 0x8(%rbx), %esi
decl %esi
leaq -0xb8(%rbp), %rdi
callq 0x8d58
movq 0x8(%rbx), %rax
decl %r15d
movslq %r15d, %rcx
cmpq %rcx, %rax
jbe 0x8aa9
movq (%rbx), %rdx
leaq (%rcx,%rcx,2), %rcx
movl %eax, 0x8(%rdx,%rcx,8)
incq %r14
movq -0x48(%rbp), %rdx
cmpq %r14, %rdx
jne 0x70dd
movq -0x40(%rbp), %rsi
testq %rsi, %rsi
je 0x7794
movq %rbx, %rdi
callq 0x6f3e
movq -0x30(%rbp), %rsi
jmp 0x8901
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7c1f
testq %rax, %rax
js 0x7bdb
cvtsi2ss %rax, %xmm0
jmp 0x7bf0
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7d11
testq %rax, %rax
js 0x7ccd
cvtsi2ss %rax, %xmm0
jmp 0x7ce2
movq 0x10(%rsi), %r14
testq %r14, %r14
je 0x7425
movq 0x8(%rsi), %rdi
xorl %r12d, %r12d
movl $0x2, %r8d
movq %rdi, -0x38(%rbp)
movq (%rdi,%r12,8), %r15
movl 0x4(%rsi), %r13d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x73f3
testq %rax, %rax
js 0x73a2
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x73ba
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3c32(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdi
movl $0x2, %r8d
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl %r8d, (%rax,%rcx,8)
movl %r13d, 0x4(%rax,%rcx,8)
movl %r8d, 0x8(%rax,%rcx,8)
movq %r15, 0x10(%rax,%rcx,8)
incq %r12
cmpq %r12, %r14
jne 0x737b
movl %r14d, %r14d
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7e02
testq %rax, %rax
js 0x7dbf
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7dd7
movl 0x4(%rsi), %r15d
movl 0x8(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7fb2
testq %rax, %rax
js 0x7f72
cvtsi2ss %rax, %xmm0
jmp 0x7f87
movq %rsi, %r14
movq 0x8(%rsi), %rsi
movq %rbx, %rdi
callq 0x6f3e
movq 0x18(%r14), %rsi
movq %rbx, %rdi
callq 0x6f3e
movl 0x4(%r14), %edx
movl 0x10(%r14), %esi
movq %rbx, %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x8b9a
movq 0x8(%rbx), %r15
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r14d
leaq 0x1(%r15), %rcx
cmpq %rcx, %rax
jae 0x8027
testq %rax, %rax
js 0x7fe3
cvtsi2ss %rax, %xmm0
jmp 0x7ff8
movq 0x8(%rsi), %r14
movq 0x10(%rsi), %r12
movq 0x30(%rsi), %r15
movl 0x4(%rsi), %r13d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x83ff
testq %rax, %rax
js 0x83bf
cvtsi2ss %rax, %xmm0
jmp 0x83d4
movq 0x8(%rsi), %r15
movq 0x10(%rsi), %r13
movq 0x18(%rsi), %r12
leaq 0x43f5(%rip), %rdi      # 0xb92c
callq 0x15dd
cmpq %rax, %r15
je 0x773e
leaq 0x443b(%rip), %rdi      # 0xb987
callq 0x15dd
cmpq %rax, %r15
je 0x8589
leaq 0x4458(%rip), %rdi      # 0xb9b9
callq 0x15dd
cmpq %rax, %r15
je 0x86de
leaq 0x44c5(%rip), %rdi      # 0xba3b
callq 0x15dd
cmpq %rax, %r15
jne 0x8b3f
testq %r12, %r12
je 0x880a
xorl %r15d, %r15d
movq %r13, -0x38(%rbp)
movq (%r13,%r15,8), %rax
cmpl $0x3, (%rax)
jne 0x8ae7
movq (%r13,%r15,8), %rax
movq 0x8(%rax), %r13
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7611
testq %rax, %rax
js 0x75ce
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x75e6
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3a06(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r13, 0x10(%rax,%rcx,8)
movq -0x38(%rbp), %r13
movq (%r13,%r15,8), %rax
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x76a9
testq %rax, %rax
js 0x7666
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x767e
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x396e(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x24, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
incq %r15
cmpq %r15, %r12
jne 0x7594
jmp 0x880a
movq 0x18(%rsi), %r14
movl %r14d, %eax
decl %eax
js 0x770c
movq -0x30(%rbp), %rax
movq 0x10(%rax), %r15
movl %r14d, %r12d
decl %r12d
cmpq %r12, %r14
jbe 0x8a92
movq (%r15,%r12,8), %rsi
movq %rbx, %rdi
callq 0x6f3e
testl %r12d, %r12d
jg 0x76ef
movl %r14d, %r14d
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x84c9
testq %rax, %rax
js 0x8485
cvtsi2ss %rax, %xmm0
jmp 0x849a
cmpq $0x1, %r12
jne 0x8b23
movq (%r13), %rax
cmpl $0x3, (%rax)
jne 0x8b33
movq (%r13), %rax
movq 0x8(%rax), %rdi
callq 0x4d8e
movq %rax, %r15
movq -0x30(%rbp), %rax
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x885c
testq %rax, %rax
js 0x881c
cvtsi2ss %rax, %xmm0
jmp 0x8831
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x88d1
testq %rax, %rax
js 0x888a
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x88a2
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3811(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x25, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x2, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x78a0
testq %rax, %rax
js 0x7859
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7871
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x377b(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x19, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq 0x8(%rbx), %r15
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r14d
leaq 0x1(%r15), %rcx
cmpq %rcx, %rax
jae 0x792a
testq %rax, %rax
js 0x78e3
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x78fb
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x36f1(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1b, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq 0x8(%rsi), %r14
movl 0x4(%rsi), %r12d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x79b7
testq %rax, %rax
js 0x7970
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7988
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3664(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7a4a
testq %rax, %rax
js 0x7a03
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7a1b
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x35d1(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x4, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq %rsi, %r12
movq 0x10(%rsi), %rsi
movq %rbx, %rdi
callq 0x6f3e
movq 0x8(%rbx), %r14
movq 0x10(%rbx), %rax
movl 0x4(%r12), %r12d
jmp 0x8327
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x354d(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x15, (%rax,%rcx,8)
jmp 0x8805
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x34ee(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7bbc
testq %rax, %rax
js 0x7b79
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7b91
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x345b(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1f, (%rax,%rcx,8)
jmp 0x8805
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x33fc(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7cae
testq %rax, %rax
js 0x7c6b
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7c83
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3369(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x16, (%rax,%rcx,8)
jmp 0x8805
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x330a(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, %edx
movl %edx, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl %edx, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7da0
testq %rax, %rax
js 0x7d5d
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7d75
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3277(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x6, (%rax,%rcx,8)
jmp 0x8805
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3215(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x1, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movq 0x28(%rbx), %rsi
leaq -0xb8(%rbp), %r15
movq %r15, %rdi
callq 0x5a9e
movq -0x30(%rbp), %r12
movq 0x30(%r12), %rsi
movq %r15, %rdi
callq 0x6f3e
movq %r15, %rdi
callq 0x5f10
movq (%r15), %rdi
callq *0x20(%r15)
xorps %xmm0, %xmm0
movups %xmm0, 0x8(%r15)
movq 0x30(%r15), %r14
movl 0x4(%r12), %r15d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x7ed4
testq %rax, %rax
js 0x7e91
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x7ea9
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3143(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x12, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movq %r14, 0x8(%rax,%rcx,8)
jmp 0x880a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x30da(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
jmp 0x880a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x3065(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x1, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
jmp 0x880a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2ff4(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x21, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x80b0
testq %rax, %rax
js 0x8069
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8081
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2f6b(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
movq 0x8(%rbx), %r12
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r14d
leaq 0x1(%r12), %rcx
cmpq %rcx, %rax
jae 0x8148
testq %rax, %rax
js 0x8105
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x811d
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2ecf(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rsi
movq %rbx, %rdi
callq 0x6f3e
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x81e5
testq %rax, %rax
js 0x819e
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x81b6
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2e36(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x3, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x826e
testq %rax, %rax
js 0x8227
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x823f
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2dad(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x19, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x82f7
testq %rax, %rax
js 0x82b0
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x82c8
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2d24(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1b, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl %r12d, 0x8(%rax,%rcx,8)
movq 0x8(%rbx), %r14
movq 0x10(%rbx), %rax
movl 0x4(%rsi), %r12d
leaq 0x1(%r14), %rcx
cmpq %rcx, %rax
jae 0x8382
testq %rax, %rax
js 0x833f
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8357
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2c95(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x0, (%rax,%rcx,8)
movl %r12d, 0x4(%rax,%rcx,8)
movslq %r15d, %rax
cmpq %rax, 0x8(%rbx)
jbe 0x8aa9
movq (%rbx), %rcx
leaq (%rax,%rax,2), %rax
movl %r14d, 0x8(%rcx,%rax,8)
jmp 0x880a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2c18(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1c, (%rax,%rcx,8)
movl %r13d, 0x4(%rax,%rcx,8)
testq %r12, %r12
je 0x843a
xorl %r13d, %r13d
movq (%r14,%r13,8), %rsi
movq %rbx, %rdi
callq 0x5b08
incq %r13
cmpq %r13, %r12
jne 0x8426
testq %r15, %r15
je 0x8453
movq %rbx, %rdi
movq %r15, %rsi
callq 0x6f3e
movq -0x30(%rbp), %rsi
jmp 0x8785
movq -0x30(%rbp), %rsi
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x8755
testq %rax, %rax
js 0x870e
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8726
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2b52(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r15d, 0x4(%rax,%rcx,8)
movl $0x1, 0x8(%rax,%rcx,8)
movq %r14, 0x10(%rax,%rcx,8)
movq %rsi, %r14
movq 0x8(%rsi), %rsi
movq %rbx, %rdi
callq 0x6f3e
movl 0x4(%r14), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x856a
testq %rax, %rax
js 0x8527
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x853f
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x2aad(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x13, (%rax,%rcx,8)
jmp 0x8805
movq -0x30(%rbp), %rsi
movq 0x18(%rsi), %rdi
movl %edi, %eax
decl %eax
js 0x8670
movq 0x10(%rsi), %r15
movl $0x2, %r8d
movl %edi, %r13d
movq %rdi, -0x38(%rbp)
decl %r13d
cmpq %r13, %rdi
jbe 0x8a92
movq (%r15,%r13,8), %rax
cmpl $0x3, (%rax)
jne 0x8af3
movq (%r15,%r13,8), %rax
movq 0x8(%rax), %r12
movl 0x4(%rax), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x8641
testq %rax, %rax
js 0x85f0
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x8608
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x29e4(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq -0x38(%rbp), %rdi
movl $0x2, %r8d
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl %r8d, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl %r8d, 0x8(%rax,%rcx,8)
movq %r12, 0x10(%rax,%rcx,8)
testl %r13d, %r13d
jg 0x85ac
movl %edi, %eax
movl 0x4(%rsi), %ecx
movl $0x2, -0x80(%rbp)
movl $0x1, -0x78(%rbp)
movq %rax, -0x70(%rbp)
movl %ecx, -0x7c(%rbp)
movq -0x70(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x80(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
movq %rsi, %r14
callq 0x5e7c
movl 0x4(%r14), %eax
movl $0x1e, -0xe8(%rbp)
movl %eax, -0xe4(%rbp)
movq -0xd8(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0xe8(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x5e7c
jmp 0x880a
cmpq $0x1, %r12
jne 0x8b4f
movq (%r13), %rax
movl (%rax), %ecx
cmpl $0x3, %ecx
je 0x89e9
cmpl $0x2, %ecx
jne 0x8b77
movq 0x8(%rax), %rdi
callq 0x2157
jmp 0x89f2
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x28c6(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x87eb
testq %rax, %rax
js 0x87a8
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x87c0
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x282c(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x1d, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x27bb(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x3, 0x8(%rax,%rcx,8)
movq %r15, 0x10(%rax,%rcx,8)
jmp 0x880a
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x274a(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq -0x30(%rbp), %rsi
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x2, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
movl $0x0, 0x8(%rax,%rcx,8)
movq $0x0, 0x10(%rax,%rcx,8)
movl 0x4(%rsi), %r14d
movq 0x8(%rbx), %rcx
movq 0x10(%rbx), %rax
incq %rcx
cmpq %rcx, %rax
jae 0x8967
testq %rax, %rax
js 0x8924
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x893c
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
addss %xmm0, %xmm0
cvttss2si %xmm0, %rax
movq %rax, %rcx
sarq $0x3f, %rcx
subss 0x26b0(%rip), %xmm0     # 0xb004
cvttss2si %xmm0, %rsi
andq %rcx, %rsi
orq %rax, %rsi
movq %rbx, %rdi
callq 0x8e48
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
leaq 0x1(%rcx), %rdx
movq %rdx, 0x8(%rbx)
leaq (%rcx,%rcx,2), %rcx
movl $0x0, (%rax,%rcx,8)
movl %r14d, 0x4(%rax,%rcx,8)
cmpq $0x0, -0xb0(%rbp)
je 0x89d0
xorl %eax, %eax
movq -0xb8(%rbp), %rcx
movslq (%rcx,%rax,4), %rdx
movq 0x8(%rbx), %rcx
cmpq %rdx, %rcx
jbe 0x8aa9
movq (%rbx), %rsi
leaq (%rdx,%rdx,2), %rdx
cmpl $0x1a, (%rsi,%rdx,8)
jne 0x8ac8
leaq (%rsi,%rdx,8), %rdx
decl %ecx
movl %ecx, 0x8(%rdx)
incq %rax
cmpq %rax, -0xb0(%rbp)
ja 0x8992
leaq -0xb0(%rbp), %rbx
movq -0x8(%rbx), %rdi
callq *0x18(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, (%rbx)
jmp 0x880a
movq 0x8(%rax), %rdi
callq 0x2074
movq %rax, %r15
movq 0x28(%rbx), %rdi
movl 0x8(%rdi), %r14d
movq %rax, %rsi
callq 0x4e11
testq %rax, %rax
movq -0x30(%rbp), %rax
je 0x8b5f
movl 0x4(%rax), %eax
movl $0x2, -0x68(%rbp)
movl $0x1, -0x60(%rbp)
movq %r14, -0x58(%rbp)
movl %eax, -0x64(%rbp)
movq -0x58(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0x68(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x5e7c
movq -0x30(%rbp), %rax
movl 0x4(%rax), %eax
movl $0x23, -0xd0(%rbp)
movl %eax, -0xcc(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, 0x10(%rsp)
movups -0xd0(%rbp), %xmm0
movups %xmm0, (%rsp)
movq %rbx, %rdi
callq 0x5e7c
movq %r15, %rdi
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x11f8
leaq 0x2d12(%rip), %rdi      # 0xb7ab
leaq 0x2d18(%rip), %rsi      # 0xb7b8
leaq 0x3819(%rip), %rcx      # 0xc2c0
jmp 0x8abe
leaq 0x2cfb(%rip), %rdi      # 0xb7ab
leaq 0x2d01(%rip), %rsi      # 0xb7b8
leaq 0x2ff2(%rip), %rcx      # 0xbab0
movl $0x7b, %edx
callq 0x10d0
leaq 0x2e36(%rip), %rdi      # 0xb905
leaq 0x2dfb(%rip), %rsi      # 0xb8d1
leaq 0x2e04(%rip), %rcx      # 0xb8e1
movl $0xb8, %edx
callq 0x10d0
movl 0x4(%rax), %edi
leaq 0x2f51(%rip), %rsi      # 0xba42
jmp 0x8afd
movl 0x4(%rax), %edi
leaq 0x2e91(%rip), %rsi      # 0xb98e
xorl %eax, %eax
callq 0x1c80
leaq 0x2d9a(%rip), %rdi      # 0xb8a5
leaq 0x2dbf(%rip), %rsi      # 0xb8d1
leaq 0x2dc8(%rip), %rcx      # 0xb8e1
movl $0xa4, %edx
callq 0x10d0
movq -0x30(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x2e03(%rip), %rsi      # 0xb934
jmp 0x8afd
movl 0x4(%rax), %edi
leaq 0x2e1f(%rip), %rsi      # 0xb95c
jmp 0x8afd
movq -0x30(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x2f20(%rip), %rsi      # 0xba6d
jmp 0x8b6d
movq -0x30(%rbp), %rax
movl 0x4(%rax), %edi
leaq 0x2e63(%rip), %rsi      # 0xb9c0
jmp 0x8afd
movq (%r13), %rax
movl 0x4(%rax), %edi
leaq 0x2eae(%rip), %rsi      # 0xba1b
movq %r15, %rdx
xorl %eax, %eax
callq 0x1c80
movl 0x4(%rax), %edi
leaq 0x2e66(%rip), %rsi      # 0xb9e7
jmp 0x8afd
movq %rax, %rbx
movq %r15, %rdi
callq 0x11f8
movq %rbx, %rdi
callq 0x11c0
nop