// File: /workspace/github_c_makefile_star2_O0/been-jamming[P]MinimalCC/compile.c
// Function: compile_statement
void compile_statement(char **c, FILE *output_file){
	value expression_output;
	unsigned int label_num0;
	unsigned int label_num1;
	unsigned int label_num2;
	unsigned int label_num3;
	int prev_break_label;
	int prev_continue_label;
	int prev_loop_variables_size;

	skip_whitespace(c);
	if(!strncmp(*c, "if", 2) && !alphanumeric((*c)[2])){
		*c += 2;
		skip_whitespace(c);
		if(**c != '('){
			snprintf(error_message, sizeof(error_message), "Expected '('");
			do_error(1);;
		}
		++*c;
		compile_root_expression(&expression_output, c, 1, 0, output_file);
		cast(&expression_output, INT_TYPE, 0, output_file);
		reset_stack_pos(&expression_output, output_file);
		label_num0 = num_labels;
		num_labels++;
		if(expression_output.data.type == data_register){
			fprintf(output_file, "beq $s%d, $zero, __L%d\n", expression_output.data.reg, label_num0);
		} else if(expression_output.data.type == data_stack){
			fprintf(output_file, "beq $t0, $zero, __L%d\n", label_num0);
		}
		deallocate(expression_output.data);
		skip_whitespace(c);
		if(**c != ')'){
			snprintf(error_message, sizeof(error_message), "Expected ')'");
			do_error(1);
		}
		++*c;
		skip_whitespace(c);
		compile_statement(c, output_file);
		skip_whitespace(c);
		if(!strncmp(*c, "else", 2) && !alphanumeric((*c)[4])){
			*c += 4;
			label_num1 = num_labels;
			num_labels++;
			fprintf(output_file, "j __L%d\n", label_num1);
			fprintf(output_file, "\n__L%d:\n", label_num0);
			skip_whitespace(c);
			compile_statement(c, output_file);
			fprintf(output_file, "\n__L%d:\n", label_num1);
		} else {
			fprintf(output_file, "\n__L%d:\n", label_num0);
		}
	} else if(!strncmp(*c, "while", 5) && !alphanumeric((*c)[5])){
		*c += 5;
		skip_whitespace(c);
		if(**c != '('){
			snprintf(error_message, sizeof(error_message), "Expected '('");
			do_error(1);
		}
		++*c;
		label_num0 = num_labels;
		label_num1 = num_labels + 1;
		num_labels += 2;

		prev_break_label = break_label;
		prev_continue_label = continue_label;
		prev_loop_variables_size = loop_variables_size;
		break_label = label_num1;
		continue_label = label_num0;
		loop_variables_size = variables_size;

		fprintf(output_file, "\n__L%d:\n", label_num0);
		compile_root_expression(&expression_output, c, 1, 0, output_file);
		cast(&expression_output, INT_TYPE, 0, output_file);
		reset_stack_pos(&expression_output, output_file);
		if(expression_output.data.type == data_register){
			fprintf(output_file, "beq $s%d, $zero, __L%d\n", expression_output.data.reg, label_num1);
		} else if(expression_output.data.type == data_stack){
			fprintf(output_file, "beq $t0, $zero, __L%d\n", label_num1);
		}
		deallocate(expression_output.data);
		skip_whitespace(c);
		if(**c != ')'){
			snprintf(error_message, sizeof(error_message), "Expected ')'");
			do_error(1);
		}
		++*c;
		skip_whitespace(c);
		compile_statement(c, output_file);
		fprintf(output_file, "j __L%d\n", label_num0);
		fprintf(output_file, "\n__L%d:\n", label_num1);

		loop_variables_size = prev_loop_variables_size;
		break_label = prev_break_label;
		continue_label = prev_continue_label;
	} else if(!strncmp(*c, "for", 3) && !alphanumeric((*c)[3])){
		*c += 3;
		skip_whitespace(c);
		if(**c != '('){
			snprintf(error_message, sizeof(error_message), "Expected '('");
			do_error(1);
		}
		++*c;
		label_num0 = num_labels;
		label_num1 = num_labels + 1;
		label_num2 = num_labels + 2;
		label_num3 = num_labels + 3;
		num_labels += 4;

		prev_break_label = break_label;
		prev_continue_label = continue_label;
		prev_loop_variables_size = loop_variables_size;
		break_label = label_num1;
		continue_label = label_num3;
		loop_variables_size = variables_size;

		skip_whitespace(c);
		if(**c != ';'){
			compile_root_expression(&expression_output, c, 1, 0, output_file);
			reset_stack_pos(&expression_output, output_file);
			deallocate(expression_output.data);
			skip_whitespace(c);
			if(**c != ';'){
				snprintf(error_message, sizeof(error_message), "Expected ';'");
				do_error(1);
			}
		}
		++*c;
		fprintf(output_file, "\n__L%d:\n", label_num0);
		skip_whitespace(c);
		if(**c != ';'){
			compile_root_expression(&expression_output, c, 1, 0, output_file);
			cast(&expression_output, INT_TYPE, 0, output_file);
			reset_stack_pos(&expression_output, output_file);
			if(expression_output.data.type == data_register){
				fprintf(output_file, "beq $s%d, $zero, __L%d\n", expression_output.data.reg, label_num1);
			} else if(expression_output.data.type == data_stack){
				fprintf(output_file, "beq $t0, $zero, __L%d\n", label_num1);
			}
			deallocate(expression_output.data);
			skip_whitespace(c);
			if(**c != ';'){
				snprintf(error_message, sizeof(error_message), "Expected ';'");
				do_error(1);
			}
		}
		++*c;
		fprintf(output_file, "j __L%d\n\n__L%d:\n", label_num2, label_num3);
		skip_whitespace(c);
		if(**c != ')'){
			compile_root_expression(&expression_output, c, 1, 0, output_file);
			reset_stack_pos(&expression_output, output_file);
			deallocate(expression_output.data);
			skip_whitespace(c);
			if(**c != ')'){
				snprintf(error_message, sizeof(error_message), "Expected '('");
				do_error(1);
			}
		}
		++*c;
		fprintf(output_file, "j __L%d\n\n__L%d:\n", label_num0, label_num2);
		skip_whitespace(c);
		compile_statement(c, output_file);
		fprintf(output_file, "j __L%d\n\n__L%d:\n", label_num3, label_num1);

		loop_variables_size = prev_loop_variables_size;
		break_label = prev_break_label;
		continue_label = prev_continue_label;
	} else if(!strncmp(*c, "return", 6) && !alphanumeric((*c)[6])){
		*c += 6;
		skip_whitespace(c);
		if(types_equal(&return_type, &VOID_TYPE)){
			if(**c != ';'){
				snprintf(error_message, sizeof(error_message), "Expected ';' for return in void function");
				do_error(1);
			}
			++*c;
		} else {
			compile_root_expression(&expression_output, c, 1, 0, output_file);
			if(**c != ';'){
				snprintf(error_message, sizeof(error_message), "Expected ';'");
				do_error(1);
			}
			++*c;
			cast(&expression_output, return_type, 1, output_file);
			reset_stack_pos(&expression_output, output_file);
			if(expression_output.data.type == data_register){
				fprintf(output_file, "sw $s%d, %d($sp)\n", expression_output.data.reg, variables_size);
			} else if(expression_output.data.type == data_stack){
				fprintf(output_file, "sw $t0, %d($sp)\n", variables_size);
			}
			deallocate(expression_output.data);
		}
		fprintf(output_file, "addi $sp, $sp, %d\n", variables_size - num_args*4);
		fprintf(output_file, "lw $ra, %d($sp)\n", 4 + num_args*4);
		fprintf(output_file, "jr $ra\n");
	} else if(!strncmp(*c, "break", 5) && !alphanumeric((*c)[5])){
		*c += 5;
		skip_whitespace(c);
		if(**c != ';'){
			snprintf(error_message, sizeof(error_message), "Expected ';' after break");
			do_error(1);
		}
		if(break_label < 0){
			snprintf(error_message, sizeof(error_message), "No loop to break out of");
			do_error(1);
		}
		if(variables_size != loop_variables_size)
			fprintf(output_file, "addi $sp, $sp, %d\n", variables_size - loop_variables_size);
		fprintf(output_file, "j __L%d\n", break_label);
	} else if(!strncmp(*c, "continue", 8) && !alphanumeric((*c)[8])){
		*c += 8;
		skip_whitespace(c);
		if(**c != ';'){
			snprintf(error_message, sizeof(error_message), "Expected ';' after continue");
			do_error(1);
		}
		if(continue_label < 0){
			snprintf(error_message, sizeof(error_message), "No loop to continue in");
			do_error(1);
		}
		if(variables_size != loop_variables_size)
			fprintf(output_file, "addi $sp, $sp, %d\n", variables_size - loop_variables_size);
		fprintf(output_file, "j __L%d\n", continue_label);
	} else if(**c == ';'){
		//Empty statement, so pass
		++*c;
	} else if(**c == '{'){
		++*c;
		compile_block(c, 0, output_file);
		if(**c != '}'){
			snprintf(error_message, sizeof(error_message), "Expected '}'");
			do_error(1);
		}
		++*c;
	} else {
		compile_root_expression(&expression_output, c, 1, 0, output_file);
		reset_stack_pos(&expression_output, output_file);
		deallocate(expression_output.data);
		if(**c == ';'){
			++*c;
		} else {
			snprintf(error_message, sizeof(error_message), "Expected ';'");
			do_error(1);
		}
	}
}

