// File: stacksmith[P]picoasm/cassembler.cpp
// Function: CAssembler::addInstruction(instrNumber, CSourceLine, int)
bool CAssembler::addInstruction( instrNumber instr, CSourceLine sourceLine, int offset )
{
	unsigned int address = sourceLine.m_address ;
	string s1 = sourceLine.getColumn( offset + 1 ) ;
	string s2 = sourceLine.getColumn( offset + 2 ) ;
	string s3 = sourceLine.getColumn( offset + 3 ) ;
	int line = sourceLine.m_lineNr ;
	
	uint32_t code ;
	string s ;
	bool b ;
	switch( instr ) {
		
	case ENABLE:
	case DISABLE:
		if ( toUpper( s1 ) != "INTERRUPT" ) {
			error( line , "'INTERRUPT' expected" ) ;
			return FALSE ;
		}
		if ( instr == ENABLE )
			code = instrENABLE_INTERRUPT ;
		else
			code = instrDISABLE_INTERRUPT ;
		
		break ;
	case RETURNI:
		if ( toUpper( s1 ) == "ENABLE" ) {
			code = instrRETURNI_ENABLE ;
		} else if ( toUpper( s1 ) == "DISABLE" ) {
			code = instrRETURNI_DISABLE ;
		} else {
			error( line , "'ENABLE' or 'DISABLE' expected" ) ;
		}
			
		break ;
	
	case CALL:
	case JUMP:
	case RETURN:
		b = TRUE ;
		if ( toUpper( s1 ) == "C" ) {
			switch( instr ) {
			case CALL    : code = instrCALLC ; break ;
			case JUMP    : code = instrJUMPC ; break ;
			case RETURN  : code = instrRETURNC ; break ;
			default: error( line , "'CALL', 'JUMP' or 'RETURN' expected" ) ; return FALSE ;
			}
		} else if ( toUpper( s1 ) == "NC" ) {
			switch( instr ) {
			case CALL    : code = instrCALLNC ; break ;
			case JUMP    : code = instrJUMPNC ; break ;
			case RETURN  : code = instrRETURNNC ; break ;
			default: error( line , "'CALL', 'JUMP' or 'RETURN' expected" ) ; return FALSE ;
			}
		} else if ( toUpper( s1 ) == "NZ" ) {
			switch( instr ) {
			case CALL    : code = instrCALLNZ ; break ;
			case JUMP    : code = instrJUMPNZ ; break ;
			case RETURN  : code = instrRETURNNZ ; break ;
			default: error( line , "'CALL', 'JUMP' or 'RETURN' expected" ) ; return FALSE ;
			}
		} else if ( toUpper( s1 ) == "Z" ) {
			switch( instr ) {
			case CALL    : code = instrCALLZ ; break ;
			case JUMP    : code = instrJUMPZ ; break ;
			case RETURN  : code = instrRETURNZ ; break ;
			default: error( line , "'CALL', 'JUMP' or 'RETURN' expected" ) ; return FALSE ;
			}
		} else {
			switch( instr ) {
			case CALL    : code = instrCALL ; break ;
			case JUMP    : code = instrJUMP ; break ;
			case RETURN  : code = instrRETURN ; break ;
			default: error( line , "'CALL', 'JUMP' or 'RETURN' expected" ) ; return FALSE ;
			}
			b = FALSE ;
		}
		
		
		if ( instr != RETURN ) {
			if ( b ) {
				if ( s2 != "," ) {
					error( line , "Comma expected" ) ;
					return FALSE ;
				}
				s = s3 ;
			} else
				s = s1 ;
		
			s = translateLabel( s )  ;
			int labelVal ;
		
			if ( sscanf( s.c_str(), "%d", &labelVal ) != 1 )  {
				error( line , "Invalid label" ) ;
				return FALSE ;
			}
		
			code |= labelVal ;
		}
		break ;
	default:
		int reg = getRegister( translateRegister( s1 ) ) ;
		if ( reg < 0 ) {
			error( line , "Registername expected" ) ;
			return FALSE ;
		}
		
		switch ( instr ) {
		case RL:	code = instrRL_SX | instrROTATE |( reg << 8 ) ; break ;
		case RR:	code = instrRR_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SL0:	code = instrSL0_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SL1:	code = instrSL1_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SLA:	code = instrSLA_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SLX:	code = instrSLX_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SR0:	code = instrSR0_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SR1:	code = instrSR1_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SRA:	code = instrSRA_SX | instrROTATE | ( reg << 8 ) ; break ;
		case SRX:	code = instrSRX_SX | instrROTATE |( reg << 8 ) ; break ;
		default:
			if ( s2 != "," ) {
				error( line , "Comma expected" ) ;
				return FALSE ;
			}
			
			switch( instr ) {
			case STORE:
			case OUTPUT:
			case INPUT:
			case FETCH:
				if ( sourceLine.getColumn( offset + 3 ) == "(" ) {
					if ( !sourceLine.isColumn( offset + 5 ) || sourceLine.getColumn( offset + 5 ) != ")" ) {
						error( line , "')' expected" ) ;
						return FALSE ;
					}
				
					int reg2 = getRegister( translateRegister( sourceLine.getColumn( offset + 4 ) ) ) ;
					if ( reg2 < 0 ) {
						error( line , "Register expected" ) ;
						return FALSE ;
					}
					switch( instr ) {
						case STORE : code = instrSTORE_SX_SY | ( reg << 8 ) | (reg2 << 4) ; break ;
						case OUTPUT: code = instrOUTPUT_SX_SY | ( reg << 8 ) | (reg2 << 4) ; break ;
						case INPUT : code = instrINPUT_SX_SY | ( reg << 8 ) | (reg2 << 4) ; break ;
						case FETCH : code = instrFETCH_SX_SY | ( reg << 8 ) | (reg2 << 4) ; break ;
						default: error( line , "'STORE', 'OUTPUT', 'INPUT' or 'FETCH' expected" ) ; return FALSE ;
					}
				} else {
				
					unsigned int value ;
					if ( sscanf( translateConstant( s3 ).c_str(), "%X", &value ) != 1 ) {
						error( line , "Value expected" ) ;
						return FALSE ;
					}
					
					switch( instr ) {
						case STORE : code = instrSTORE_SX_SS | ( reg << 8 ) | value ; break ;
						case OUTPUT: code = instrOUTPUT_SX_PP | ( reg << 8 ) | value ; break ;
						case INPUT : code = instrINPUT_SX_PP | ( reg << 8 ) | value ; break ;
						case FETCH : code = instrFETCH_SX_SS | ( reg << 8 ) | value ; break ;
						default: error( line , "'STORE', 'OUTPUT', 'INPUT' or 'FETCH' expected" ) ; return FALSE ;
					}
				}
				break ;
			default:
				int reg2 = getRegister( translateRegister( s3 ) ) ;
		
				if ( reg2 < 0 ) {
					unsigned int value ;
					if ( sscanf( translateConstant( s3 ).c_str(), "%X", &value ) != 1 ) {
						error( line , "Value expected" ) ;
						return FALSE ;
					}
					switch( instr ) {
					case ADD     : code = instrADD_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case ADDCY   : code = instrADDCY_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case AND     : code = instrAND_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case COMPARE : code = instrCOMPARE_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case LOAD    : code = instrLOAD_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case OR      : code = instrOR_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case SUB     : code = instrSUB_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case SUBCY   : code = instrSUBCY_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case TEST    : code = instrTEST_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					case XOR     : code = instrXOR_SX_KK | ( reg << 8 ) | ( value ) ; break ;
					default      : error( line , "Unknown instruction" )  ; return FALSE ;
					}
				} else {
				  
					switch( instr ) {
					case ADD    : code = instrADD_SX_SY | ( reg << 8 ) | ( reg2  << 4 ) ; break ;
					case ADDCY  : code = instrADDCY_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case AND    : code = instrAND_SX_SY | ( reg << 8 ) | (  reg2 << 4 ) ; break  ;
					case COMPARE: code = instrCOMPARE_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case LOAD   : code = instrLOAD_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case OR     : code = instrOR_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case SUB    : code = instrSUB_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case SUBCY  : code = instrSUBCY_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case TEST   : code = instrTEST_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					case XOR    : code = instrXOR_SX_SY | ( reg << 8 ) | ( reg2 << 4 ) ; break ;
					default     : error( line , "Unknown instruction" ) ; return FALSE ;
					}	
				}
			}
		}
	}

	
	m_code->setInstruction( address, code, line ) ;
	
	return TRUE ;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x510, %rsp            # imm = 0x510
movq %rdx, -0x490(%rbp)
movl %esi, %eax
movq -0x490(%rbp), %rsi
movq %rsi, -0x480(%rbp)
movq %rdi, -0x10(%rbp)
movl %eax, -0x14(%rbp)
movq %rsi, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x488(%rbp)
movl 0x20(%rsi), %eax
movl %eax, -0x28(%rbp)
movl -0x24(%rbp), %edx
incl %edx
leaq -0x48(%rbp), %rdi
callq 0x40a4c0
movq -0x480(%rbp), %rsi
movl -0x24(%rbp), %edx
addl $0x2, %edx
leaq -0x68(%rbp), %rdi
callq 0x40a4c0
jmp 0x407797
movq -0x480(%rbp), %rsi
movl -0x24(%rbp), %edx
addl $0x3, %edx
leaq -0x98(%rbp), %rdi
callq 0x40a4c0
jmp 0x4077b2
movq -0x480(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x9c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x4859c0
movl -0x14(%rbp), %eax
movl %eax, -0x494(%rbp)
subl $0x3, %eax
je 0x407abf
jmp 0x4077e1
movl -0x494(%rbp), %eax
addl $-0x5, %eax
subl $0x2, %eax
jb 0x407849
jmp 0x4077f1
movl -0x494(%rbp), %eax
subl $0x9, %eax
je 0x407abf
jmp 0x407802
movl -0x494(%rbp), %eax
subl $0xd, %eax
je 0x407abf
jmp 0x407813
movl -0x494(%rbp), %eax
subl $0xe, %eax
je 0x407946
jmp 0x40814a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x408e05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x408dfc
leaq -0x108(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x40785b
leaq -0xe8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x405c20
jmp 0x407870
leaq 0x18417f(%rip), %rsi    # 0x58b9f6
leaq -0xe8(%rbp), %rdi
callq 0x40a5a0
movb %al, -0x495(%rbp)
jmp 0x40788b
leaq -0xe8(%rbp), %rdi
callq 0x485ad0
leaq -0x108(%rbp), %rdi
callq 0x485ad0
movb -0x495(%rbp), %al
testb $0x1, %al
jne 0x4078af
jmp 0x407925
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183f07(%rip), %rdx    # 0x58b7ca
callq 0x405dc0
jmp 0x4078ca
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x408de4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x407914
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x485ad0
leaq -0x108(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
cmpl $0x6, -0x14(%rbp)
jne 0x407937
movl $0x3c001, -0xa0(%rbp)   # imm = 0x3C001
jmp 0x407941
movl $0x3c000, -0xa0(%rbp)   # imm = 0x3C000
jmp 0x408d79
leaq -0x150(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x407958
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x405c20
jmp 0x40796d
leaq 0x184112(%rip), %rsi    # 0x58ba86
leaq -0x130(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x496(%rbp)
jmp 0x407988
leaq -0x130(%rbp), %rdi
callq 0x485ad0
leaq -0x150(%rbp), %rdi
callq 0x485ad0
movb -0x496(%rbp), %al
testb $0x1, %al
jne 0x4079ac
jmp 0x4079f2
movl $0x38001, -0xa0(%rbp)   # imm = 0x38001
jmp 0x407aba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x4079e1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x485ad0
leaq -0x150(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
leaq -0x190(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x407a04
leaq -0x170(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x405c20
jmp 0x407a19
leaq 0x184056(%rip), %rsi    # 0x58ba76
leaq -0x170(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x497(%rbp)
jmp 0x407a34
leaq -0x170(%rbp), %rdi
callq 0x485ad0
leaq -0x190(%rbp), %rdi
callq 0x485ad0
movb -0x497(%rbp), %al
testb $0x1, %al
jne 0x407a58
jmp 0x407a9b
movl $0x38000, -0xa0(%rbp)   # imm = 0x38000
jmp 0x407ab8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x407a8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x485ad0
leaq -0x190(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183d30(%rip), %rdx    # 0x58b7df
callq 0x405dc0
jmp 0x407ab6
jmp 0x407ab8
jmp 0x407aba
jmp 0x408d79
movb $0x1, -0xc1(%rbp)
leaq -0x1d0(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x407ad8
leaq -0x1b0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x405c20
jmp 0x407aed
leaq 0x183f5b(%rip), %rsi    # 0x58ba4f
leaq -0x1b0(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x498(%rbp)
jmp 0x407b08
leaq -0x1b0(%rbp), %rdi
callq 0x485ad0
leaq -0x1d0(%rbp), %rdi
callq 0x485ad0
movb -0x498(%rbp), %al
testb $0x1, %al
jne 0x407b2f
jmp 0x407be7
movl -0x14(%rbp), %eax
movl %eax, -0x49c(%rbp)
subl $0x3, %eax
je 0x407b90
jmp 0x407b3f
movl -0x49c(%rbp), %eax
subl $0x9, %eax
je 0x407b9c
jmp 0x407b4c
movl -0x49c(%rbp), %eax
subl $0xd, %eax
je 0x407ba8
jmp 0x407bb4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x407b7f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x485ad0
leaq -0x1d0(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl $0x31800, -0xa0(%rbp)   # imm = 0x31800
jmp 0x407be2
movl $0x35800, -0xa0(%rbp)   # imm = 0x35800
jmp 0x407be2
movl $0x2b800, -0xa0(%rbp)   # imm = 0x2B800
jmp 0x407be2
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183c36(%rip), %rdx    # 0x58b7fe
callq 0x405dc0
jmp 0x407bcf
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x407fd3
leaq -0x210(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x407bf9
leaq -0x1f0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x405c20
jmp 0x407c0e
leaq 0x183e43(%rip), %rsi    # 0x58ba58
leaq -0x1f0(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x49d(%rbp)
jmp 0x407c29
leaq -0x1f0(%rbp), %rdi
callq 0x485ad0
leaq -0x210(%rbp), %rdi
callq 0x485ad0
movb -0x49d(%rbp), %al
testb $0x1, %al
jne 0x407c50
jmp 0x407d08
movl -0x14(%rbp), %eax
movl %eax, -0x4a4(%rbp)
subl $0x3, %eax
je 0x407cb1
jmp 0x407c60
movl -0x4a4(%rbp), %eax
subl $0x9, %eax
je 0x407cbd
jmp 0x407c6d
movl -0x4a4(%rbp), %eax
subl $0xd, %eax
je 0x407cc9
jmp 0x407cd5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x407ca0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x485ad0
leaq -0x210(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl $0x31c00, -0xa0(%rbp)   # imm = 0x31C00
jmp 0x407d03
movl $0x35c00, -0xa0(%rbp)   # imm = 0x35C00
jmp 0x407d03
movl $0x2bc00, -0xa0(%rbp)   # imm = 0x2BC00
jmp 0x407d03
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183b15(%rip), %rdx    # 0x58b7fe
callq 0x405dc0
jmp 0x407cf0
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x407fd1
leaq -0x250(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x407d1a
leaq -0x230(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x405c20
jmp 0x407d2f
leaq 0x183d2c(%rip), %rsi    # 0x58ba62
leaq -0x230(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x4a5(%rbp)
jmp 0x407d4a
leaq -0x230(%rbp), %rdi
callq 0x485ad0
leaq -0x250(%rbp), %rdi
callq 0x485ad0
movb -0x4a5(%rbp), %al
testb $0x1, %al
jne 0x407d71
jmp 0x407e29
movl -0x14(%rbp), %eax
movl %eax, -0x4ac(%rbp)
subl $0x3, %eax
je 0x407dd2
jmp 0x407d81
movl -0x4ac(%rbp), %eax
subl $0x9, %eax
je 0x407dde
jmp 0x407d8e
movl -0x4ac(%rbp), %eax
subl $0xd, %eax
je 0x407dea
jmp 0x407df6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x407dc1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x485ad0
leaq -0x250(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl $0x31400, -0xa0(%rbp)   # imm = 0x31400
jmp 0x407e24
movl $0x35400, -0xa0(%rbp)   # imm = 0x35400
jmp 0x407e24
movl $0x2b400, -0xa0(%rbp)   # imm = 0x2B400
jmp 0x407e24
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x1839f4(%rip), %rdx    # 0x58b7fe
callq 0x405dc0
jmp 0x407e11
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x407fcf
leaq -0x290(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x407e3b
leaq -0x270(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x405c20
jmp 0x407e50
leaq 0x183c15(%rip), %rsi    # 0x58ba6c
leaq -0x270(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x4ad(%rbp)
jmp 0x407e6b
leaq -0x270(%rbp), %rdi
callq 0x485ad0
leaq -0x290(%rbp), %rdi
callq 0x485ad0
movb -0x4ad(%rbp), %al
testb $0x1, %al
jne 0x407e92
jmp 0x407f4a
movl -0x14(%rbp), %eax
movl %eax, -0x4b4(%rbp)
subl $0x3, %eax
je 0x407ef3
jmp 0x407ea2
movl -0x4b4(%rbp), %eax
subl $0x9, %eax
je 0x407eff
jmp 0x407eaf
movl -0x4b4(%rbp), %eax
subl $0xd, %eax
je 0x407f0b
jmp 0x407f17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x407ee2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x485ad0
leaq -0x290(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl $0x31000, -0xa0(%rbp)   # imm = 0x31000
jmp 0x407f45
movl $0x35000, -0xa0(%rbp)   # imm = 0x35000
jmp 0x407f45
movl $0x2b000, -0xa0(%rbp)   # imm = 0x2B000
jmp 0x407f45
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x1838d3(%rip), %rdx    # 0x58b7fe
callq 0x405dc0
jmp 0x407f32
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x407fcd
movl -0x14(%rbp), %eax
movl %eax, -0x4b8(%rbp)
subl $0x3, %eax
je 0x407f74
jmp 0x407f5a
movl -0x4b8(%rbp), %eax
subl $0x9, %eax
je 0x407f80
jmp 0x407f67
movl -0x4b8(%rbp), %eax
subl $0xd, %eax
je 0x407f8c
jmp 0x407f98
movl $0x30000, -0xa0(%rbp)   # imm = 0x30000
jmp 0x407fc6
movl $0x34000, -0xa0(%rbp)   # imm = 0x34000
jmp 0x407fc6
movl $0x2a000, -0xa0(%rbp)   # imm = 0x2A000
jmp 0x407fc6
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183852(%rip), %rdx    # 0x58b7fe
callq 0x405dc0
jmp 0x407fb3
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movb $0x0, -0xc1(%rbp)
jmp 0x407fcf
jmp 0x407fd1
jmp 0x407fd3
cmpl $0xd, -0x14(%rbp)
je 0x408145
testb $0x1, -0xc1(%rbp)
je 0x40804f
leaq 0x1836c3(%rip), %rsi    # 0x58b6b0
leaq -0x68(%rbp), %rdi
callq 0x40a5a0
movb %al, -0x4b9(%rbp)
jmp 0x407ffe
movb -0x4b9(%rbp), %al
testb $0x1, %al
jne 0x40800a
jmp 0x408038
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183694(%rip), %rdx    # 0x58b6b2
callq 0x405dc0
jmp 0x408025
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
leaq -0xc0(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x485b00
jmp 0x40804d
jmp 0x408063
leaq -0xc0(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x485b00
jmp 0x408061
jmp 0x408063
leaq -0x2d0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x4881b0
jmp 0x408078
movq -0x488(%rbp), %rsi
leaq -0x2b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rdx
callq 0x407650
jmp 0x408094
leaq -0xc0(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x485b20
leaq -0x2b0(%rbp), %rdi
callq 0x485ad0
leaq -0x2d0(%rbp), %rdi
callq 0x485ad0
leaq -0xc0(%rbp), %rdi
callq 0x487510
movq %rax, %rdi
leaq 0x193edf(%rip), %rsi    # 0x59bfb4
leaq -0x2d4(%rbp), %rdx
movb $0x0, %al
callq 0x4de5c0
cmpl $0x1, %eax
je 0x408133
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183726(%rip), %rdx    # 0x58b822
callq 0x405dc0
jmp 0x408103
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2d0(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl -0x2d4(%rbp), %eax
orl -0xa0(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d79
leaq -0x318(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x4881b0
jmp 0x40815c
movq -0x488(%rbp), %rsi
leaq -0x2f8(%rbp), %rdi
leaq -0x318(%rbp), %rdx
callq 0x407490
jmp 0x408178
movq -0x488(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x405e30
movl %eax, -0x4c0(%rbp)
jmp 0x408193
leaq -0x2f8(%rbp), %rdi
callq 0x485ad0
leaq -0x318(%rbp), %rdi
callq 0x485ad0
movl -0x4c0(%rbp), %eax
movl %eax, -0x2d8(%rbp)
cmpl $0x0, -0x2d8(%rbp)
jge 0x408225
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x18365c(%rip), %rdx    # 0x58b830
callq 0x405dc0
jmp 0x4081db
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x408214
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x485ad0
leaq -0x318(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl -0x14(%rbp), %eax
addl $-0x10, %eax
movl %eax, %ecx
movq %rcx, -0x4c8(%rbp)
subl $0x9, %eax
ja 0x40834e
movq -0x4c8(%rbp), %rax
leaq 0x1831e5(%rip), %rcx    # 0x58b430
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x20002, %eax          # imm = 0x20002
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2000c, %eax          # imm = 0x2000C
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x20006, %eax          # imm = 0x20006
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x20007, %eax          # imm = 0x20007
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x20000, %eax          # imm = 0x20000
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x20004, %eax          # imm = 0x20004
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2000e, %eax          # imm = 0x2000E
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2000f, %eax          # imm = 0x2000F
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x20008, %eax          # imm = 0x20008
movl %eax, -0xa0(%rbp)
jmp 0x408d77
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2000a, %eax          # imm = 0x2000A
movl %eax, -0xa0(%rbp)
jmp 0x408d77
leaq 0x18335b(%rip), %rsi    # 0x58b6b0
leaq -0x68(%rbp), %rdi
callq 0x40a5a0
movb %al, -0x4c9(%rbp)
jmp 0x408366
movb -0x4c9(%rbp), %al
testb $0x1, %al
jne 0x408372
jmp 0x4083a0
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x18332c(%rip), %rdx    # 0x58b6b2
callq 0x405dc0
jmp 0x40838d
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movl -0x14(%rbp), %eax
movl %eax, -0x4d0(%rbp)
addl $-0x7, %eax
subl $0x2, %eax
jb 0x4083d1
jmp 0x4083b3
movl -0x4d0(%rbp), %eax
subl $0xc, %eax
je 0x4083d1
jmp 0x4083c0
movl -0x4d0(%rbp), %eax
subl $0x1a, %eax
jne 0x4088b2
jmp 0x4083d1
movq -0x480(%rbp), %rsi
movl -0x24(%rbp), %edx
addl $0x3, %edx
leaq -0x338(%rbp), %rdi
callq 0x40a4c0
jmp 0x4083ec
leaq 0x183584(%rip), %rsi    # 0x58b977
leaq -0x338(%rbp), %rdi
callq 0x40a3c0
movb %al, -0x4d1(%rbp)
jmp 0x408407
leaq -0x338(%rbp), %rdi
callq 0x485ad0
movb -0x4d1(%rbp), %al
testb $0x1, %al
jne 0x408422
jmp 0x408712
movq -0x480(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $0x5, %esi
movb $0x0, -0x359(%rbp)
callq 0x40a570
movb %al, -0x4d2(%rbp)
jmp 0x408443
movb -0x4d2(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x4d3(%rbp)
jne 0x408458
jmp 0x4084a3
movq -0x480(%rbp), %rsi
movl -0x24(%rbp), %edx
addl $0x5, %edx
leaq -0x358(%rbp), %rdi
callq 0x40a4c0
jmp 0x408473
movb $0x1, -0x359(%rbp)
leaq 0x1a5754(%rip), %rsi    # 0x5adbd5
leaq -0x358(%rbp), %rdi
callq 0x40a5a0
movb %al, -0x4d4(%rbp)
jmp 0x408495
movb -0x4d4(%rbp), %al
movb %al, -0x4d3(%rbp)
jmp 0x4084a3
movb -0x4d3(%rbp), %al
movb %al, -0x4d5(%rbp)
testb $0x1, -0x359(%rbp)
jne 0x4084ba
jmp 0x4084c6
leaq -0x358(%rbp), %rdi
callq 0x485ad0
movb -0x4d5(%rbp), %al
testb $0x1, %al
jne 0x4084d2
jmp 0x408545
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183360(%rip), %rdx    # 0x58b846
callq 0x405dc0
jmp 0x4084ed
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x338(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
testb $0x1, -0x359(%rbp)
jne 0x408534
jmp 0x408540
leaq -0x358(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movq -0x480(%rbp), %rsi
movl -0x24(%rbp), %edx
addl $0x4, %edx
leaq -0x3a0(%rbp), %rdi
callq 0x40a4c0
jmp 0x408560
movq -0x488(%rbp), %rsi
leaq -0x380(%rbp), %rdi
leaq -0x3a0(%rbp), %rdx
callq 0x407490
jmp 0x40857c
movq -0x488(%rbp), %rdi
leaq -0x380(%rbp), %rsi
callq 0x405e30
movl %eax, -0x4dc(%rbp)
jmp 0x408597
leaq -0x380(%rbp), %rdi
callq 0x485ad0
leaq -0x3a0(%rbp), %rdi
callq 0x485ad0
movl -0x4dc(%rbp), %eax
movl %eax, -0x360(%rbp)
cmpl $0x0, -0x360(%rbp)
jge 0x408629
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x18327b(%rip), %rdx    # 0x58b853
callq 0x405dc0
jmp 0x4085df
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x408618
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x485ad0
leaq -0x3a0(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl -0x14(%rbp), %eax
addl $-0x7, %eax
movl %eax, %ecx
movq %rcx, -0x4e8(%rbp)
subl $0x13, %eax
ja 0x4086df
movq -0x4e8(%rbp), %rax
leaq 0x182e59(%rip), %rcx    # 0x58b4a8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2f000, %eax          # imm = 0x2F000
movl -0x360(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x40870d
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2d000, %eax          # imm = 0x2D000
movl -0x360(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x40870d
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x5000, %eax           # imm = 0x5000
movl -0x360(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x40870d
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x7000, %eax           # imm = 0x7000
movl -0x360(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x40870d
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x183172(%rip), %rdx    # 0x58b865
callq 0x405dc0
jmp 0x4086fa
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x4088ad
leaq -0x3e8(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x4881b0
jmp 0x408727
movq -0x488(%rbp), %rsi
leaq -0x3c8(%rbp), %rdi
leaq -0x3e8(%rbp), %rdx
callq 0x407570
jmp 0x408743
leaq -0x3c8(%rbp), %rdi
callq 0x487510
movq %rax, %rdi
leaq 0x182f21(%rip), %rsi    # 0x58b67a
leaq -0x3a4(%rbp), %rdx
movb $0x0, %al
callq 0x4de5c0
movl %eax, -0x4ec(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x485ad0
leaq -0x3e8(%rbp), %rdi
callq 0x485ad0
movl -0x4ec(%rbp), %eax
cmpl $0x1, %eax
je 0x4087db
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x182fe3(%rip), %rdx    # 0x58b787
callq 0x405dc0
jmp 0x4087ab
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl -0x14(%rbp), %eax
addl $-0x7, %eax
movl %eax, %ecx
movq %rcx, -0x4f8(%rbp)
subl $0x13, %eax
ja 0x40887d
movq -0x4f8(%rbp), %rax
leaq 0x182c57(%rip), %rcx    # 0x58b458
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2e000, %eax          # imm = 0x2E000
orl -0x3a4(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x4088ab
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x2c000, %eax          # imm = 0x2C000
orl -0x3a4(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x4088ab
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x4000, %eax           # imm = 0x4000
orl -0x3a4(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x4088ab
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x6000, %eax           # imm = 0x6000
orl -0x3a4(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x4088ab
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x182fd4(%rip), %rdx    # 0x58b865
callq 0x405dc0
jmp 0x408898
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x4088ad
jmp 0x408d75
leaq -0x430(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x4881b0
jmp 0x4088c7
movq -0x488(%rbp), %rsi
leaq -0x410(%rbp), %rdi
leaq -0x430(%rbp), %rdx
callq 0x407490
jmp 0x4088e3
movq -0x488(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x405e30
movl %eax, -0x4fc(%rbp)
jmp 0x4088fe
leaq -0x410(%rbp), %rdi
callq 0x485ad0
leaq -0x430(%rbp), %rdi
callq 0x485ad0
movl -0x4fc(%rbp), %eax
movl %eax, -0x3ec(%rbp)
cmpl $0x0, -0x3ec(%rbp)
jge 0x408bbc
leaq -0x478(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x4881b0
jmp 0x408944
movq -0x488(%rbp), %rsi
leaq -0x458(%rbp), %rdi
leaq -0x478(%rbp), %rdx
callq 0x407570
jmp 0x408960
leaq -0x458(%rbp), %rdi
callq 0x487510
movq %rax, %rdi
leaq 0x182d04(%rip), %rsi    # 0x58b67a
leaq -0x434(%rbp), %rdx
movb $0x0, %al
callq 0x4de5c0
movl %eax, -0x500(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x485ad0
leaq -0x478(%rbp), %rdi
callq 0x485ad0
movl -0x500(%rbp), %eax
cmpl $0x1, %eax
je 0x408a33
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x182dc2(%rip), %rdx    # 0x58b787
callq 0x405dc0
jmp 0x4089cc
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x408a05
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x485ad0
leaq -0x430(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x485ad0
jmp 0x408de4
movl -0x14(%rbp), %eax
movq %rax, -0x508(%rbp)
subq $0x1e, %rax
ja 0x408b89
movq -0x508(%rbp), %rax
leaq 0x182b1f(%rip), %rcx    # 0x58b574
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x18000, %eax          # imm = 0x18000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1a000, %eax          # imm = 0x1A000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0xa000, %eax           # imm = 0xA000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x14000, %eax          # imm = 0x14000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x0, %eax
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0xc000, %eax           # imm = 0xC000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1c000, %eax          # imm = 0x1C000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1e000, %eax          # imm = 0x1E000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x12000, %eax          # imm = 0x12000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0xe000, %eax           # imm = 0xE000
orl -0x434(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x408bb7
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x182cf7(%rip), %rdx    # 0x58b894
callq 0x405dc0
jmp 0x408ba4
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x408d73
movl -0x14(%rbp), %eax
movq %rax, -0x510(%rbp)
subq $0x1e, %rax
ja 0x408d46
movq -0x510(%rbp), %rax
leaq 0x18291a(%rip), %rcx    # 0x58b4f8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x19000, %eax          # imm = 0x19000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1b000, %eax          # imm = 0x1B000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0xb000, %eax           # imm = 0xB000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x15000, %eax          # imm = 0x15000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1000, %eax           # imm = 0x1000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0xd000, %eax           # imm = 0xD000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1d000, %eax          # imm = 0x1D000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x1f000, %eax          # imm = 0x1F000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0x13000, %eax          # imm = 0x13000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movl -0x2d8(%rbp), %eax
shll $0x8, %eax
orl $0xf000, %eax           # imm = 0xF000
movl -0x3ec(%rbp), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movl %eax, -0xa0(%rbp)
jmp 0x408d71
movq -0x488(%rbp), %rdi
movl -0x9c(%rbp), %esi
leaq 0x182b3a(%rip), %rdx    # 0x58b894
callq 0x405dc0
jmp 0x408d61
movb $0x0, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
jmp 0x408dac
jmp 0x408d73
jmp 0x408d75
jmp 0x408d77
jmp 0x408d79
movq -0x488(%rbp), %rax
movq 0x80(%rax), %rdi
movzwl -0x28(%rbp), %esi
movl -0xa0(%rbp), %edx
movl -0x9c(%rbp), %ecx
callq 0x4138b0
jmp 0x408d9e
movb $0x1, -0x1(%rbp)
movl $0x1, -0x10c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x485ad0
leaq -0x98(%rbp), %rdi
callq 0x485ad0
leaq -0x68(%rbp), %rdi
callq 0x485ad0
leaq -0x48(%rbp), %rdi
callq 0x485ad0
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x510, %rsp            # imm = 0x510
popq %rbp
retq
leaq -0xc0(%rbp), %rdi
callq 0x485ad0
leaq -0x98(%rbp), %rdi
callq 0x485ad0
leaq -0x68(%rbp), %rdi
callq 0x485ad0
leaq -0x48(%rbp), %rdi
callq 0x485ad0
movq -0x70(%rbp), %rdi
callq 0x4b74e0
nopw (%rax,%rax)