// File: AndrewAlbert[P]Compiler-Theory/SourceCode/parser.cpp
// Function: Parser::IfStatement()
bool Parser::IfStatement(){
	/* flag to determine if at least one statement occured after 'then' and 'else' 
	 * type and size variables are unused but needed to perfrom the call to Expression(type, size) */
	bool flag;
	int type, size;
	string labelTrue, labelFalse, labelEnd;
	bool resyncEnabled = true;
	
	//determine if this is the start of an if statement
	if( !CheckToken(T_IF) ) return false;
	
	//get expression for conditional statement: '( <expression> )'
	if( !CheckToken(T_LPAREN) ) ReportLineError("expected '(' before condition in if statement");
	else if( !Expression(type, size) ) ReportLineError("Expected condition for if statement");
	else if (type != TYPE_BOOL) ReportLineError("Conditional expression in if statement must evaluate to type bool.");
	else if( !CheckToken(T_RPAREN) ) ReportLineError("expected ')' after condition in if statement");
	
	// GEN: Check result of expression
	labelTrue = generator->newLabel( "IfTrue" );
	labelFalse = generator->newLabel( "IfFalse" );
	labelEnd = generator->newLabel( "IfEnd" );
	generator->condBranch(labelTrue, labelFalse);;
	
	/* Get statements to be evaluated if the statement's expression evaluates to true. 
	 * There must be at least one statement following 'then'. */
	if( CheckToken(T_THEN) ){
		generator->placeLabel( labelTrue );
		flag = false;
		while(true){
			while( Statement() ){
				flag = true;
				if( !CheckToken(T_SEMICOLON) ) ReportLineError("expected ';' after statement in conditional statement's 'if' condition",true);
			}
			if( !flag ) ReportError("expected at least one statement after 'then' in conditional statement");
			
			// goto end if after true statement
			generator->branch(labelEnd);

			/* Get statements to be evaluated if the statement's expression evaluates to false. 
		 	 * There must be at least one statement if there is an 'else' case. */
			generator->placeLabel(labelFalse);
			if(CheckToken(T_ELSE)){
				flag = false;
				resyncEnabled = true;
				while(true){
					while( Statement() ){
						flag = true;
						if( !CheckToken(T_SEMICOLON) ) ReportLineError("Expected ';' after statement in conditional statement's 'else' condition.",true);
					}
					/* check for correct closure of statement: 'end if' */
					
					// goto end if after else statement
					generator->branch(labelEnd);

					if( CheckToken(T_END) ){
						generator->placeLabel(labelEnd);
						if( !flag ) ReportError("expected at least one statement after 'else' in conditional statement.");
						if( !CheckToken(T_IF) ) ReportFatalError("missing 'if' in the 'end if' closure of conditional statement");
						return true;
					}
					else if(resyncEnabled){
						resyncEnabled = false;
						ReportLineError("Bad Line. Unable to find valid statement or 'else' or 'end' reserved keywords.");
					}
					else{
						ReportFatalError("Parser resync failed. Unable to find valid statement, 'else' or 'end if' reserved keywords.");
						return true;
					}
				}
			}
			/* check for correct closure of statement: 'end if' */
			else if( CheckToken(T_END) ){
				generator->placeLabel(labelEnd);
				if( !CheckToken(T_IF) ) ReportFatalError("missing 'if' in the 'end if' closure of the if statement");
				return true;
			}
			else if(resyncEnabled){
				resyncEnabled = false;
				ReportLineError("Bad Line. Unable to find valid statement or 'else' or 'end' reserved keywords.");
			}
			else ReportFatalError("Parser resync failed. Unable to find valid statement, 'else' or 'end if' reserved keywords.");
		}
	}
	else ReportFatalError("Expected 'then' after condition in if statement.");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x620, %rsp            # imm = 0x620
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x4d0(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x3370
leaq -0x60(%rbp), %rdi
callq 0x3370
leaq -0x80(%rbp), %rdi
callq 0x3370
movq -0x4d0(%rbp), %rdi
movb $0x1, -0x81(%rbp)
movl $0x110, %esi            # imm = 0x110
callq 0x9300
movb %al, -0x4c2(%rbp)
jmp 0xcfe5
movb -0x4c2(%rbp), %al
testb $0x1, %al
jne 0xd01b
jmp 0xcff1
movb $0x0, -0x1(%rbp)
movl $0x1, -0x98(%rbp)
jmp 0xe25c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xe285
movq -0x4d0(%rbp), %rdi
movl $0x12d, %esi            # imm = 0x12D
callq 0x9300
movb %al, -0x4d1(%rbp)
jmp 0xd034
movb -0x4d1(%rbp), %al
testb $0x1, %al
jne 0xd0ed
jmp 0xd044
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x4e0(%rbp)
callq 0x3430
movq -0x4e0(%rbp), %rdx
leaq 0x18ece(%rip), %rsi     # 0x25f33
leaq -0xb8(%rbp), %rdi
callq 0x62d0
jmp 0xd073
movq -0x4d0(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xd08d
leaq -0xb8(%rbp), %rdi
callq 0x31a0
leaq -0xb9(%rbp), %rdi
callq 0x32e0
jmp 0xd34d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd0dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x31a0
leaq -0xb9(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq -0x4d0(%rbp), %rdi
leaq -0x18(%rbp), %rsi
leaq -0x1c(%rbp), %rdx
callq 0xcab0
movb %al, -0x4e1(%rbp)
jmp 0xd109
movb -0x4e1(%rbp), %al
testb $0x1, %al
jne 0xd1c2
jmp 0xd119
leaq -0xe1(%rbp), %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x3430
movq -0x4f0(%rbp), %rdx
leaq 0x18e27(%rip), %rsi     # 0x25f61
leaq -0xe0(%rbp), %rdi
callq 0x62d0
jmp 0xd148
movq -0x4d0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xd162
leaq -0xe0(%rbp), %rdi
callq 0x31a0
leaq -0xe1(%rbp), %rdi
callq 0x32e0
jmp 0xd34b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd1b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x31a0
leaq -0xe1(%rbp), %rdi
callq 0x32e0
jmp 0xe285
cmpl $0x10c, -0x18(%rbp)     # imm = 0x10C
je 0xd278
leaq -0x109(%rbp), %rdi
movq %rdi, -0x4f8(%rbp)
callq 0x3430
movq -0x4f8(%rbp), %rdx
leaq 0x18d95(%rip), %rsi     # 0x25f85
leaq -0x108(%rbp), %rdi
callq 0x62d0
jmp 0xd1fe
movq -0x4d0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xd218
leaq -0x108(%rbp), %rdi
callq 0x31a0
leaq -0x109(%rbp), %rdi
callq 0x32e0
jmp 0xd349
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd267
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x31a0
leaq -0x109(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq -0x4d0(%rbp), %rdi
movl $0x12e, %esi            # imm = 0x12E
callq 0x9300
movb %al, -0x4f9(%rbp)
jmp 0xd291
movb -0x4f9(%rbp), %al
testb $0x1, %al
jne 0xd347
jmp 0xd2a1
leaq -0x131(%rbp), %rdi
movq %rdi, -0x508(%rbp)
callq 0x3430
movq -0x508(%rbp), %rdx
leaq 0x18d06(%rip), %rsi     # 0x25fc8
leaq -0x130(%rbp), %rdi
callq 0x62d0
jmp 0xd2d0
movq -0x4d0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xd2ea
leaq -0x130(%rbp), %rdi
callq 0x31a0
leaq -0x131(%rbp), %rdi
callq 0x32e0
jmp 0xd347
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd336
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x31a0
leaq -0x131(%rbp), %rdi
callq 0x32e0
jmp 0xe285
jmp 0xd349
jmp 0xd34b
jmp 0xd34d
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x518(%rbp)
leaq -0x179(%rbp), %rdi
movq %rdi, -0x510(%rbp)
callq 0x3430
movq -0x510(%rbp), %rdx
leaq 0x18c72(%rip), %rsi     # 0x25ff5
leaq -0x178(%rbp), %rdi
callq 0x62d0
jmp 0xd391
movq -0x518(%rbp), %rsi
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rdx
callq 0x1ded0
jmp 0xd3ad
leaq -0x40(%rbp), %rdi
leaq -0x158(%rbp), %rsi
movq %rsi, -0x530(%rbp)
callq 0x3340
movq -0x530(%rbp), %rdi
callq 0x31a0
leaq -0x178(%rbp), %rdi
callq 0x31a0
leaq -0x179(%rbp), %rdi
callq 0x32e0
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x528(%rbp)
leaq -0x1c1(%rbp), %rdi
movq %rdi, -0x520(%rbp)
callq 0x3430
movq -0x520(%rbp), %rdx
leaq 0x18bde(%rip), %rsi     # 0x25ffc
leaq -0x1c0(%rbp), %rdi
callq 0x62d0
jmp 0xd42c
movq -0x528(%rbp), %rsi
leaq -0x1a0(%rbp), %rdi
leaq -0x1c0(%rbp), %rdx
callq 0x1ded0
jmp 0xd448
leaq -0x60(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
movq %rsi, -0x548(%rbp)
callq 0x3340
movq -0x548(%rbp), %rdi
callq 0x31a0
leaq -0x1c0(%rbp), %rdi
callq 0x31a0
leaq -0x1c1(%rbp), %rdi
callq 0x32e0
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x540(%rbp)
leaq -0x209(%rbp), %rdi
movq %rdi, -0x538(%rbp)
callq 0x3430
movq -0x538(%rbp), %rdx
leaq 0x18b4b(%rip), %rsi     # 0x26004
leaq -0x208(%rbp), %rdi
callq 0x62d0
jmp 0xd4c7
movq -0x540(%rbp), %rsi
leaq -0x1e8(%rbp), %rdi
leaq -0x208(%rbp), %rdx
callq 0x1ded0
jmp 0xd4e3
leaq -0x80(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
movq %rsi, -0x558(%rbp)
callq 0x3340
movq -0x558(%rbp), %rdi
callq 0x31a0
leaq -0x208(%rbp), %rdi
callq 0x31a0
leaq -0x209(%rbp), %rdi
callq 0x32e0
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x550(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x3130
jmp 0xd545
leaq -0x250(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3130
jmp 0xd557
movq -0x550(%rbp), %rdi
leaq -0x230(%rbp), %rsi
leaq -0x250(%rbp), %rdx
callq 0x1e680
jmp 0xd573
leaq -0x250(%rbp), %rdi
callq 0x31a0
leaq -0x230(%rbp), %rdi
callq 0x31a0
movq -0x4d0(%rbp), %rdi
movl $0x111, %esi            # imm = 0x111
callq 0x9300
movb %al, -0x559(%rbp)
jmp 0xd5a4
movb -0x559(%rbp), %al
testb $0x1, %al
jne 0xd5b3
jmp 0xe1bc
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x568(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x3130
jmp 0xd5da
movq -0x568(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x1e060
jmp 0xd5ef
leaq -0x270(%rbp), %rdi
callq 0x31a0
movb $0x0, -0x11(%rbp)
jmp 0xd601
jmp 0xd603
movq -0x4d0(%rbp), %rdi
callq 0xac60
movb %al, -0x569(%rbp)
jmp 0xd617
movb -0x569(%rbp), %al
testb $0x1, %al
jne 0xd626
jmp 0xd830
movq -0x4d0(%rbp), %rdi
movb $0x1, -0x11(%rbp)
movl $0x12c, %esi            # imm = 0x12C
callq 0x9300
movb %al, -0x56a(%rbp)
jmp 0xd643
movb -0x56a(%rbp), %al
testb $0x1, %al
jne 0xd82b
jmp 0xd653
leaq -0x291(%rbp), %rdi
movq %rdi, -0x578(%rbp)
callq 0x3430
movq -0x578(%rbp), %rdx
leaq 0x18996(%rip), %rsi     # 0x2600a
leaq -0x290(%rbp), %rdi
callq 0x62d0
jmp 0xd682
movq -0x4d0(%rbp), %rdi
leaq -0x290(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xd69c
leaq -0x290(%rbp), %rdi
callq 0x31a0
leaq -0x291(%rbp), %rdi
callq 0x32e0
jmp 0xd82b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd6eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x31a0
leaq -0x179(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd72e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x31a0
leaq -0x1c1(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd771
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x31a0
leaq -0x209(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd7b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x31a0
leaq -0x230(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd81a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x31a0
leaq -0x291(%rbp), %rdi
callq 0x32e0
jmp 0xe285
jmp 0xd603
testb $0x1, -0x11(%rbp)
jne 0xd8db
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x580(%rbp)
callq 0x3430
movq -0x580(%rbp), %rdx
leaq 0x187f6(%rip), %rsi     # 0x26051
leaq -0x2b8(%rbp), %rdi
callq 0x62d0
jmp 0xd869
movq -0x4d0(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x9060
jmp 0xd87e
leaq -0x2b8(%rbp), %rdi
callq 0x31a0
leaq -0x2b9(%rbp), %rdi
callq 0x32e0
jmp 0xd8db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xd8ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x31a0
leaq -0x2b9(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x588(%rbp)
leaq -0x2e0(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3130
jmp 0xd902
movq -0x588(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x1e7f0
jmp 0xd917
leaq -0x2e0(%rbp), %rdi
callq 0x31a0
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x590(%rbp)
leaq -0x300(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3130
jmp 0xd94a
movq -0x590(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x1e060
jmp 0xd95f
leaq -0x300(%rbp), %rdi
callq 0x31a0
movq -0x4d0(%rbp), %rdi
movl $0x112, %esi            # imm = 0x112
callq 0x9300
movb %al, -0x591(%rbp)
jmp 0xd984
movb -0x591(%rbp), %al
testb $0x1, %al
jne 0xd993
jmp 0xdee5
movb $0x0, -0x11(%rbp)
movb $0x1, -0x81(%rbp)
jmp 0xd9a0
jmp 0xd9a2
movq -0x4d0(%rbp), %rdi
callq 0xac60
movb %al, -0x592(%rbp)
jmp 0xd9b6
movb -0x592(%rbp), %al
testb $0x1, %al
jne 0xd9c5
jmp 0xdae6
movq -0x4d0(%rbp), %rdi
movb $0x1, -0x11(%rbp)
movl $0x12c, %esi            # imm = 0x12C
callq 0x9300
movb %al, -0x593(%rbp)
jmp 0xd9e2
movb -0x593(%rbp), %al
testb $0x1, %al
jne 0xdae1
jmp 0xd9f2
leaq -0x321(%rbp), %rdi
movq %rdi, -0x5a0(%rbp)
callq 0x3430
movq -0x5a0(%rbp), %rdx
leaq 0x18684(%rip), %rsi     # 0x26097
leaq -0x320(%rbp), %rdi
callq 0x62d0
jmp 0xda21
movq -0x4d0(%rbp), %rdi
leaq -0x320(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xda3b
leaq -0x320(%rbp), %rdi
callq 0x31a0
leaq -0x321(%rbp), %rdi
callq 0x32e0
jmp 0xdae1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x2e0(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xdad0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x31a0
leaq -0x321(%rbp), %rdi
callq 0x32e0
jmp 0xe285
jmp 0xd9a2
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x5a8(%rbp)
leaq -0x348(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3130
jmp 0xdb0d
movq -0x5a8(%rbp), %rdi
leaq -0x348(%rbp), %rsi
callq 0x1e7f0
jmp 0xdb22
leaq -0x348(%rbp), %rdi
callq 0x31a0
movq -0x4d0(%rbp), %rdi
movl $0x104, %esi            # imm = 0x104
callq 0x9300
movb %al, -0x5a9(%rbp)
jmp 0xdb47
movb -0x5a9(%rbp), %al
testb $0x1, %al
jne 0xdb56
jmp 0xdd6f
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x368(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3130
jmp 0xdb7d
movq -0x5b8(%rbp), %rdi
leaq -0x368(%rbp), %rsi
callq 0x1e060
jmp 0xdb92
leaq -0x368(%rbp), %rdi
callq 0x31a0
testb $0x1, -0x11(%rbp)
jne 0xdc92
leaq -0x389(%rbp), %rdi
movq %rdi, -0x5c0(%rbp)
callq 0x3430
movq -0x5c0(%rbp), %rdx
leaq 0x18518(%rip), %rsi     # 0x260e1
leaq -0x388(%rbp), %rdi
callq 0x62d0
jmp 0xdbd7
movq -0x4d0(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x9060
jmp 0xdbec
leaq -0x388(%rbp), %rdi
callq 0x31a0
leaq -0x389(%rbp), %rdi
callq 0x32e0
jmp 0xdc92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xdc81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x388(%rbp), %rdi
callq 0x31a0
leaq -0x389(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movq -0x4d0(%rbp), %rdi
movl $0x110, %esi            # imm = 0x110
callq 0x9300
movb %al, -0x5c1(%rbp)
jmp 0xdcab
movb -0x5c1(%rbp), %al
testb $0x1, %al
jne 0xdd5c
jmp 0xdcbb
leaq -0x3b1(%rbp), %rdi
movq %rdi, -0x5d0(%rbp)
callq 0x3430
movq -0x5d0(%rbp), %rdx
leaq 0x1844c(%rip), %rsi     # 0x26128
leaq -0x3b0(%rbp), %rdi
callq 0x62d0
jmp 0xdcea
movq -0x4d0(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x88a0
jmp 0xdcff
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
leaq -0x3b1(%rbp), %rdi
callq 0x32e0
jmp 0xdd5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xdd4b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
leaq -0x3b1(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movb $0x1, -0x1(%rbp)
movl $0x1, -0x98(%rbp)
jmp 0xe25c
testb $0x1, -0x81(%rbp)
je 0xde2c
movb $0x0, -0x81(%rbp)
leaq -0x3d9(%rbp), %rdi
movq %rdi, -0x5d8(%rbp)
callq 0x3430
movq -0x5d8(%rbp), %rdx
leaq 0x183c2(%rip), %rsi     # 0x26166
leaq -0x3d8(%rbp), %rdi
callq 0x62d0
jmp 0xddb2
movq -0x4d0(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xddcc
leaq -0x3d8(%rbp), %rdi
callq 0x31a0
leaq -0x3d9(%rbp), %rdi
callq 0x32e0
jmp 0xdede
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xde1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x3d8(%rbp), %rdi
callq 0x31a0
leaq -0x3d9(%rbp), %rdi
callq 0x32e0
jmp 0xe285
leaq -0x401(%rbp), %rdi
movq %rdi, -0x5e0(%rbp)
callq 0x3430
movq -0x5e0(%rbp), %rdx
leaq 0x18368(%rip), %rsi     # 0x261b5
leaq -0x400(%rbp), %rdi
callq 0x62d0
jmp 0xde5b
movq -0x4d0(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x88a0
jmp 0xde70
leaq -0x400(%rbp), %rdi
callq 0x31a0
leaq -0x401(%rbp), %rdi
callq 0x32e0
movb $0x1, -0x1(%rbp)
movl $0x1, -0x98(%rbp)
jmp 0xe25c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xdecd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x31a0
leaq -0x401(%rbp), %rdi
callq 0x32e0
jmp 0xe285
jmp 0xdee0
jmp 0xd99e
movq -0x4d0(%rbp), %rdi
movl $0x104, %esi            # imm = 0x104
callq 0x9300
movb %al, -0x5e1(%rbp)
jmp 0xdefe
movb -0x5e1(%rbp), %al
testb $0x1, %al
jne 0xdf0d
jmp 0xe055
movq -0x4d0(%rbp), %rax
movq 0x98(%rax), %rax
movq %rax, -0x5f0(%rbp)
leaq -0x428(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x3130
jmp 0xdf34
movq -0x5f0(%rbp), %rdi
leaq -0x428(%rbp), %rsi
callq 0x1e060
jmp 0xdf49
leaq -0x428(%rbp), %rdi
callq 0x31a0
movq -0x4d0(%rbp), %rdi
movl $0x110, %esi            # imm = 0x110
callq 0x9300
movb %al, -0x5f1(%rbp)
jmp 0xdf6e
movb -0x5f1(%rbp), %al
testb $0x1, %al
jne 0xe042
jmp 0xdf7e
leaq -0x449(%rbp), %rdi
movq %rdi, -0x600(%rbp)
callq 0x3430
movq -0x600(%rbp), %rdx
leaq 0x18272(%rip), %rsi     # 0x26211
leaq -0x448(%rbp), %rdi
callq 0x62d0
jmp 0xdfad
movq -0x4d0(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x88a0
jmp 0xdfc2
leaq -0x448(%rbp), %rdi
callq 0x31a0
leaq -0x449(%rbp), %rdi
callq 0x32e0
jmp 0xe042
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x428(%rbp), %rdi
callq 0x31a0
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xe031
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x448(%rbp), %rdi
callq 0x31a0
leaq -0x449(%rbp), %rdi
callq 0x32e0
jmp 0xe285
movb $0x1, -0x1(%rbp)
movl $0x1, -0x98(%rbp)
jmp 0xe25c
testb $0x1, -0x81(%rbp)
je 0xe112
movb $0x0, -0x81(%rbp)
leaq -0x471(%rbp), %rdi
movq %rdi, -0x608(%rbp)
callq 0x3430
movq -0x608(%rbp), %rdx
leaq 0x180dc(%rip), %rsi     # 0x26166
leaq -0x470(%rbp), %rdi
callq 0x62d0
jmp 0xe098
movq -0x4d0(%rbp), %rdi
leaq -0x470(%rbp), %rsi
movl $0x1, %edx
callq 0x8b50
jmp 0xe0b2
leaq -0x470(%rbp), %rdi
callq 0x31a0
leaq -0x471(%rbp), %rdi
callq 0x32e0
jmp 0xe1b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xe101
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x470(%rbp), %rdi
callq 0x31a0
leaq -0x471(%rbp), %rdi
callq 0x32e0
jmp 0xe285
leaq -0x499(%rbp), %rdi
movq %rdi, -0x610(%rbp)
callq 0x3430
movq -0x610(%rbp), %rdx
leaq 0x18082(%rip), %rsi     # 0x261b5
leaq -0x498(%rbp), %rdi
callq 0x62d0
jmp 0xe141
movq -0x4d0(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0x88a0
jmp 0xe156
leaq -0x498(%rbp), %rdi
callq 0x31a0
leaq -0x499(%rbp), %rdi
callq 0x32e0
jmp 0xe1b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xe1a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x498(%rbp), %rdi
callq 0x31a0
leaq -0x499(%rbp), %rdi
callq 0x32e0
jmp 0xe285
jmp 0xe1b5
jmp 0xe1b7
jmp 0xd5ff
leaq -0x4c1(%rbp), %rdi
movq %rdi, -0x618(%rbp)
callq 0x3430
movq -0x618(%rbp), %rdx
leaq 0x1806d(%rip), %rsi     # 0x2624a
leaq -0x4c0(%rbp), %rdi
callq 0x62d0
jmp 0xe1eb
movq -0x4d0(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x88a0
jmp 0xe200
leaq -0x4c0(%rbp), %rdi
callq 0x31a0
leaq -0x4c1(%rbp), %rdi
callq 0x32e0
jmp 0xe25a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
jmp 0xe24c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x90(%rbp)
movl %eax, -0x94(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0x31a0
leaq -0x4c1(%rbp), %rdi
callq 0x32e0
jmp 0xe285
ud2
leaq -0x80(%rbp), %rdi
callq 0x31a0
leaq -0x60(%rbp), %rdi
callq 0x31a0
leaq -0x40(%rbp), %rdi
callq 0x31a0
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x620, %rsp            # imm = 0x620
popq %rbp
retq
leaq -0x80(%rbp), %rdi
callq 0x31a0
leaq -0x60(%rbp), %rdi
callq 0x31a0
leaq -0x40(%rbp), %rdi
callq 0x31a0
movq -0x90(%rbp), %rdi
callq 0x3420
nopl (%rax)