// Assembly:
subq $0x138, %rsp            # imm = 0x138
movq %rdi, 0x130(%rsp)
movq %rsi, 0x128(%rsp)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x4a6b(%rip), %rsi      # 0xdf71
movl $0x2, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0x9861
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x2(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0x9861
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x2, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
je 0x958b
leaq 0x7fc2(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x49fa(%rip), %rdx      # 0xdf74
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x128(%rsp), %rdx
xorl %eax, %eax
leaq 0x7bf6(%rip), %rax      # 0x111c8
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups 0x20(%rax), %xmm2
movups 0x30(%rax), %xmm3
movq %rsp, %rax
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq 0xd0(%rsp), %rdi
xorl %esi, %esi
callq 0x3fd0
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
leaq 0x7ca2(%rip), %rax      # 0x112c0
movl (%rax), %eax
movl %eax, 0xcc(%rsp)
leaq 0x7c92(%rip), %rax      # 0x112c0
movl (%rax), %ecx
addl $0x1, %ecx
leaq 0x7c86(%rip), %rax      # 0x112c0
movl %ecx, (%rax)
cmpl $0x0, 0xd0(%rsp)
jne 0x966c
movq 0x128(%rsp), %rdi
movl 0xd4(%rsp), %edx
movl 0xcc(%rsp), %ecx
leaq 0x4756(%rip), %rsi      # 0xddb9
movb $0x0, %al
callq 0x10f0
jmp 0x9695
cmpl $0x1, 0xd0(%rsp)
jne 0x9693
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
leaq 0x4745(%rip), %rsi      # 0xddd1
movb $0x0, %al
callq 0x10f0
jmp 0x9695
movq 0xd0(%rsp), %rax
movq %rax, 0xa0(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0xa8(%rsp)
movq 0xa0(%rsp), %rdi
movl 0xa8(%rsp), %esi
callq 0x13b0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
je 0x970b
leaq 0x7e42(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x42d4(%rip), %rdx      # 0xd9ce
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rdi
movq 0x128(%rsp), %rsi
callq 0x94d0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x4823(%rip), %rsi      # 0xdf81
movl $0x2, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0x983f
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x4(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0x983f
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x4, %rcx
movq %rcx, (%rax)
leaq 0x7b1a(%rip), %rax      # 0x112c0
movl (%rax), %eax
movl %eax, 0xc8(%rsp)
leaq 0x7b0a(%rip), %rax      # 0x112c0
movl (%rax), %ecx
addl $0x1, %ecx
leaq 0x7afe(%rip), %rax      # 0x112c0
movl %ecx, (%rax)
movq 0x128(%rsp), %rdi
movl 0xc8(%rsp), %edx
leaq 0x47ac(%rip), %rsi      # 0xdf86
movb $0x0, %al
callq 0x10f0
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
leaq 0x47aa(%rip), %rsi      # 0xdfa1
movb $0x0, %al
callq 0x10f0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rdi
movq 0x128(%rsp), %rsi
callq 0x94d0
movq 0x128(%rsp), %rdi
movl 0xc8(%rsp), %edx
leaq 0x476b(%rip), %rsi      # 0xdfa1
movb $0x0, %al
callq 0x10f0
jmp 0x985c
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
leaq 0x474c(%rip), %rsi      # 0xdfa1
movb $0x0, %al
callq 0x10f0
jmp 0xa714
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x471c(%rip), %rsi      # 0xdf8f
movl $0x5, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0x9b92
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x5(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0x9b92
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x5, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
je 0x98f8
leaq 0x7c55(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x468d(%rip), %rdx      # 0xdf74
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
leaq 0x79af(%rip), %rax      # 0x112c0
movl (%rax), %eax
movl %eax, 0xcc(%rsp)
leaq 0x799f(%rip), %rax      # 0x112c0
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
leaq 0x798c(%rip), %rax      # 0x112c0
movl (%rax), %ecx
addl $0x2, %ecx
leaq 0x7980(%rip), %rax      # 0x112c0
movl %ecx, (%rax)
movl 0x7874(%rip), %eax      # 0x111bc
movl %eax, 0xbc(%rsp)
movl 0x786b(%rip), %eax      # 0x111c0
movl %eax, 0xb8(%rsp)
movl 0x7d36(%rip), %eax      # 0x11698
movl %eax, 0xb4(%rsp)
movl 0xc8(%rsp), %eax
movl %eax, 0x7846(%rip)      # 0x111bc
movl 0xcc(%rsp), %eax
movl %eax, 0x783d(%rip)      # 0x111c0
leaq 0x790e(%rip), %rax      # 0x11298
movl (%rax), %eax
movl %eax, 0x7d06(%rip)      # 0x11698
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
leaq 0x45f9(%rip), %rsi      # 0xdfa1
movb $0x0, %al
callq 0x10f0
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x128(%rsp), %rdx
xorl %eax, %eax
leaq 0x77e4(%rip), %rax      # 0x111c8
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups 0x20(%rax), %xmm2
movups 0x30(%rax), %xmm3
movq %rsp, %rax
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq 0xd0(%rsp), %rdi
xorl %esi, %esi
callq 0x3fd0
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
cmpl $0x0, 0xd0(%rsp)
jne 0x9a59
movq 0x128(%rsp), %rdi
movl 0xd4(%rsp), %edx
movl 0xc8(%rsp), %ecx
leaq 0x4369(%rip), %rsi      # 0xddb9
movb $0x0, %al
callq 0x10f0
jmp 0x9a82
cmpl $0x1, 0xd0(%rsp)
jne 0x9a80
movq 0x128(%rsp), %rdi
movl 0xc8(%rsp), %edx
leaq 0x4358(%rip), %rsi      # 0xddd1
movb $0x0, %al
callq 0x10f0
jmp 0x9a82
movq 0xd0(%rsp), %rax
movq %rax, 0x90(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0x98(%rsp)
movq 0x90(%rsp), %rdi
movl 0x98(%rsp), %esi
callq 0x13b0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
je 0x9af8
leaq 0x7a55(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3ee7(%rip), %rdx      # 0xd9ce
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rdi
movq 0x128(%rsp), %rsi
callq 0x94d0
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
leaq 0x4444(%rip), %rsi      # 0xdf86
movb $0x0, %al
callq 0x10f0
movq 0x128(%rsp), %rdi
movl 0xc8(%rsp), %edx
leaq 0x4442(%rip), %rsi      # 0xdfa1
movb $0x0, %al
callq 0x10f0
movl 0xb4(%rsp), %eax
movl %eax, 0x7b25(%rip)      # 0x11698
movl 0xbc(%rsp), %eax
movl %eax, 0x763c(%rip)      # 0x111bc
movl 0xb8(%rsp), %eax
movl %eax, 0x7633(%rip)      # 0x111c0
jmp 0xa712
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x43f1(%rip), %rsi      # 0xdf95
movl $0x3, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0xa0f7
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x3(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0xa0f7
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x3, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
je 0x9c29
leaq 0x7924(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x435c(%rip), %rdx      # 0xdf74
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
leaq 0x767e(%rip), %rax      # 0x112c0
movl (%rax), %eax
movl %eax, 0xcc(%rsp)
leaq 0x766e(%rip), %rax      # 0x112c0
movl (%rax), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
leaq 0x765b(%rip), %rax      # 0x112c0
movl (%rax), %eax
addl $0x2, %eax
movl %eax, 0xc4(%rsp)
leaq 0x7648(%rip), %rax      # 0x112c0
movl (%rax), %eax
addl $0x3, %eax
movl %eax, 0xc0(%rsp)
leaq 0x7635(%rip), %rax      # 0x112c0
movl (%rax), %ecx
addl $0x4, %ecx
leaq 0x7629(%rip), %rax      # 0x112c0
movl %ecx, (%rax)
movl 0x751d(%rip), %eax      # 0x111bc
movl %eax, 0xbc(%rsp)
movl 0x7514(%rip), %eax      # 0x111c0
movl %eax, 0xb8(%rsp)
movl 0x79df(%rip), %eax      # 0x11698
movl %eax, 0xb4(%rsp)
movl 0xc8(%rsp), %eax
movl %eax, 0x74ef(%rip)      # 0x111bc
movl 0xc0(%rsp), %eax
movl %eax, 0x74e6(%rip)      # 0x111c0
leaq 0x75b7(%rip), %rax      # 0x11298
movl (%rax), %eax
movl %eax, 0x79af(%rip)      # 0x11698
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0x9dbe
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
movq 0xd0(%rsp), %rax
movq %rax, 0x80(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0x88(%rsp)
movq 0x80(%rsp), %rdi
movl 0x88(%rsp), %esi
callq 0x13b0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0x9dbc
leaq 0x7791(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3a09(%rip), %rdx      # 0xd7b4
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
jmp 0x9dbe
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
leaq 0x41bb(%rip), %rsi      # 0xdfa1
movb $0x0, %al
callq 0x10f0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0x9f50
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x128(%rsp), %rdx
xorl %eax, %eax
leaq 0x7382(%rip), %rax      # 0x111c8
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups 0x20(%rax), %xmm2
movups 0x30(%rax), %xmm3
movq %rsp, %rax
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq 0xd0(%rsp), %rdi
xorl %esi, %esi
callq 0x3fd0
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
cmpl $0x0, 0xd0(%rsp)
jne 0x9ebb
movq 0x128(%rsp), %rdi
movl 0xd4(%rsp), %edx
movl 0xc8(%rsp), %ecx
leaq 0x3f07(%rip), %rsi      # 0xddb9
movb $0x0, %al
callq 0x10f0
jmp 0x9ee4
cmpl $0x1, 0xd0(%rsp)
jne 0x9ee2
movq 0x128(%rsp), %rdi
movl 0xc8(%rsp), %edx
leaq 0x3ef6(%rip), %rsi      # 0xddd1
movb $0x0, %al
callq 0x10f0
jmp 0x9ee4
movq 0xd0(%rsp), %rax
movq %rax, 0x70(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0x78(%rsp)
movq 0x70(%rsp), %rdi
movl 0x78(%rsp), %esi
callq 0x13b0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0x9f4e
leaq 0x75ff(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3877(%rip), %rdx      # 0xd7b4
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
jmp 0x9f50
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x128(%rsp), %rdi
movl 0xc4(%rsp), %edx
movl 0xc0(%rsp), %ecx
leaq 0x401a(%rip), %rsi      # 0xdf99
movb $0x0, %al
callq 0x10f0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
je 0xa04f
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
movq 0xd0(%rsp), %rax
movq %rax, 0x60(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0x68(%rsp)
movq 0x60(%rsp), %rdi
movl 0x68(%rsp), %esi
callq 0x13b0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x29, %eax
je 0xa04d
leaq 0x7500(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3f38(%rip), %rdx      # 0xdf74
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
jmp 0xa04f
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x128(%rsp), %rdi
movl 0xcc(%rsp), %edx
movl 0xc4(%rsp), %ecx
leaq 0x3f1b(%rip), %rsi      # 0xdf99
movb $0x0, %al
callq 0x10f0
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rdi
movq 0x128(%rsp), %rsi
callq 0x94d0
movq 0x128(%rsp), %rdi
movl 0xc0(%rsp), %edx
movl 0xc8(%rsp), %ecx
leaq 0x3ed5(%rip), %rsi      # 0xdf99
movb $0x0, %al
callq 0x10f0
movl 0xb4(%rsp), %eax
movl %eax, 0x75c0(%rip)      # 0x11698
movl 0xbc(%rsp), %eax
movl %eax, 0x70d7(%rip)      # 0x111bc
movl 0xb8(%rsp), %eax
movl %eax, 0x70ce(%rip)      # 0x111c0
jmp 0xa710
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x3ea1(%rip), %rsi      # 0xdfaa
movl $0x6, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0xa370
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x6(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0xa370
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x6, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
leaq 0x74fa(%rip), %rdi      # 0x11658
leaq 0x70a3(%rip), %rsi      # 0x11208
callq 0xbec0
cmpb $0x0, %al
je 0xa1bc
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0xa1a5
leaq 0x73a8(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3e1d(%rip), %rdx      # 0xdfb1
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xa309
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0xa217
leaq 0x7336(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x35ae(%rip), %rdx      # 0xd7b4
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x128(%rsp), %rdx
movups 0x7450(%rip), %xmm0     # 0x11688
movq %rsp, %rax
movups %xmm0, 0x30(%rax)
movups 0x7432(%rip), %xmm0     # 0x11678
movups %xmm0, 0x20(%rax)
movups 0x7417(%rip), %xmm0     # 0x11668
movups %xmm0, 0x10(%rax)
movups 0x73fc(%rip), %xmm0     # 0x11658
movups %xmm0, (%rax)
leaq 0xd0(%rsp), %rdi
movl $0x1, %esi
callq 0x3fd0
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
cmpl $0x0, 0xd0(%rsp)
jne 0xa2b8
movq 0x128(%rsp), %rdi
movl 0xd4(%rsp), %edx
leaq 0x6ff2(%rip), %rax      # 0x11298
movl (%rax), %ecx
leaq 0x2d55(%rip), %rsi      # 0xd004
movb $0x0, %al
callq 0x10f0
jmp 0xa2e3
cmpl $0x1, 0xd0(%rsp)
jne 0xa2e1
movq 0x128(%rsp), %rdi
leaq 0x6fc7(%rip), %rax      # 0x11298
movl (%rax), %edx
leaq 0x34ff(%rip), %rsi      # 0xd7d9
movb $0x0, %al
callq 0x10f0
jmp 0xa2e3
movq 0xd0(%rsp), %rax
movq %rax, 0x50(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0x58(%rsp)
movq 0x50(%rsp), %rdi
movl 0x58(%rsp), %esi
callq 0x13b0
movq 0x128(%rsp), %rdi
leaq 0x6f80(%rip), %rax      # 0x11298
movl (%rax), %edx
movl 0x7104(%rip), %eax      # 0x11424
shll $0x2, %eax
subl %eax, %edx
leaq 0x36bc(%rip), %rsi      # 0xd9e8
movb $0x0, %al
callq 0x10f0
movq 0x128(%rsp), %rdi
movl 0x70e3(%rip), %edx      # 0x11424
shll $0x2, %edx
addl $0x4, %edx
leaq 0x3bf4(%rip), %rsi      # 0xdf42
movb $0x0, %al
callq 0x10f0
movq 0x128(%rsp), %rdi
leaq 0x3bef(%rip), %rsi      # 0xdf53
movb $0x0, %al
callq 0x10f0
jmp 0xa70e
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x3c6b(%rip), %rsi      # 0xdfed
movl $0x5, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0xa48b
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x5(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0xa48b
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x5, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0xa407
leaq 0x7146(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3be4(%rip), %rdx      # 0xdfda
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
cmpl $0x0, 0x6dae(%rip)      # 0x111bc
jge 0xa434
leaq 0x7119(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3bd0(%rip), %rdx      # 0xdff3
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
leaq 0x6e5d(%rip), %rax      # 0x11298
movl (%rax), %eax
cmpl 0x7255(%rip), %eax      # 0x11698
je 0xa46a
movq 0x128(%rsp), %rdi
leaq 0x6e44(%rip), %rax      # 0x11298
movl (%rax), %edx
subl 0x723c(%rip), %edx      # 0x11698
leaq 0x3585(%rip), %rsi      # 0xd9e8
movb $0x0, %al
callq 0x10f0
movq 0x128(%rsp), %rdi
movl 0x6d44(%rip), %edx      # 0x111bc
leaq 0x3b07(%rip), %rsi      # 0xdf86
movb $0x0, %al
callq 0x10f0
jmp 0xa70c
movq 0x130(%rsp), %rax
movq (%rax), %rdi
leaq 0x3b81(%rip), %rsi      # 0xe01e
movl $0x8, %edx
callq 0x1040
cmpl $0x0, %eax
jne 0xa5a6
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl 0x8(%rax), %edi
callq 0xb470
cmpb $0x0, %al
jne 0xa5a6
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x8, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
callq 0xbb70
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
je 0xa522
leaq 0x702b(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3afa(%rip), %rdx      # 0xe00b
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
cmpl $0x0, 0x6c97(%rip)      # 0x111c0
jge 0xa54f
leaq 0x6ffe(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3ae9(%rip), %rdx      # 0xe027
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
leaq 0x6d42(%rip), %rax      # 0x11298
movl (%rax), %eax
cmpl 0x713a(%rip), %eax      # 0x11698
je 0xa585
movq 0x128(%rsp), %rdi
leaq 0x6d29(%rip), %rax      # 0x11298
movl (%rax), %edx
subl 0x7121(%rip), %edx      # 0x11698
leaq 0x346a(%rip), %rsi      # 0xd9e8
movb $0x0, %al
callq 0x10f0
movq 0x128(%rsp), %rdi
movl 0x6c2d(%rip), %edx      # 0x111c0
leaq 0x39ec(%rip), %rsi      # 0xdf86
movb $0x0, %al
callq 0x10f0
jmp 0xa70a
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
jne 0xa5d0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xa708
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x7b, %eax
jne 0xa65a
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x130(%rsp), %rdi
movq 0x128(%rsp), %rdx
xorl %esi, %esi
callq 0x91d0
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x7d, %eax
je 0xa643
leaq 0x6f0a(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x3a0c(%rip), %rdx      # 0xe03e
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xa706
movq 0x130(%rsp), %rsi
movq 0x128(%rsp), %r8
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
xorl %ecx, %ecx
callq 0x8600
movq 0x128(%rsp), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x86b0
movq 0xd0(%rsp), %rax
movq %rax, 0x40(%rsp)
movl 0xd8(%rsp), %eax
movl %eax, 0x48(%rsp)
movq 0x40(%rsp), %rdi
movl 0x48(%rsp), %esi
callq 0x13b0
movq 0x130(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x3b, %eax
jne 0xa6e0
movq 0x130(%rsp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0xa704
leaq 0x6e49(%rip), %rdi      # 0x11530
movl $0x100, %esi            # imm = 0x100
leaq 0x30c1(%rip), %rdx      # 0xd7b4
movb $0x0, %al
callq 0x10b0
movl $0x1, %edi
callq 0x87b0
jmp 0xa706
jmp 0xa708
jmp 0xa70a
jmp 0xa70c
jmp 0xa70e
jmp 0xa710
jmp 0xa712
jmp 0xa714
addq $0x138, %rsp            # imm = 0x138
retq
nopl (%rax)