// File: estwings57[P]CasHMC/sources/DRAM.cpp
// Function: CasHMC::DRAM::receiveCMD(CasHMC::DRAMCommand*)
void DRAM::receiveCMD(DRAMCommand *recvCMD)
{
	switch(recvCMD->commandType) {
		case ACTIVATE:
			bankStates[recvCMD->bank]->currentBankState = ROW_ACTIVE;
			bankStates[recvCMD->bank]->lastCommand = ACTIVATE;
			bankStates[recvCMD->bank]->openRowAddress = recvCMD->row;
			bankStates[recvCMD->bank]->nextActivate = max(currentClockCycle + tRC, bankStates[recvCMD->bank]->nextActivate);
			bankStates[recvCMD->bank]->nextPrecharge = max(currentClockCycle + tRAS, bankStates[recvCMD->bank]->nextPrecharge);
			bankStates[recvCMD->bank]->nextRead = max(currentClockCycle + (tRCD-AL), bankStates[recvCMD->bank]->nextRead);
			bankStates[recvCMD->bank]->nextWrite = max(currentClockCycle + (tRCD-AL), bankStates[recvCMD->bank]->nextWrite);
			for(int b=0; b<NUM_BANKS; b++) {
				if(recvCMD->bank != b) {
					bankStates[b]->nextActivate = max(currentClockCycle + tRRD, bankStates[b]->nextActivate);
				}
			}
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      next READ or WRITE time : "<<bankStates[recvCMD->bank]->nextRead<<" [HMC clk]");
			delete recvCMD;
			break;
		case READ:
			bankStates[recvCMD->bank]->nextPrecharge = max(currentClockCycle + READ_TO_PRE_DELAY, bankStates[recvCMD->bank]->nextPrecharge);
			bankStates[recvCMD->bank]->lastCommand = READ;
			for(int b=0; b<NUM_BANKS; b++) {
				bankStates[b]->nextRead = max(currentClockCycle + max(tCCD, BL), bankStates[b]->nextRead);
				bankStates[b]->nextWrite = max(currentClockCycle + READ_TO_WRITE_DELAY, bankStates[b]->nextWrite);
			}
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      READ DATA return time : "<<currentClockCycle+RL+BL<<" [HMC clk]"
													<<" / next PRECHARGE time : "<<bankStates[recvCMD->bank]->nextPrecharge<<" [HMC clk]");
			recvCMD->commandType = READ_DATA;
			readReturnDATA.push_back(recvCMD);
			readReturnCountdown.push_back(RL);
			break;
		case READ_P:
			bankStates[recvCMD->bank]->nextActivate = max(currentClockCycle + READ_AUTOPRE_DELAY, bankStates[recvCMD->bank]->nextActivate);
			bankStates[recvCMD->bank]->lastCommand = READ_P;
			bankStates[recvCMD->bank]->stateChangeCountdown = READ_TO_PRE_DELAY;
			for(int b=0; b<NUM_BANKS; b++) {
				bankStates[b]->nextRead = max(currentClockCycle + max(tCCD, BL), bankStates[b]->nextRead);
				bankStates[b]->nextWrite = max(currentClockCycle + READ_TO_WRITE_DELAY, bankStates[b]->nextWrite);
			}
			if(recvCMD->commandType == READ_P) {
				bankStates[recvCMD->bank]->nextRead = bankStates[recvCMD->bank]->nextActivate;
				bankStates[recvCMD->bank]->nextWrite = bankStates[recvCMD->bank]->nextActivate;
			}	
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      READ DATA return time : "<<currentClockCycle+RL+BL<<" [HMC clk]"
													<<" / next ACTIVATE time : "<<bankStates[recvCMD->bank]->nextActivate<<" [HMC clk]");
			recvCMD->commandType = READ_DATA;
			readReturnDATA.push_back(recvCMD);
			readReturnCountdown.push_back(RL);
			break;
		case WRITE:
			bankStates[recvCMD->bank]->nextPrecharge = max(currentClockCycle + WRITE_TO_PRE_DELAY, bankStates[recvCMD->bank]->nextPrecharge);
			bankStates[recvCMD->bank]->lastCommand = WRITE;
			for(int b=0; b<NUM_BANKS; b++) {
				bankStates[b]->nextWrite = max(currentClockCycle + max(BL, tCCD), bankStates[b]->nextWrite);
				bankStates[b]->nextRead = max(currentClockCycle + WRITE_TO_READ_DELAY_B, bankStates[b]->nextRead);
			}
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      WRTIE DATA time : "<<currentClockCycle+WL+BL<<" [HMC clk]"
													<<" / next PRECHARGE time : "<<bankStates[recvCMD->bank]->nextPrecharge<<" [HMC clk]");
			delete recvCMD;
			break;
		case WRITE_P:
			bankStates[recvCMD->bank]->nextActivate = max(currentClockCycle + WRITE_AUTOPRE_DELAY, bankStates[recvCMD->bank]->nextActivate);
			bankStates[recvCMD->bank]->lastCommand = WRITE_P;
			bankStates[recvCMD->bank]->stateChangeCountdown = WRITE_TO_PRE_DELAY;
			for(int b=0; b<NUM_BANKS; b++) {
				bankStates[b]->nextWrite = max(currentClockCycle + max(BL, tCCD), bankStates[b]->nextWrite);
				bankStates[b]->nextRead = max(currentClockCycle + WRITE_TO_READ_DELAY_B, bankStates[b]->nextRead);
			}
			bankStates[recvCMD->bank]->nextRead = bankStates[recvCMD->bank]->nextActivate;
			bankStates[recvCMD->bank]->nextWrite = bankStates[recvCMD->bank]->nextActivate;
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      WRTIE DATA time : "<<currentClockCycle+WL+BL<<" [HMC clk]"
													<<" / next ACTIVATE time : "<<bankStates[recvCMD->bank]->nextActivate<<" [HMC clk]");
			delete recvCMD; 
			break;
		case WRITE_DATA:
			delete recvCMD;
			break;
		case PRECHARGE:
			bankStates[recvCMD->bank]->currentBankState = PRECHARGING;
			bankStates[recvCMD->bank]->lastCommand = PRECHARGE;
			bankStates[recvCMD->bank]->openRowAddress = 0;
			bankStates[recvCMD->bank]->stateChangeCountdown = tRP;
			bankStates[recvCMD->bank]->nextActivate = max(currentClockCycle + tRP, bankStates[recvCMD->bank]->nextActivate);
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      next ACTIVATE time : "<<bankStates[recvCMD->bank]->nextActivate<<" [HMC clk]");
			delete recvCMD;
			break;	
		case REFRESH:
			for(int b=0; b<NUM_BANKS; b++) {
				bankStates[b]->nextActivate = currentClockCycle + tRFC;
				bankStates[b]->currentBankState = REFRESHING;
				bankStates[b]->lastCommand = REFRESH;
				bankStates[b]->stateChangeCountdown = tRFC;
			}
			DEBUG(ALI(18)<<header<<ALI(15)<<*recvCMD<<"      next ACTIVATE time : "<<bankStates[recvCMD->bank]->nextActivate<<" [HMC clk]");
			delete recvCMD;
			break;
		default:
			ERROR(header<<"  (DR) == Error - Wrong command type    popped command : "<<*recvCMD<<"  (CurrentClock : "<<currentClockCycle<<")");
			exit(0);
			break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3a0, %rsp            # imm = 0x3A0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq %rax, -0x178(%rbp)
