// File: /workspace/github_cpp_makefile_star2_O3/MPSLab-ASU[P]DiRAC/./src/baseAccelSim.cc
// Function: baseAccelSim::readArchSpec(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void baseAccelSim::readArchSpec(string archSpecFileName) {
	string key, value, line;
	map <string, string> archSpec;

	ifstream inFile(archSpecFileName.c_str());

	if(!inFile)
	{
		cout << "Cannot open and read file: " << archSpecFileName.c_str() << endl;
		exit (EXIT_FAILURE);
	}

	while(getline(inFile, line)) {
		istringstream tokenStream(line);
		tokenStream >> key >> value;
		// Skip comments beginning with #
		// Skip empty lines
		if ( (key.find("#") != std::string::npos) || (line.empty()) )
	    continue;
		archSpec[key] = value;
	}
	inFile.close();

	nRows_PE_Array 				= stoi(archSpec["nRows_PE_Array"]);
	nCols_PE_Array 				= stoi(archSpec["nCols_PE_Array"]);
	RF_size 							= stoi(archSpec["RF_size"]);
	SPM_size 							= stoi(archSpec["SPM_size"]);
	total_banks_in_SPM 		= stoi(archSpec["total_banks_in_SPM"]);
	total_bytes_in_bank = stoi(archSpec["total_bytes_in_bank"]);
	accelerator_freq 			= stoi(archSpec["accelerator_freq"]);
	DMA_latency_setup 		= stoi(archSpec["DMA_init_cycles"]);
	DMA_latency_transfer_byte		= stod(archSpec["DMA_cycles_per_byte"]);
	DMA_freq 							= stoi(archSpec["DMA_freq"]);
	multiplier_stages			= stoi(archSpec["multiplier_stages"]);
	adder_stages 					= stoi(archSpec["adder_stages"]);
	maxItems_PE_FIFO			= stoi(archSpec["maxItems_PE_FIFO"]);
	size_insMem						= stoi(archSpec["size_insMem"]);

	inNetworks						= stoi(archSpec["inNetworks"]);
	outNetworks						= stoi(archSpec["outNetworks"]);

	total_PEs 						= nRows_PE_Array * nCols_PE_Array;
	// Consider total number of registers in the Register Files of PEs
	RF_size 							= RF_size / sizeof(data_type);
	totalNetworks					= inNetworks + outNetworks;
	// PE pipeline stages: Fetch+ Decoder + RF_Read + Multiplier+Adder + RF_Write
	uint8_t PE_pipeline_stages	= multiplier_stages + adder_stages + 4;
	delay_PE_WB_reduce		= PE_pipeline_stages;

	assert(nRows_PE_Array >= 1 && "Total PEs in a row should be 1 or more.");
	assert(nCols_PE_Array >= 1 && "Total PEs in a column should be 1 or more.");
	assert(RF_size >= 1 && "Registers in the RFs must be 1 or more.");
	assert(SPM_size >= RF_size && "Size of scratchpad memory must be larger than RF size.");
	assert(total_banks_in_SPM >= 1 &&
		"Total banks in Scratch-pad should be 1 or more.");
	assert(total_bytes_in_bank >= 1 &&
		"Total bytes in a bank of the Scratch-pad Memory must be 1 or more.");
	assert(SPM_size == (total_banks_in_SPM * total_bytes_in_bank) &&
		"SPM size must match SPM configuration with multi-banks.");
	assert(accelerator_freq > 0 &&
		"Frequency of the dataflow accelerator must be larger than 0 Hz.");
	assert(DMA_latency_setup > 0 &&
		"Initiation Cycles for DMA invocation should be greater than 0.");
	assert(DMA_latency_transfer_byte > 0 &&
		"Cycles per byte for transfering data through DMA must be greater than 0.");
	assert(DMA_freq > 0 &&
		"Frequency of the DMA for transferring the data must be larger than 0 Hz.");
	assert(multiplier_stages > 0 &&
		"Multiplier stages of Multiply-and-ACcumulate unit must be greater than 0.");
	assert(adder_stages > 0 &&
		"Adder stages of Multiply-and-ACcumulate unit must be greater than 0.");
	assert(maxItems_PE_FIFO > 1 && "Length of FIFOs in PEs for communicating via interconnect should be two or more.");
	assert(size_insMem > 0 && "Total instructions for executing an RF pass should be one or more.");
	assert(inNetworks >= 2 && "Total networks to communicate input data should be 2 or more.");
	assert(outNetworks >= 1 && "Total networks to communicate output data should be 1 or more.");
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x428, %rsp            # imm = 0x428
movq %rsi, %rbx
leaq 0x210(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x1f0(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x50(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x18(%rsp), %rcx
movl $0x0, (%rcx)
movq %rax, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rax, 0x20(%rcx)
movq (%rsi), %rsi
leaq 0x220(%rsp), %rdi
movl $0x8, %edx
callq 0x461750
movq 0x220(%rsp), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x240(%rsp,%rax)
jne 0x40606d
leaq 0x40(%rsp), %r15
leaq 0x60(%rsp), %r12
leaq 0x200(%rsp), %r13
leaq 0x1e0(%rsp), %rbp
leaq 0x195a44(%rip), %rbx    # 0x59aed0
movq $0x606328, %r14         # imm = 0x606328
leaq (%rsp,%rax), %rdi
addq $0x220, %rdi            # imm = 0x220
movl $0xa, %esi
callq 0x465f00
movsbl %al, %edx
leaq 0x220(%rsp), %rdi
movq %r15, %rsi
callq 0x41aa00
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x405554
movq %r12, %rdi
movq %r15, %rsi
movl $0x8, %edx
callq 0x48cfb0
movq %r12, %rdi
movq %r13, %rsi
callq 0x41a680
movq %rax, %rdi
movq %rbp, %rsi
callq 0x41a680
movl $0x1, %ecx
movq %r13, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x497030
cmpq $-0x1, %rax
jne 0x40552b
cmpq $0x0, 0x48(%rsp)
je 0x40552b
leaq 0x10(%rsp), %rdi
movq %r13, %rsi
callq 0x40e08e
movq %rax, %rdi
movq %rbp, %rsi
callq 0x4951f0
movq %r12, %rdi
movq %r14, %rsi
callq 0x48d260
leaq 0xd8(%rsp), %rdi
callq 0x467320
movq 0x220(%rsp), %rax
movq -0x18(%rax), %rax
jmp 0x405493
leaq 0x220(%rsp), %rdi
callq 0x461d00
leaq 0x70(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x18eb4a(%rip), %rsi    # 0x5940bc
leaq 0x18eb51(%rip), %rdx    # 0x5940ca
leaq 0x60(%rsp), %rdi
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
callq 0x4c85e0
movq %rax, %rbx
movl (%rax), %ebp
movl $0x0, (%rax)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4060a6
movslq %eax, %rcx
cmpq %rax, %rcx
jne 0x4060b2
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4060b2
testl %ecx, %ecx
jne 0x4055e0
movl %ebp, (%rbx)
movw %ax, 0x205fc5(%rip)     # 0x60b5ac
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x4055fe
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18eabe(%rip), %rsi    # 0x5940cb
leaq 0x18eac5(%rip), %rdx    # 0x5940d9
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4060be
movabsq $-0x100000000, %r13     # imm = 0xFFFFFFFF00000000
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4060ca
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4060ca
testl %ecx, %ecx
jne 0x40567c
movl %ebp, (%rbx)
movw %ax, 0x205f2b(%rip)     # 0x60b5ae
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x40569a
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18ea31(%rip), %rsi    # 0x5940da
leaq 0x18ea31(%rip), %rdx    # 0x5940e1
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4060d6
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4060e2
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4060e2
testl %ecx, %ecx
jne 0x40570e
movl %ebp, (%rbx)
movw %ax, 0x205e9b(%rip)     # 0x60b5b0
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x40572c
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e9a7(%rip), %rsi    # 0x5940e2
leaq 0x18e9a8(%rip), %rdx    # 0x5940ea
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4060ee
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4060fa
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4060fa
testl %ecx, %ecx
jne 0x4057a0
movl %ebp, (%rbx)
movl %eax, 0x205e0e(%rip)    # 0x60b5b4
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x4057bd
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e91f(%rip), %rsi    # 0x5940eb
leaq 0x18e92a(%rip), %rdx    # 0x5940fd
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x406106
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x406112
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x406112
testl %ecx, %ecx
jne 0x405831
movl %ebp, (%rbx)
movw %ax, 0x205d82(%rip)     # 0x60b5ba
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x40584f
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e8a0(%rip), %rsi    # 0x5940fe
leaq 0x18e8ac(%rip), %rdx    # 0x594111
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x40611e
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x40612a
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x40612a
testl %ecx, %ecx
jne 0x4058c3
movl %ebp, (%rbx)
movw %ax, 0x205cf2(%rip)     # 0x60b5bc
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x4058e1
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e822(%rip), %rsi    # 0x594112
leaq 0x18e82b(%rip), %rdx    # 0x594122
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x406136
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x406142
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x406142
testl %ecx, %ecx
jne 0x405955
movl %ebp, (%rbx)
cvtsi2ss %eax, %xmm0
movss %xmm0, 0x205c5f(%rip)   # 0x60b5c0
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405978
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e79c(%rip), %rsi    # 0x594123
leaq 0x18e7a4(%rip), %rdx    # 0x594132
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x40614e
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x40615a
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x40615a
testl %ecx, %ecx
jne 0x4059ec
movl %ebp, (%rbx)
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
movss %xmm0, 0x205bc9(%rip)   # 0x60b5c4
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405a12
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e712(%rip), %rsi    # 0x594133
leaq 0x18e71e(%rip), %rdx    # 0x594146
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x4dfca0
cmpq %r14, (%r15)
je 0x406166
movl (%rbx), %eax
testl %eax, %eax
je 0x405a77
cmpl $0x22, %eax
jne 0x405a79
leaq 0x18ff54(%rip), %rdi    # 0x5959c6
callq 0x402c01
movl %ebp, (%rbx)
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x205b43(%rip)   # 0x60b5c8
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405a9c
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e69c(%rip), %rsi    # 0x594147
leaq 0x18e69d(%rip), %rdx    # 0x59414f
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x406172
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x40617e
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x40617e
testl %ecx, %ecx
jne 0x405b10
movl %ebp, (%rbx)
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
movss %xmm0, 0x205aad(%rip)   # 0x60b5cc
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405b36
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e60b(%rip), %rsi    # 0x594150
leaq 0x18e615(%rip), %rdx    # 0x594161
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x40618a
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x406196
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x406196
testl %ecx, %ecx
jne 0x405baa
movl %ebp, (%rbx)
movb %al, 0x2035a4(%rip)     # 0x609154
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405bc7
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e58c(%rip), %rsi    # 0x594162
leaq 0x18e591(%rip), %rdx    # 0x59416e
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4061a2
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4061ae
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4061ae
testl %ecx, %ecx
jne 0x405c3b
movl %ebp, (%rbx)
movb %al, 0x203514(%rip)     # 0x609155
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405c58
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e508(%rip), %rsi    # 0x59416f
leaq 0x18e511(%rip), %rdx    # 0x59417f
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4061ba
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4061c6
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4061c6
testl %ecx, %ecx
jne 0x405ccc
movl %ebp, (%rbx)
movb %al, 0x203484(%rip)     # 0x609156
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405ce9
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e488(%rip), %rsi    # 0x594180
leaq 0x18e48c(%rip), %rdx    # 0x59418b
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4061d2
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4061de
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4061de
testl %ecx, %ecx
jne 0x405d5d
movl %ebp, (%rbx)
movw %ax, 0x205854(%rip)     # 0x60b5b8
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405d7b
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e402(%rip), %rsi    # 0x59418c
leaq 0x18e405(%rip), %rdx    # 0x594196
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x4061ea
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x4061f6
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x4061f6
testl %ecx, %ecx
jne 0x405def
movl %ebp, (%rbx)
movb %al, 0x20335c(%rip)     # 0x609151
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405e0c
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
leaq 0x60(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x18e37c(%rip), %rsi    # 0x594197
leaq 0x18e380(%rip), %rdx    # 0x5941a2
callq 0x40e328
leaq 0x10(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x40e10a
movq (%rax), %r14
movl (%rbx), %ebp
movl $0x0, (%rbx)
leaq 0x8(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4df220
cmpq %r14, (%r15)
je 0x406202
leaq -0x80000000(%rax), %rcx
cmpq %r13, %rcx
jb 0x40620e
movl (%rbx), %ecx
cmpl $0x22, %ecx
je 0x40620e
testl %ecx, %ecx
jne 0x405e80
movl %ebp, (%rbx)
movb %al, 0x20575e(%rip)     # 0x60b5e4
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x405ea3
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
movb 0x205741(%rip), %al     # 0x60b5e4
movzwl 0x205701(%rip), %r10d   # 0x60b5ac
movzwl 0x2056fb(%rip), %r9d    # 0x60b5ae
movl %r9d, %r11d
imull %r10d, %r11d
movzwl 0x2056ee(%rip), %r8d    # 0x60b5b0
movl %r8d, %edi
shrl %edi
movb 0x203284(%rip), %cl     # 0x609151
leal (%rax,%rcx), %ebx
movb 0x20327d(%rip), %sil    # 0x609154
movb 0x203278(%rip), %dl     # 0x609155
leal (%rsi,%rdx), %ebp
addb $0x4, %bpl
movl %r11d, 0x2056bd(%rip)   # 0x60b5a8
movw %di, 0x2056be(%rip)     # 0x60b5b0
movb %bl, 0x20325b(%rip)     # 0x609153
movb %bpl, 0x203251(%rip)    # 0x609150
testl %r10d, %r10d
je 0x40621a
testw %r9w, %r9w
je 0x406239
cmpw $0x1, %r8w
jbe 0x406258
movl 0x205690(%rip), %r8d    # 0x60b5b4
cmpl %edi, %r8d
jb 0x406277
movzwl 0x205686(%rip), %edi    # 0x60b5ba
testl %edi, %edi
je 0x406296
movzwl 0x205678(%rip), %r9d    # 0x60b5bc
testl %r9d, %r9d
je 0x4062b5
imull %edi, %r9d
cmpl %r9d, %r8d
jne 0x4062d4
movss 0x20565e(%rip), %xmm1   # 0x60b5c0
xorps %xmm0, %xmm0
ucomiss %xmm0, %xmm1
jbe 0x4062f3
movss 0x20564e(%rip), %xmm1   # 0x60b5c4
ucomiss %xmm0, %xmm1
jbe 0x406312
movss 0x205641(%rip), %xmm1   # 0x60b5c8
ucomiss %xmm0, %xmm1
jbe 0x406331
movss 0x205634(%rip), %xmm1   # 0x60b5cc
ucomiss %xmm0, %xmm1
jbe 0x406350
testb %sil, %sil
je 0x40636f
testb %dl, %dl
je 0x40638e
cmpb $0x1, 0x20319d(%rip)    # 0x609156
jbe 0x4063ad
cmpw $0x0, 0x2055f1(%rip)    # 0x60b5b8
je 0x4063cc
cmpb $0x1, %cl
jbe 0x4063eb
testb %al, %al
je 0x40640a
leaq 0x220(%rsp), %rdi
callq 0x4620b0
leaq 0x10(%rsp), %rdi
callq 0x40e192
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x406011
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4177e0
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x406036
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x4177e0
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x40605b
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x4177e0
addq $0x428, %rsp            # imm = 0x428
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq $0x60c900, %rdi         # imm = 0x60C900
leaq 0x18dfa5(%rip), %rsi    # 0x594020
movl $0x1b, %edx
callq 0x484db0
movq (%rbx), %rsi
movq $0x60c900, %rdi         # imm = 0x60C900
callq 0x4852e0
movq %rax, %rdi
callq 0x484bc0
movl $0x1, %edi
callq 0x4def10
leaq 0x18f914(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f908(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f8fc(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f8f0(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f8e4(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f8d8(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f8cc(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f8c0(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f8b4(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f8a8(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f89c(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f890(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f884(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f878(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f86c(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f860(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f859(%rip), %rdi    # 0x5959c6
callq 0x402b51
leaq 0x18f848(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f83c(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f830(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f824(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f818(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f80c(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f800(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f7f4(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f7e8(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f7dc(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f7d0(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f7c4(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18f7b8(%rip), %rdi    # 0x5959c1
callq 0x402b51
leaq 0x18f7ac(%rip), %rdi    # 0x5959c1
callq 0x402c01
leaq 0x18df82(%rip), %rdi    # 0x5941a3
leaq 0x18de51(%rip), %rsi    # 0x594079
leaq 0x18dfb5(%rip), %rcx    # 0x5941e4
movl $0x6a, %edx
callq 0x4d8100
leaq 0x18dfcc(%rip), %rdi    # 0x59420c
leaq 0x18de32(%rip), %rsi    # 0x594079
leaq 0x18df96(%rip), %rcx    # 0x5941e4
movl $0x6b, %edx
callq 0x4d8100
leaq 0x18dff1(%rip), %rdi    # 0x594250
leaq 0x18de13(%rip), %rsi    # 0x594079
leaq 0x18df77(%rip), %rcx    # 0x5941e4
movl $0x6c, %edx
callq 0x4d8100
leaq 0x18e00c(%rip), %rdi    # 0x59428a
leaq 0x18ddf4(%rip), %rsi    # 0x594079
leaq 0x18df58(%rip), %rcx    # 0x5941e4
movl $0x6d, %edx
callq 0x4d8100
leaq 0x18e03d(%rip), %rdi    # 0x5942da
leaq 0x18ddd5(%rip), %rsi    # 0x594079
leaq 0x18df39(%rip), %rcx    # 0x5941e4
movl $0x6f, %edx
callq 0x4d8100
leaq 0x18e06b(%rip), %rdi    # 0x594327
leaq 0x18ddb6(%rip), %rsi    # 0x594079
leaq 0x18df1a(%rip), %rcx    # 0x5941e4
movl $0x71, %edx
callq 0x4d8100
leaq 0x18e0ad(%rip), %rdi    # 0x594388
leaq 0x18dd97(%rip), %rsi    # 0x594079
leaq 0x18defb(%rip), %rcx    # 0x5941e4
movl $0x73, %edx
callq 0x4d8100
leaq 0x18e102(%rip), %rdi    # 0x5943fc
leaq 0x18dd78(%rip), %rsi    # 0x594079
leaq 0x18dedc(%rip), %rcx    # 0x5941e4
movl $0x75, %edx
callq 0x4d8100
leaq 0x18e13d(%rip), %rdi    # 0x594456
leaq 0x18dd59(%rip), %rsi    # 0x594079
leaq 0x18debd(%rip), %rcx    # 0x5941e4
movl $0x77, %edx
callq 0x4d8100
leaq 0x18e178(%rip), %rdi    # 0x5944b0
leaq 0x18dd3a(%rip), %rsi    # 0x594079
leaq 0x18de9e(%rip), %rcx    # 0x5941e4
movl $0x79, %edx
callq 0x4d8100
leaq 0x18e1c5(%rip), %rdi    # 0x59451c
leaq 0x18dd1b(%rip), %rsi    # 0x594079
leaq 0x18de7f(%rip), %rcx    # 0x5941e4
movl $0x7b, %edx
callq 0x4d8100
leaq 0x18e201(%rip), %rdi    # 0x594577
leaq 0x18dcfc(%rip), %rsi    # 0x594079
leaq 0x18de60(%rip), %rcx    # 0x5941e4
movl $0x7d, %edx
callq 0x4d8100
leaq 0x18e247(%rip), %rdi    # 0x5945dc
leaq 0x18dcdd(%rip), %rsi    # 0x594079
leaq 0x18de41(%rip), %rcx    # 0x5941e4
movl $0x7f, %edx
callq 0x4d8100
leaq 0x18e283(%rip), %rdi    # 0x594637
leaq 0x18dcbe(%rip), %rsi    # 0x594079
leaq 0x18de22(%rip), %rcx    # 0x5941e4
movl $0x80, %edx
callq 0x4d8100
leaq 0x18e2cf(%rip), %rdi    # 0x5946a2
leaq 0x18dc9f(%rip), %rsi    # 0x594079
leaq 0x18de03(%rip), %rcx    # 0x5941e4
movl $0x81, %edx
callq 0x4d8100
leaq 0x18e308(%rip), %rdi    # 0x5946fa
leaq 0x18dc80(%rip), %rsi    # 0x594079
leaq 0x18dde4(%rip), %rcx    # 0x5941e4
movl $0x82, %edx
callq 0x4d8100
leaq 0x18e33c(%rip), %rdi    # 0x59474d
leaq 0x18dc61(%rip), %rsi    # 0x594079
leaq 0x18ddc5(%rip), %rcx    # 0x5941e4
movl $0x83, %edx
callq 0x4d8100
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
jmp 0x40646e
jmp 0x4064bf
movq %rax, %r14
jmp 0x4064a4
jmp 0x4064bf
movq %rax, %r14
jmp 0x4064f2
jmp 0x40649a
jmp 0x4064bf
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
jmp 0x40649a
movq %rax, %r14
cmpl $0x0, (%rbx)
jne 0x4064a4
movl %ebp, (%rbx)
movq 0x60(%rsp), %rdi
cmpq %r12, %rdi
je 0x4064e5
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x4177e0
jmp 0x4064e5
jmp 0x4064bf
movq %rax, %r14
jmp 0x4064e5
movq %rax, %r14
movq $0x606328, %rsi         # imm = 0x606328
leaq 0x60(%rsp), %rdi
callq 0x48d260
leaq 0xd8(%rsp), %rdi
callq 0x467320
leaq 0x220(%rsp), %rdi
callq 0x4620b0
leaq 0x10(%rsp), %rdi
callq 0x40e192
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x406518
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4177e0
movq 0x1e0(%rsp), %rdi
leaq 0x1f0(%rsp), %rax
cmpq %rax, %rdi
je 0x40653d
movq 0x1f0(%rsp), %rsi
incq %rsi
callq 0x4177e0
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x406562
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x4177e0
movq %r14, %rdi
callq 0x4c34a0