subq $0x8, %rax
ja 0x2ed36
movq -0x178(%rbp), %rax
leaq 0x25e0c(%rip), %rcx     # 0x52f70
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x180(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x1, 0x4(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x0, 0x38(%rax)
movq -0x10(%rbp), %rax
movl 0x20(%rax), %eax
movl %eax, -0x1a4(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movl -0x1a4(%rbp), %ecx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl %ecx, 0x8(%rax)
movq 0x8(%rdi), %rax
leaq 0x39460(%rip), %rcx     # 0x66660
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x10, %rsi
leaq -0x18(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x1a0(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x1a0(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x10(%rax)
movq 0x8(%rdi), %rax
leaq 0x393e0(%rip), %rcx     # 0x66654
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x28, %rsi
leaq -0x20(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x198(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x198(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x28(%rax)
movq 0x8(%rdi), %rax
leaq 0x39370(%rip), %rcx     # 0x66658
movl (%rcx), %ecx
leaq 0x3935f(%rip), %rdx     # 0x66650
subl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x18, %rsi
leaq -0x28(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x190(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x190(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x18(%rax)
movq 0x8(%rdi), %rax
leaq 0x392f1(%rip), %rcx     # 0x66658
movl (%rcx), %ecx
leaq 0x392e0(%rip), %rdx     # 0x66650
subl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x20, %rsi
leaq -0x30(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x188(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x188(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
leaq 0x3923b(%rip), %rcx     # 0x66620
cmpl (%rcx), %eax
jge 0x2d473
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
cmpl -0x34(%rbp), %eax
je 0x2d463
movq -0x180(%rbp), %rdi
movq 0x8(%rdi), %rax
leaq 0x39251(%rip), %rcx     # 0x6665c
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x34(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x10, %rsi
leaq -0x40(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x1b0(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x34(%rbp), %rsi
callq 0x22c30
movq -0x1b0(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x10(%rax)
jmp 0x2d465
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x2d3db
leaq 0x390ae(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2d59c
leaq 0x3909f(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2d59c
movl $0x12, %edi
callq 0x177b0
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %esi
movq 0x38b26(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x1d0(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x1d0(%rbp), %rdi
movb %al, -0x45(%rbp)
movzbl -0x45(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x1c8(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x1c8(%rbp), %rdi
movl %eax, -0x4c(%rbp)
movl -0x4c(%rbp), %esi
callq 0x4440
movq %rax, -0x1c0(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x1c0(%rbp), %rdi
movb %al, -0x4d(%rbp)
movzbl -0x4d(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x25a6d(%rip), %rsi     # 0x52fb0
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x1b8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x1b8(%rbp), %rdi
movq (%rax), %rax
movq 0x18(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x25a49(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x38a19(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x10(%rbp), %rax
movq %rax, -0x1d8(%rbp)
cmpq $0x0, %rax
je 0x2d5ba
movq -0x1d8(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edf8
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x1e8(%rbp)
leaq 0x39078(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x3904b(%rip), %rcx     # 0x6662c
movl (%rcx), %ecx
shrl $0x5, %ecx
shrl %ecx
addl %ecx, %eax
movl %eax, -0x1ec(%rbp)
leaq 0x39075(%rip), %rdi     # 0x6666c
leaq 0x3906a(%rip), %rsi     # 0x66668
callq 0x17ed0
movl -0x1ec(%rbp), %ecx
movq -0x180(%rbp), %rdi
movq %rax, %rdx
movq -0x1e8(%rbp), %rax
addl (%rdx), %ecx
leaq 0x39045(%rip), %rdx     # 0x66668
subl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x28, %rsi
leaq -0x58(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x1e0(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x1e0(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x28(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rax
movl $0x1, 0x38(%rax)
movl $0x0, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
leaq 0x38f62(%rip), %rcx     # 0x66620
cmpl (%rcx), %eax
jge 0x2d803
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x208(%rbp)
leaq 0x38f4d(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, -0x6c(%rbp)
leaq 0x38f7a(%rip), %rdi     # 0x66668
leaq -0x6c(%rbp), %rsi
callq 0x17ed0
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movq -0x208(%rbp), %rax
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x5c(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x18, %rsi
leaq -0x68(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x200(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x5c(%rbp), %rsi
callq 0x22c30
movq -0x200(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x18(%rax)
movq 0x8(%rdi), %rax
leaq 0x38ede(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x38ed1(%rip), %rdx     # 0x6664c
addl (%rdx), %ecx
leaq 0x38ee4(%rip), %rdx     # 0x66668
addl (%rdx), %ecx
addl $0x2, %ecx
leaq 0x38ec0(%rip), %rdx     # 0x66650
movl (%rdx), %edx
leaq 0x38eaf(%rip), %rsi     # 0x66648
addl (%rsi), %edx
subl %edx, %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x78(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x5c(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x20, %rsi
leaq -0x78(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x1f8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x5c(%rbp), %rsi
callq 0x22c30
movq -0x1f8(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movl -0x5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x2d6b4
leaq 0x38d1e(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2d991
leaq 0x38d0f(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2d991
movl $0x12, %edi
callq 0x177b0
movl %eax, -0x7c(%rbp)
movl -0x7c(%rbp), %esi
movq 0x38796(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x228(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x228(%rbp), %rdi
movb %al, -0x7d(%rbp)
movzbl -0x7d(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x220(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x220(%rbp), %rdi
movl %eax, -0x84(%rbp)
movl -0x84(%rbp), %esi
callq 0x4440
movq %rax, -0x218(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x218(%rbp), %rdi
movb %al, -0x85(%rbp)
movzbl -0x85(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x256fd(%rip), %rsi     # 0x52fdc
callq 0x4380
movq %rax, %rdi
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x38d57(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x38d4a(%rip), %rcx     # 0x6664c
addl (%rcx), %eax
movl %eax, %eax
addq %rax, %rsi
leaq 0x38d1c(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x256a8(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
leaq 0x256c3(%rip), %rsi     # 0x52ffb
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x210(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x210(%rbp), %rdi
movq (%rax), %rax
movq 0x28(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x25654(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x38624(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x180(%rbp), %rdi
movq -0x10(%rbp), %rax
movl $0x5, 0x10(%rax)
addq $0x218, %rdi            # imm = 0x218
leaq -0x10(%rbp), %rsi
callq 0x229c0
movq -0x180(%rbp), %rdi
addq $0x230, %rdi            # imm = 0x230
leaq 0x38c88(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x38c7b(%rip), %rcx     # 0x6664c
addl (%rcx), %eax
movl %eax, -0x8c(%rbp)
leaq -0x8c(%rbp), %rsi
callq 0x18ef0
jmp 0x2edf8
movq -0x180(%rbp), %rdi
movq 0x8(%rdi), %rax
leaq 0x38c54(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x38c67(%rip), %rdx     # 0x6666c
addl (%rdx), %ecx
leaq 0x38c56(%rip), %rdx     # 0x66664
addl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x98(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x10, %rsi
leaq -0x98(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x238(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x238(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x10(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rax
movl $0x2, 0x38(%rax)
leaq 0x38bab(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x38b7e(%rip), %rcx     # 0x6662c
movl (%rcx), %ecx
shrl $0x5, %ecx
shrl %ecx
addl %ecx, %eax
movl %eax, -0x230(%rbp)
leaq 0x38ba8(%rip), %rdi     # 0x6666c
leaq 0x38b9d(%rip), %rsi     # 0x66668
callq 0x17ed0
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movl -0x230(%rbp), %eax
addl (%rcx), %eax
leaq 0x38b7f(%rip), %rcx     # 0x66668
subl (%rcx), %eax
movl %eax, -0x22c(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movl -0x22c(%rbp), %ecx
movq (%rax), %rax
movl %ecx, 0x3c(%rax)
movl $0x0, -0x9c(%rbp)
movl -0x9c(%rbp), %eax
leaq 0x38af7(%rip), %rcx     # 0x66620
cmpl (%rcx), %eax
jge 0x2dc92
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x250(%rbp)
leaq 0x38ae2(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, -0xac(%rbp)
leaq 0x38b0c(%rip), %rdi     # 0x66668
leaq -0xac(%rbp), %rsi
callq 0x17ed0
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movq -0x250(%rbp), %rax
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0xa8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x9c(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x18, %rsi
leaq -0xa8(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x248(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x9c(%rbp), %rsi
callq 0x22c30
movq -0x248(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x18(%rax)
movq 0x8(%rdi), %rax
leaq 0x38a61(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x38a54(%rip), %rdx     # 0x6664c
addl (%rdx), %ecx
leaq 0x38a67(%rip), %rdx     # 0x66668
addl (%rdx), %ecx
addl $0x2, %ecx
leaq 0x38a43(%rip), %rdx     # 0x66650
movl (%rdx), %edx
leaq 0x38a32(%rip), %rsi     # 0x66648
addl (%rsi), %edx
subl %edx, %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0xb8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x9c(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x20, %rsi
leaq -0xb8(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x240(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x9c(%rbp), %rsi
callq 0x22c30
movq -0x240(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movl -0x9c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9c(%rbp)
jmp 0x2db1c
movq -0x10(%rbp), %rax
cmpl $0x2, 0x10(%rax)
jne 0x2dd48
movq -0x180(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x260(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x260(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x18(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x258(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x258(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x20(%rax)
leaq 0x387d9(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2dee2
leaq 0x387ca(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2dee2
movl $0x12, %edi
callq 0x177b0
movl %eax, -0xbc(%rbp)
movl -0xbc(%rbp), %esi
movq 0x3824b(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x280(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x280(%rbp), %rdi
movb %al, -0xbd(%rbp)
movzbl -0xbd(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x278(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x278(%rbp), %rdi
movl %eax, -0xc4(%rbp)
movl -0xc4(%rbp), %esi
callq 0x4440
movq %rax, -0x270(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x270(%rbp), %rdi
movb %al, -0xc5(%rbp)
movzbl -0xc5(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x251ac(%rip), %rsi     # 0x52fdc
callq 0x4380
movq %rax, %rdi
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x38806(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x387f9(%rip), %rcx     # 0x6664c
addl (%rcx), %eax
movl %eax, %eax
addq %rax, %rsi
leaq 0x387cb(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x25157(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
leaq 0x2518c(%rip), %rsi     # 0x53015
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x268(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x268(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x25103(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x380d3(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x180(%rbp), %rdi
movq -0x10(%rbp), %rax
movl $0x5, 0x10(%rax)
addq $0x218, %rdi            # imm = 0x218
leaq -0x10(%rbp), %rsi
callq 0x229c0
movq -0x180(%rbp), %rdi
addq $0x230, %rdi            # imm = 0x230
leaq 0x38737(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x3872a(%rip), %rcx     # 0x6664c
addl (%rcx), %eax
movl %eax, -0xcc(%rbp)
leaq -0xcc(%rbp), %rsi
callq 0x18ef0
jmp 0x2edf8
movq -0x180(%rbp), %rdi
movq 0x8(%rdi), %rax
leaq 0x38703(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x386f2(%rip), %rdx     # 0x66648
addl (%rdx), %ecx
leaq 0x386cd(%rip), %rdx     # 0x6662c
movl (%rdx), %edx
shrl $0x5, %edx
shrl %edx
addl %edx, %ecx
leaq 0x38705(%rip), %rdx     # 0x66674
addl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0xd8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x28, %rsi
leaq -0xd8(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x288(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x288(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x28(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rax
movl $0x3, 0x38(%rax)
movl $0x0, -0xdc(%rbp)
movl -0xdc(%rbp), %eax
leaq 0x3860a(%rip), %rcx     # 0x66620
cmpl (%rcx), %eax
jge 0x2e178
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x2a0(%rbp)
leaq 0x385f5(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, -0xec(%rbp)
leaq -0xec(%rbp), %rdi
leaq 0x38618(%rip), %rsi     # 0x66668
callq 0x17ed0
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movq -0x2a0(%rbp), %rax
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0xe8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0xdc(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x20, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x298(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0xdc(%rbp), %rsi
callq 0x22c30
movq -0x298(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movq 0x8(%rdi), %rax
leaq 0x38574(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x38563(%rip), %rdx     # 0x66648
addl (%rdx), %ecx
leaq 0x3853e(%rip), %rdx     # 0x6662c
movl (%rdx), %edx
shrl $0x5, %edx
shrl %edx
addl %edx, %ecx
leaq 0x38572(%rip), %rdx     # 0x66670
addl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0xf8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0xdc(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x18, %rsi
leaq -0xf8(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x290(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0xdc(%rbp), %rsi
callq 0x22c30
movq -0x290(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x18(%rax)
movl -0xdc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xdc(%rbp)
jmp 0x2e009
leaq 0x383a9(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2e312
leaq 0x3839a(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2e312
movl $0x12, %edi
callq 0x177b0
movl %eax, -0xfc(%rbp)
movl -0xfc(%rbp), %esi
movq 0x37e1b(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x2c0(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x2c0(%rbp), %rdi
movb %al, -0xfd(%rbp)
movzbl -0xfd(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x2b8(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x2b8(%rbp), %rdi
movl %eax, -0x104(%rbp)
movl -0x104(%rbp), %esi
callq 0x4440
movq %rax, -0x2b0(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x2b0(%rbp), %rdi
movb %al, -0x105(%rbp)
movzbl -0x105(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x24dce(%rip), %rsi     # 0x5302e
callq 0x4380
movq %rax, %rdi
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x383d6(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x383c5(%rip), %rcx     # 0x66648
addl (%rcx), %eax
movl %eax, %eax
addq %rax, %rsi
leaq 0x3839b(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x24d27(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
leaq 0x24d42(%rip), %rsi     # 0x52ffb
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x2a8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x2a8(%rbp), %rdi
movq (%rax), %rax
movq 0x28(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x24cd3(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x37ca3(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x10(%rbp), %rax
movq %rax, -0x2c8(%rbp)
cmpq $0x0, %rax
je 0x2e330
movq -0x2c8(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edf8
movq -0x180(%rbp), %rdi
movq 0x8(%rdi), %rax
leaq 0x38309(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x382f8(%rip), %rdx     # 0x66648
addl (%rdx), %ecx
leaq 0x382d3(%rip), %rdx     # 0x6662c
movl (%rdx), %edx
shrl $0x5, %edx
shrl %edx
addl %edx, %ecx
leaq 0x3830b(%rip), %rdx     # 0x66674
addl (%rdx), %ecx
leaq 0x382f2(%rip), %rdx     # 0x66664
addl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x110(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x10, %rsi
leaq -0x110(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x2d8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x2d8(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x10(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x4, 0x38(%rax)
leaq 0x38240(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x3822f(%rip), %rcx     # 0x66648
addl (%rcx), %eax
leaq 0x3820a(%rip), %rcx     # 0x6662c
movl (%rcx), %ecx
shrl $0x5, %ecx
shrl %ecx
addl %ecx, %eax
leaq 0x38242(%rip), %rcx     # 0x66674
addl (%rcx), %eax
movl %eax, -0x2cc(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movl -0x2cc(%rbp), %ecx
movq (%rax), %rax
movl %ecx, 0x3c(%rax)
movl $0x0, -0x114(%rbp)
movl -0x114(%rbp), %eax
leaq 0x381ae(%rip), %rcx     # 0x66620
cmpl (%rcx), %eax
jge 0x2e5d4
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x2f0(%rbp)
leaq 0x38199(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, -0x124(%rbp)
leaq -0x124(%rbp), %rdi
leaq 0x381bc(%rip), %rsi     # 0x66668
callq 0x17ed0
movq -0x180(%rbp), %rdi
movq %rax, %rcx
movq -0x2f0(%rbp), %rax
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x120(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x114(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x20, %rsi
leaq -0x120(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x2e8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x114(%rbp), %rsi
callq 0x22c30
movq -0x2e8(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x20(%rax)
movq 0x8(%rdi), %rax
leaq 0x38118(%rip), %rcx     # 0x66650
movl (%rcx), %ecx
leaq 0x38107(%rip), %rdx     # 0x66648
addl (%rdx), %ecx
leaq 0x380e2(%rip), %rdx     # 0x6662c
movl (%rdx), %edx
shrl $0x5, %edx
shrl %edx
addl %edx, %ecx
leaq 0x38116(%rip), %rdx     # 0x66670
addl (%rdx), %ecx
movl %ecx, %ecx
addq %rcx, %rax
movq %rax, -0x130(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x114(%rbp), %rsi
callq 0x22c30
movq (%rax), %rsi
addq $0x18, %rsi
leaq -0x130(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x2e0(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x114(%rbp), %rsi
callq 0x22c30
movq -0x2e0(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x18(%rax)
movl -0x114(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x114(%rbp)
jmp 0x2e465
movq -0x180(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x300(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x300(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x18(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rax
movq %rax, -0x2f8(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x2f8(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x20(%rax)
leaq 0x37ea5(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2e816
leaq 0x37e96(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2e816
movl $0x12, %edi
callq 0x177b0
movl %eax, -0x134(%rbp)
movl -0x134(%rbp), %esi
movq 0x37917(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x320(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x320(%rbp), %rdi
movb %al, -0x135(%rbp)
movzbl -0x135(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x318(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x318(%rbp), %rdi
movl %eax, -0x13c(%rbp)
movl -0x13c(%rbp), %esi
callq 0x4440
movq %rax, -0x310(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x310(%rbp), %rdi
movb %al, -0x13d(%rbp)
movzbl -0x13d(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x248ca(%rip), %rsi     # 0x5302e
callq 0x4380
movq %rax, %rdi
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x37ed2(%rip), %rax     # 0x66650
movl (%rax), %eax
leaq 0x37ec1(%rip), %rcx     # 0x66648
addl (%rcx), %eax
movl %eax, %eax
addq %rax, %rsi
leaq 0x37e97(%rip), %rax     # 0x6662c
movl (%rax), %eax
shrl $0x5, %eax
movl %eax, %eax
addq %rax, %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x24823(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
leaq 0x24858(%rip), %rsi     # 0x53015
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x308(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x308(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x247cf(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x3779f(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x10(%rbp), %rax
movq %rax, -0x328(%rbp)
cmpq $0x0, %rax
je 0x2e834
movq -0x328(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edf8
movq -0x10(%rbp), %rax
movq %rax, -0x330(%rbp)
cmpq $0x0, %rax
je 0x2e857
movq -0x330(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edf8
movq -0x180(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x2, 0x4(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x7, 0x38(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x0, 0x8(%rax)
leaq 0x37d88(%rip), %rax     # 0x66664
movl (%rax), %eax
movl %eax, -0x33c(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movl -0x33c(%rbp), %ecx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl %ecx, 0x3c(%rax)
movq 0x8(%rdi), %rax
leaq 0x37d4d(%rip), %rcx     # 0x66664
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x148(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq (%rax), %rsi
addq $0x10, %rsi
leaq -0x148(%rbp), %rdi
callq 0x19470
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rax, -0x338(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x338(%rbp), %rcx
movq (%rax), %rax
movq %rcx, 0x10(%rax)
leaq 0x37ba2(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2eac0
leaq 0x37b93(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2eac0
movl $0x12, %edi
callq 0x177b0
movl %eax, -0x14c(%rbp)
movl -0x14c(%rbp), %esi
movq 0x37614(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x360(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x360(%rbp), %rdi
movb %al, -0x14d(%rbp)
movzbl -0x14d(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x358(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x358(%rbp), %rdi
movl %eax, -0x154(%rbp)
movl -0x154(%rbp), %esi
callq 0x4440
movq %rax, -0x350(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x350(%rbp), %rdi
movb %al, -0x155(%rbp)
movzbl -0x155(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x245e0(%rip), %rsi     # 0x53047
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x348(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x348(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x24525(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x374f5(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x10(%rbp), %rax
movq %rax, -0x368(%rbp)
cmpq $0x0, %rax
je 0x2eade
movq -0x368(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edf8
movl $0x0, -0x15c(%rbp)
movl -0x15c(%rbp), %eax
leaq 0x37b26(%rip), %rcx     # 0x66620
cmpl (%rcx), %eax
jge 0x2ebd2
movq -0x180(%rbp), %rdi
movq 0x8(%rdi), %rax
leaq 0x37b68(%rip), %rcx     # 0x6667c
movl (%rcx), %ecx
addq %rcx, %rax
movq %rax, -0x378(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x15c(%rbp), %rsi
callq 0x22c30
movq -0x378(%rbp), %rcx
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movq %rcx, 0x10(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x15c(%rbp), %rsi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x3, 0x4(%rax)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x15c(%rbp), %rsi
callq 0x22c30
movq -0x180(%rbp), %rdi
movq (%rax), %rax
movl $0x8, 0x38(%rax)
leaq 0x37ae5(%rip), %rax     # 0x6667c
movl (%rax), %eax
movl %eax, -0x36c(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movslq -0x15c(%rbp), %rsi
callq 0x22c30
movl -0x36c(%rbp), %ecx
movq (%rax), %rax
movl %ecx, 0x3c(%rax)
movl -0x15c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x15c(%rbp)
jmp 0x2eaed
leaq 0x3794f(%rip), %rax     # 0x66528
testb $0x1, (%rax)
je 0x2ed13
leaq 0x37940(%rip), %rax     # 0x66529
testb $0x1, (%rax)
jne 0x2ed13
movl $0x12, %edi
callq 0x177b0
movl %eax, -0x160(%rbp)
movl -0x160(%rbp), %esi
movq 0x373c1(%rip), %rdi     # 0x65fd0
callq 0x4440
movq %rax, -0x398(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x398(%rbp), %rdi
movb %al, -0x161(%rbp)
movzbl -0x161(%rbp), %esi
callq 0x4550
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, -0x390(%rbp)
movl $0xf, %edi
callq 0x177b0
movq -0x390(%rbp), %rdi
movl %eax, -0x168(%rbp)
movl -0x168(%rbp), %esi
callq 0x4440
movq %rax, -0x388(%rbp)
movl $0x20, %edi
callq 0x177d0
movq -0x388(%rbp), %rdi
movb %al, -0x169(%rbp)
movzbl -0x169(%rbp), %esi
callq 0x4550
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x2438d(%rip), %rsi     # 0x53047
callq 0x4380
movq -0x180(%rbp), %rdi
movq %rax, -0x380(%rbp)
addq $0x1d8, %rdi            # imm = 0x1D8
movq -0x10(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, %esi
callq 0x22c30
movq -0x380(%rbp), %rdi
movq (%rax), %rax
movq 0x10(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x242d2(%rip), %rsi     # 0x52fd1
callq 0x4380
movq %rax, %rdi
movq 0x372a2(%rip), %rsi     # 0x65fb0
callq 0x43c0
movq -0x10(%rbp), %rax
movq %rax, -0x3a0(%rbp)
cmpq $0x0, %rax
je 0x2ed31
movq -0x3a0(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
jmp 0x2edf8
movq 0x372b3(%rip), %rdi     # 0x65ff0
leaq 0x222f6(%rip), %rsi     # 0x5103a
callq 0x4380
movq %rax, %rdi
leaq 0x24310(%rip), %rsi     # 0x53063
callq 0x4380
movq %rax, %rdi
leaq 0x22ad3(%rip), %rsi     # 0x51835
callq 0x4380
movq %rax, %rdi
movl $0x97, %esi
callq 0x4610
movq %rax, %rdi
leaq 0x222db(%rip), %rsi     # 0x51059
callq 0x4380
movq -0x180(%rbp), %rsi
movq %rax, %rdi
addq $0x20, %rsi
callq 0x4320
movq %rax, %rdi
leaq 0x242d4(%rip), %rsi     # 0x53074
callq 0x4380
movq %rax, %rdi
movq -0x10(%rbp), %rsi
callq 0x30f50
movq %rax, %rdi
leaq 0x25df0(%rip), %rsi     # 0x54bab
callq 0x4380
movq %rax, %rdi
movq -0x180(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x40f0
movq %rax, %rdi
leaq 0x2559c(%rip), %rsi     # 0x54379
callq 0x4380
movq %rax, %rdi
movq 0x371c4(%rip), %rsi     # 0x65fb0
callq 0x43c0
xorl %edi, %edi
callq 0x4460
addq $0x3a0, %rsp            # imm = 0x3A0
popq %rbp
retq
nopw %cs:(%rax,%rax)