// File: melop[P]admixem/Individual.cpp
// Function: Individual::HandleCourter(Individual*, bool)
int Individual::HandleCourter(Individual * pCourter , bool bIgnoreGlobalRules) {

	
		#ifdef _OPENMP
		int nCPU = omp_get_thread_num();
		//int nTotalCPUs = omp_get_max_threads();
			#ifdef DEBUG
			printf("CPU %d: %s : %d\n", nCPU, "SexSelFormulae # ", nCPU);
			#endif
		#else
			int nCPU = 0;
		#endif

	int nCurrGen = SimulConfig.GetCurrGen();

	if (pCourter->IsDead()) {
		throw(new Exception("Cannot mate with dead courter. Something went wrong."));
	}

	if (this->_nAvailableGametes == 0) {
		//no more gametes, byebye.
		return  0;
	}
	//entry point for sexual selection.

	string sPop = ((Population*)(this->_pPop))->GetPopName();
	
	list< vector<string> > * pqvCourterSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsCourter( sPop);
	list< vector<string> > * pqvSelfSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsSelf( sPop);
	list< vector<string> > * pqvDadSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsDad( sPop);
	list< vector<string> > * pqvMomSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsMom( sPop);

	//Traits for oblique imprinting; note that things for peer imprinting has already been set at the pop level. see Population::Breed()
	list< vector<string> > * pqvPrevGenCurrPopSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsPrevGenCurrPop(sPop);
	list< vector<string> > * pqvPrevGenCurrPopCourterSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsPrevGenCurrPopCourter(sPop);
	list< vector<string> > * pqvPrevGenCurrPopChooserSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsPrevGenCurrPopChooser(sPop);

	list< vector<string> > * pqvPrevGenPrevPopSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsPrevGenPrevPop(sPop);
	list< vector<string> > * pqvPrevGenPrevPopCourterSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsPrevGenPrevPopCourter(sPop);
	list< vector<string> > * pqvPrevGenPrevPopChooserSymbols = SimulConfig.pSexualSelConfig->GetFormulaSymbolStringsPrevGenPrevPopChooser(sPop);

	list< vector<string> >::iterator itSelfSymbols= pqvSelfSymbols->begin();
	list< vector<string> >::iterator itCourterSymbols= pqvCourterSymbols->begin();
	list< vector<string> >::iterator itDadSymbols= pqvDadSymbols->begin();
	list< vector<string> >::iterator itMomSymbols= pqvMomSymbols->begin();

	list< vector<string> >::iterator itPrevGenCurrPopSymbols		=        pqvPrevGenCurrPopSymbols->begin();
	list< vector<string> >::iterator itPrevGenCurrPopCourterSymbols = 		 pqvPrevGenCurrPopCourterSymbols->begin();
	list< vector<string> >::iterator itPrevGenCurrPopChooserSymbols =		 pqvPrevGenCurrPopChooserSymbols->begin();
	
	list< vector<string> >::iterator itPrevGenPrevPopSymbols		= 				 pqvPrevGenPrevPopSymbols->begin();
	list< vector<string> >::iterator itPrevGenPrevPopCourterSymbols =  		 pqvPrevGenPrevPopCourterSymbols->begin();
	list< vector<string> >::iterator itPrevGenPrevPopChooserSymbols =		 pqvPrevGenPrevPopChooserSymbols->begin();

	bool bAccept = true;

	//#pragma omp critical 
	//{
		list< pair< Parser *, int > > * pqParsers = SimulConfig.pSexualSelConfig->GetFormulae(sPop);
		for (list< pair< Parser *, int > > ::iterator itParser= pqParsers->begin(); itParser != pqParsers->end() ; ++itParser) {
			vector<string> vSymbolsSelf = *itSelfSymbols;
			vector<string> vSymbolsCourter = *itCourterSymbols;
			vector<string> vSymbolsDad = *itDadSymbols;
			vector<string> vSymbolsMom = *itMomSymbols;

			vector<string> vSymbolsPrevGenCurrPop		=	*itPrevGenCurrPopSymbols	;	
			vector<string> vSymbolsPrevGenCurrPopCourter = *itPrevGenCurrPopCourterSymbols;
			vector<string> vSymbolsPrevGenCurrPopChooser = *itPrevGenCurrPopChooserSymbols;
			 
			vector<string> vSymbolsPrevGenPrevPop		 =	*itPrevGenPrevPopSymbols		;
			vector<string> vSymbolsPrevGenPrevPopCourter = *itPrevGenPrevPopCourterSymbols;
			vector<string> vSymbolsPrevGenPrevPopChooser = *itPrevGenPrevPopChooserSymbols;

			Parser * pParser = itParser->first;
			int nGen = itParser->second;

			if ((nGen ==-1 && !bIgnoreGlobalRules) || (bIgnoreGlobalRules && nGen == nCurrGen) ) { // two scenarios: apply global rule or apply generation-specific rule
				

				//Set self symbol values
				for(vector<string>::iterator itSymbol=vSymbolsSelf.begin();itSymbol!=vSymbolsSelf.end();++itSymbol)
				{
					pParser->symbols_[string("My_"+(*itSymbol))] = this->GetPhenotype(*itSymbol);
					pParser->symbols_[*itSymbol] = this->GetPhenotype(*itSymbol); //set both variables
				}

				//Set courter symbol values
				for(vector<string>::iterator itSymbol=vSymbolsCourter.begin();itSymbol!=vSymbolsCourter.end();++itSymbol)
				{
					pParser->symbols_[string("Courter_"+(*itSymbol))] = pCourter->GetPhenotype(*itSymbol);				
				}

				//Set dad symbol values
				bool bSkipRule = false; // rules containing references to parental phenotypes will be skipped in generation 0
				for(vector<string>::iterator itSymbol=vSymbolsDad.begin();itSymbol!=vSymbolsDad.end();++itSymbol)
				{
					if (nCurrGen == 0) {
						bSkipRule = true;
						break;
					}

					pParser->symbols_[string("Dad_"+(*itSymbol))] = this->_mpDadPhenotypes[*itSymbol];				
				}

				//Set mom symbol values
				for(vector<string>::iterator itSymbol=vSymbolsMom.begin();itSymbol!=vSymbolsMom.end();++itSymbol)
				{
					if (nCurrGen == 0) {
						bSkipRule = true;
						break;
					}

					pParser->symbols_[string("Mom_"+(*itSymbol))] = this->_mpMomPhenotypes[*itSymbol];				
				}

				//Set PrevGenCurrPop symbol values
				bSkipRule = bSkipRule || this->fnSetParserPopWide(pParser , vSymbolsPrevGenCurrPop, string("PrevGenCurrPop"), ((Population*)this->GetPop())->_mpPrevGenSumPhenotype);
				//Set PrevGenCurrPopCourter symbol values
				bSkipRule = bSkipRule || this->fnSetParserPopWide(pParser , vSymbolsPrevGenCurrPopCourter , string("PrevGenCurrPopCourter"), ((Population*)this->GetPop())->_mpPrevGenSumPhenotypeMale);
				//Set PrevGenCurrPopChooser
				bSkipRule = bSkipRule || this->fnSetParserPopWide(pParser , vSymbolsPrevGenCurrPopChooser, string("PrevGenCurrPopChooser"), ((Population*)this->GetPop())->_mpPrevGenSumPhenotypeFemale);
				
				//set PrevGenPrevPop
				bSkipRule = bSkipRule || this->fnSetParserPopWide(pParser , vSymbolsPrevGenPrevPop, string("PrevGenPrevPop"), ((Population*)this->GetPrevPop())->_mpPrevGenSumPhenotype);
				// set PrevGenPrevPopCourter
				bSkipRule = bSkipRule || this->fnSetParserPopWide(pParser , vSymbolsPrevGenPrevPopCourter, string("PrevGenPrevPopCourter"), ((Population*)this->GetPrevPop())->_mpPrevGenSumPhenotypeMale);
				//set PrevGenPrevPopChooser
				bSkipRule = bSkipRule || this->fnSetParserPopWide(pParser , vSymbolsPrevGenPrevPopChooser, string("PrevGenPrevPopChooser"), ((Population*)this->GetPrevPop())->_mpPrevGenSumPhenotypeFemale);
				


				if (bSkipRule) continue;
				

				bAccept = (vUniformGen[nCPU]->Next() <= pParser->Evaluate())? true : false;

				if (!bAccept) {
					return 0; //reject mate
				}

			}

			/*
			if (!bAccept) {
				break;
			}
			*/
			++itSelfSymbols;
			++itCourterSymbols;
			++itDadSymbols;
			++itMomSymbols;

			++itPrevGenCurrPopSymbols;	
			++itPrevGenCurrPopCourterSymbols;
			++itPrevGenCurrPopChooserSymbols;
			
			++itPrevGenPrevPopSymbols;
			++itPrevGenPrevPopCourterSymbols;
			++itPrevGenPrevPopChooserSymbols;

		}
	
	//}//end critical

	if (!bAccept) {
		return 0;
	}

	int nSuccess;
	#pragma omp critical 
	{
		if (pCourter) {
			this->_arrOtherParentsForOffsprings.push_back(pCourter);
			nSuccess = 1;
		}
		else {
			nSuccess = 0;
		}
	}//end critical

	return nSuccess;
	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7f0, %rsp            # imm = 0x7F0
movb %dl, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
andb $0x1, %al
movb %al, -0x19(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x5a0(%rbp)
movl $0x0, -0x20(%rbp)
leaq 0x52285(%rip), %rdi     # 0xaaa58
callq 0x282f0
movl %eax, -0x24(%rbp)
movq -0x18(%rbp), %rdi
callq 0x5a190
testb $0x1, %al
jne 0x587ed
jmp 0x58883
movl $0x8, %edi
callq 0x8230
movq %rax, -0x5b0(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x5a8(%rbp)
jmp 0x58811
movq -0x5a8(%rbp), %rdi
leaq 0x1f80b(%rip), %rsi     # 0x7802a
callq 0x129a0
jmp 0x58826
movq -0x5b0(%rbp), %rdi
movq -0x5a8(%rbp), %rax
movq %rax, (%rdi)
leaq 0x5148a(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x58872
movq -0x5a8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x5b0(%rbp), %rdi
callq 0x8370
jmp 0x5a17e
movq -0x5a0(%rbp), %rax
cmpl $0x0, 0x40(%rax)
jne 0x5889c
movl $0x0, -0x4(%rbp)
jmp 0x5a172
movq -0x5a0(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x58(%rbp), %rdi
movq %rdi, -0x5c0(%rbp)
callq 0x69750
movq -0x5c0(%rbp), %rsi
leaq 0x52193(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x81f0
jmp 0x588db
movq -0x5b8(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x25890
movq %rax, -0x5c8(%rbp)
jmp 0x588f4
leaq -0x80(%rbp), %rdi
callq 0x82e0
movq -0x5c8(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq 0x52149(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x5d0(%rbp)
leaq -0xa8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x5892c
movq -0x5d0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x258c0
movq %rax, -0x5d8(%rbp)
jmp 0x58948
leaq -0xa8(%rbp), %rdi
callq 0x82e0
movq -0x5d8(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq 0x520ef(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x5e0(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58986
movq -0x5e0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x25980
movq %rax, -0x5e8(%rbp)
jmp 0x589a2
leaq -0xd0(%rbp), %rdi
callq 0x82e0
movq -0x5e8(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq 0x52095(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x5f0(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x589e0
movq -0x5f0(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x259b0
movq %rax, -0x5f8(%rbp)
jmp 0x589fc
leaq -0xf8(%rbp), %rdi
callq 0x82e0
movq -0x5f8(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq 0x5203b(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x600(%rbp)
leaq -0x120(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58a3a
movq -0x600(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x259e0
movq %rax, -0x608(%rbp)
jmp 0x58a56
leaq -0x120(%rbp), %rdi
callq 0x82e0
movq -0x608(%rbp), %rax
movq %rax, -0x100(%rbp)
leaq 0x51fe1(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x610(%rbp)
leaq -0x148(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58a94
movq -0x610(%rbp), %rdi
leaq -0x148(%rbp), %rsi
callq 0x25a10
movq %rax, -0x618(%rbp)
jmp 0x58ab0
leaq -0x148(%rbp), %rdi
callq 0x82e0
movq -0x618(%rbp), %rax
movq %rax, -0x128(%rbp)
leaq 0x51f87(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x620(%rbp)
leaq -0x170(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58aee
movq -0x620(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x25a40
movq %rax, -0x628(%rbp)
jmp 0x58b0a
leaq -0x170(%rbp), %rdi
callq 0x82e0
movq -0x628(%rbp), %rax
movq %rax, -0x150(%rbp)
leaq 0x51f2d(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x630(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58b48
movq -0x630(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x25a70
movq %rax, -0x638(%rbp)
jmp 0x58b64
leaq -0x198(%rbp), %rdi
callq 0x82e0
movq -0x638(%rbp), %rax
movq %rax, -0x178(%rbp)
leaq 0x51ed3(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x640(%rbp)
leaq -0x1c0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58ba2
movq -0x640(%rbp), %rdi
leaq -0x1c0(%rbp), %rsi
callq 0x25aa0
movq %rax, -0x648(%rbp)
jmp 0x58bbe
leaq -0x1c0(%rbp), %rdi
callq 0x82e0
movq -0x648(%rbp), %rax
movq %rax, -0x1a0(%rbp)
leaq 0x51e79(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x650(%rbp)
leaq -0x1e8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58bfc
movq -0x650(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x25ad0
movq %rax, -0x658(%rbp)
jmp 0x58c18
leaq -0x1e8(%rbp), %rdi
callq 0x82e0
movq -0x658(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x88(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x1f0(%rbp)
movq -0x60(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x1f8(%rbp)
movq -0xb0(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x200(%rbp)
movq -0xd8(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x208(%rbp)
movq -0x100(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x210(%rbp)
movq -0x128(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x218(%rbp)
movq -0x150(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x220(%rbp)
movq -0x178(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x228(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x230(%rbp)
movq -0x1c8(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x238(%rbp)
movb $0x1, -0x239(%rbp)
leaq 0x51d5d(%rip), %rax     # 0xaaa58
movq 0x28(%rax), %rax
movq %rax, -0x660(%rbp)
leaq -0x268(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x81f0
jmp 0x58d18
movq -0x660(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x25830
movq %rax, -0x668(%rbp)
jmp 0x58d34
leaq -0x268(%rbp), %rdi
callq 0x82e0
movq -0x668(%rbp), %rax
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rdi
callq 0x4a510
movq %rax, -0x270(%rbp)
movq -0x248(%rbp), %rdi
callq 0x33090
movq %rax, -0x278(%rbp)
leaq -0x270(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x4a540
testb $0x1, %al
jne 0x58d90
jmp 0x5a0f7
leaq -0x1f0(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x290(%rbp), %rdi
callq 0x4c8d0
jmp 0x58dad
leaq -0x1f8(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x2a8(%rbp), %rdi
callq 0x4c8d0
jmp 0x58dca
leaq -0x200(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x2c0(%rbp), %rdi
callq 0x4c8d0
jmp 0x58de7
leaq -0x208(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x2d8(%rbp), %rdi
callq 0x4c8d0
jmp 0x58e04
leaq -0x210(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x4c8d0
jmp 0x58e21
leaq -0x218(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x308(%rbp), %rdi
callq 0x4c8d0
jmp 0x58e3e
leaq -0x220(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x320(%rbp), %rdi
callq 0x4c8d0
jmp 0x58e5b
leaq -0x228(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x338(%rbp), %rdi
callq 0x4c8d0
jmp 0x58e78
leaq -0x230(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x350(%rbp), %rdi
callq 0x4c8d0
jmp 0x58e95
leaq -0x238(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x368(%rbp), %rdi
callq 0x4c8d0
jmp 0x58eb2
leaq -0x270(%rbp), %rdi
callq 0x5c0c0
movq (%rax), %rax
movq %rax, -0x370(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x5c0c0
movl 0x8(%rax), %eax
movl %eax, -0x374(%rbp)
cmpl $-0x1, -0x374(%rbp)
jne 0x58eec
testb $0x1, -0x19(%rbp)
je 0x58f05
testb $0x1, -0x19(%rbp)
je 0x59f4e
movl -0x374(%rbp), %eax
cmpl -0x24(%rbp), %eax
jne 0x59f4e
leaq -0x290(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x380(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x3f240
movq %rax, -0x388(%rbp)
leaq -0x380(%rbp), %rdi
leaq -0x388(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x58f47
jmp 0x592e9
leaq -0x380(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x3a8(%rbp), %rdi
callq 0x81f0
jmp 0x58f64
movq -0x5a0(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x670(%rbp)
jmp 0x58f81
movq -0x370(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x678(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x462a0
movq %rax, %rdx
leaq 0x1e3f4(%rip), %rsi     # 0x7739d
leaq -0x3c8(%rbp), %rdi
callq 0xc3f0
jmp 0x58fb7
movq -0x678(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0x31840
movq %rax, -0x680(%rbp)
jmp 0x58fd3
movq -0x680(%rbp), %rax
movsd -0x670(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x3c8(%rbp), %rdi
callq 0x82e0
leaq -0x3a8(%rbp), %rdi
callq 0x82e0
leaq -0x380(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x3e8(%rbp), %rdi
callq 0x81f0
jmp 0x5901b
movq -0x5a0(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x688(%rbp)
jmp 0x59038
movq -0x370(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x698(%rbp)
leaq -0x380(%rbp), %rdi
callq 0x462a0
movq -0x698(%rbp), %rdi
movq %rax, %rsi
callq 0xca50
movq %rax, -0x690(%rbp)
jmp 0x5906e
movq -0x690(%rbp), %rax
movsd -0x688(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x3e8(%rbp), %rdi
callq 0x82e0
leaq -0x380(%rbp), %rdi
callq 0x462c0
jmp 0x58f18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x80(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xa8(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x268(%rbp), %rdi
callq 0x82e0
jmp 0x5a167
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0b9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a0a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a095
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a089
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x592bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x82e0
leaq -0x3a8(%rbp), %rdi
callq 0x82e0
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0x82e0
jmp 0x5a07d
leaq -0x2a8(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x3f0(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x3f240
movq %rax, -0x3f8(%rbp)
leaq -0x3f0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x5932b
jmp 0x59435
movq -0x18(%rbp), %rax
movq %rax, -0x6a0(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x418(%rbp), %rdi
callq 0x81f0
jmp 0x59353
movq -0x6a0(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x6a8(%rbp)
jmp 0x59370
movq -0x370(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x6b0(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x462a0
movq %rax, %rdx
leaq 0x1e138(%rip), %rsi     # 0x774d0
leaq -0x438(%rbp), %rdi
callq 0xc3f0
jmp 0x593a6
movq -0x6b0(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x31840
movq %rax, -0x6b8(%rbp)
jmp 0x593c2
movq -0x6b8(%rbp), %rax
movsd -0x6a8(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x438(%rbp), %rdi
callq 0x82e0
leaq -0x418(%rbp), %rdi
callq 0x82e0
leaq -0x3f0(%rbp), %rdi
callq 0x462c0
jmp 0x592fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59424
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x438(%rbp), %rdi
callq 0x82e0
leaq -0x418(%rbp), %rdi
callq 0x82e0
jmp 0x5a07d
movb $0x0, -0x439(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x448(%rbp)
leaq -0x2c0(%rbp), %rdi
callq 0x3f240
movq %rax, -0x450(%rbp)
leaq -0x448(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x5947e
jmp 0x5957a
cmpl $0x0, -0x24(%rbp)
jne 0x59490
movb $0x1, -0x439(%rbp)
jmp 0x5957a
movq -0x5a0(%rbp), %rax
addq $0xb0, %rax
movq %rax, -0x6c8(%rbp)
leaq -0x448(%rbp), %rdi
callq 0x462a0
movq -0x6c8(%rbp), %rdi
movq %rax, %rsi
callq 0xca50
movq %rax, -0x6c0(%rbp)
jmp 0x594c8
movq -0x6c0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x6d8(%rbp)
movq -0x370(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x6d0(%rbp)
leaq -0x448(%rbp), %rdi
callq 0x462a0
movq %rax, %rdx
leaq 0x1dfa5(%rip), %rsi     # 0x774a8
leaq -0x470(%rbp), %rdi
callq 0xc3f0
jmp 0x59511
movq -0x6d0(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x31840
movq %rax, -0x6e0(%rbp)
jmp 0x5952d
movq -0x6e0(%rbp), %rax
movsd -0x6d8(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x470(%rbp), %rdi
callq 0x82e0
leaq -0x448(%rbp), %rdi
callq 0x462c0
jmp 0x5944f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x470(%rbp), %rdi
callq 0x82e0
jmp 0x5a07d
leaq -0x2d8(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x478(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x3f240
movq %rax, -0x480(%rbp)
leaq -0x478(%rbp), %rdi
leaq -0x480(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x595bc
jmp 0x596b8
cmpl $0x0, -0x24(%rbp)
jne 0x595ce
movb $0x1, -0x439(%rbp)
jmp 0x596b8
movq -0x5a0(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0x6f0(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x462a0
movq -0x6f0(%rbp), %rdi
movq %rax, %rsi
callq 0xca50
movq %rax, -0x6e8(%rbp)
jmp 0x59606
movq -0x6e8(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x700(%rbp)
movq -0x370(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x6f8(%rbp)
leaq -0x478(%rbp), %rdi
callq 0x462a0
movq %rax, %rdx
leaq 0x1de6c(%rip), %rsi     # 0x774ad
leaq -0x4a0(%rbp), %rdi
callq 0xc3f0
jmp 0x5964f
movq -0x6f8(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
callq 0x31840
movq %rax, -0x708(%rbp)
jmp 0x5966b
movq -0x708(%rbp), %rax
movsd -0x700(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x4a0(%rbp), %rdi
callq 0x82e0
leaq -0x478(%rbp), %rdi
callq 0x462c0
jmp 0x5958d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x82e0
jmp 0x5a07d
movb -0x439(%rbp), %cl
movb $0x0, -0x4c2(%rbp)
movb $0x0, -0x4c3(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x709(%rbp)
jne 0x59782
movq -0x370(%rbp), %rax
movq %rax, -0x720(%rbp)
leaq -0x4c1(%rbp), %rdi
movq %rdi, -0x718(%rbp)
callq 0x8870
movq -0x718(%rbp), %rdx
movb $0x1, -0x4c2(%rbp)
leaq 0x1e94c(%rip), %rsi     # 0x7805f
leaq -0x4c0(%rbp), %rdi
callq 0xcb30
jmp 0x59721
movq -0x5a0(%rbp), %rdi
movb $0x1, -0x4c3(%rbp)
callq 0x570d0
movq %rax, -0x728(%rbp)
jmp 0x5973d
movq -0x720(%rbp), %rsi
movq -0x5a0(%rbp), %rdi
movq -0x728(%rbp), %r8
addq $0x148, %r8             # imm = 0x148
leaq -0x2f0(%rbp), %rdx
leaq -0x4c0(%rbp), %rcx
callq 0x5a1e0
movb %al, -0x729(%rbp)
jmp 0x59774
movb -0x729(%rbp), %al
movb %al, -0x709(%rbp)
jmp 0x59782
movb -0x709(%rbp), %al
andb $0x1, %al
movb %al, -0x439(%rbp)
testb $0x1, -0x4c3(%rbp)
jne 0x5979b
jmp 0x597a7
leaq -0x4c0(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x4c2(%rbp)
jne 0x597b2
jmp 0x597be
leaq -0x4c1(%rbp), %rdi
callq 0x8540
movb -0x439(%rbp), %cl
movb $0x0, -0x4ea(%rbp)
movb $0x0, -0x4eb(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x72a(%rbp)
jne 0x59888
movq -0x370(%rbp), %rax
movq %rax, -0x740(%rbp)
leaq -0x4e9(%rbp), %rdi
movq %rdi, -0x738(%rbp)
callq 0x8870
movq -0x738(%rbp), %rdx
movb $0x1, -0x4ea(%rbp)
leaq 0x1e855(%rip), %rsi     # 0x7806e
leaq -0x4e8(%rbp), %rdi
callq 0xcb30
jmp 0x59827
movq -0x5a0(%rbp), %rdi
movb $0x1, -0x4eb(%rbp)
callq 0x570d0
movq %rax, -0x748(%rbp)
jmp 0x59843
movq -0x740(%rbp), %rsi
movq -0x5a0(%rbp), %rdi
movq -0x748(%rbp), %r8
addq $0x178, %r8             # imm = 0x178
leaq -0x308(%rbp), %rdx
leaq -0x4e8(%rbp), %rcx
callq 0x5a1e0
movb %al, -0x749(%rbp)
jmp 0x5987a
movb -0x749(%rbp), %al
movb %al, -0x72a(%rbp)
jmp 0x59888
movb -0x72a(%rbp), %al
andb $0x1, %al
movb %al, -0x439(%rbp)
testb $0x1, -0x4eb(%rbp)
jne 0x598a1
jmp 0x598ad
leaq -0x4e8(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x4ea(%rbp)
jne 0x598b8
jmp 0x598c4
leaq -0x4e9(%rbp), %rdi
callq 0x8540
movb -0x439(%rbp), %cl
movb $0x0, -0x512(%rbp)
movb $0x0, -0x513(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x74a(%rbp)
jne 0x5998e
movq -0x370(%rbp), %rax
movq %rax, -0x760(%rbp)
leaq -0x511(%rbp), %rdi
movq %rdi, -0x758(%rbp)
callq 0x8870
movq -0x758(%rbp), %rdx
movb $0x1, -0x512(%rbp)
leaq 0x1e765(%rip), %rsi     # 0x78084
leaq -0x510(%rbp), %rdi
callq 0xcb30
jmp 0x5992d
movq -0x5a0(%rbp), %rdi
movb $0x1, -0x513(%rbp)
callq 0x570d0
movq %rax, -0x768(%rbp)
jmp 0x59949
movq -0x760(%rbp), %rsi
movq -0x5a0(%rbp), %rdi
movq -0x768(%rbp), %r8
addq $0x1a8, %r8             # imm = 0x1A8
leaq -0x320(%rbp), %rdx
leaq -0x510(%rbp), %rcx
callq 0x5a1e0
movb %al, -0x769(%rbp)
jmp 0x59980
movb -0x769(%rbp), %al
movb %al, -0x74a(%rbp)
jmp 0x5998e
movb -0x74a(%rbp), %al
andb $0x1, %al
movb %al, -0x439(%rbp)
testb $0x1, -0x513(%rbp)
jne 0x599a7
jmp 0x599b3
leaq -0x510(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x512(%rbp)
jne 0x599be
jmp 0x599ca
leaq -0x511(%rbp), %rdi
callq 0x8540
movb -0x439(%rbp), %cl
movb $0x0, -0x53a(%rbp)
movb $0x0, -0x53b(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x76a(%rbp)
jne 0x59a94
movq -0x370(%rbp), %rax
movq %rax, -0x780(%rbp)
leaq -0x539(%rbp), %rdi
movq %rdi, -0x778(%rbp)
callq 0x8870
movq -0x778(%rbp), %rdx
movb $0x1, -0x53a(%rbp)
leaq 0x1e675(%rip), %rsi     # 0x7809a
leaq -0x538(%rbp), %rdi
callq 0xcb30
jmp 0x59a33
movq -0x5a0(%rbp), %rdi
movb $0x1, -0x53b(%rbp)
callq 0x5a660
movq %rax, -0x788(%rbp)
jmp 0x59a4f
movq -0x780(%rbp), %rsi
movq -0x5a0(%rbp), %rdi
movq -0x788(%rbp), %r8
addq $0x148, %r8             # imm = 0x148
leaq -0x338(%rbp), %rdx
leaq -0x538(%rbp), %rcx
callq 0x5a1e0
movb %al, -0x789(%rbp)
jmp 0x59a86
movb -0x789(%rbp), %al
movb %al, -0x76a(%rbp)
jmp 0x59a94
movb -0x76a(%rbp), %al
andb $0x1, %al
movb %al, -0x439(%rbp)
testb $0x1, -0x53b(%rbp)
jne 0x59aad
jmp 0x59ab9
leaq -0x538(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x53a(%rbp)
jne 0x59ac4
jmp 0x59ad0
leaq -0x539(%rbp), %rdi
callq 0x8540
movb -0x439(%rbp), %cl
movb $0x0, -0x562(%rbp)
movb $0x0, -0x563(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x78a(%rbp)
jne 0x59b9a
movq -0x370(%rbp), %rax
movq %rax, -0x7a0(%rbp)
leaq -0x561(%rbp), %rdi
movq %rdi, -0x798(%rbp)
callq 0x8870
movq -0x798(%rbp), %rdx
movb $0x1, -0x562(%rbp)
leaq 0x1e57e(%rip), %rsi     # 0x780a9
leaq -0x560(%rbp), %rdi
callq 0xcb30
jmp 0x59b39
movq -0x5a0(%rbp), %rdi
movb $0x1, -0x563(%rbp)
callq 0x5a660
movq %rax, -0x7a8(%rbp)
jmp 0x59b55
movq -0x7a0(%rbp), %rsi
movq -0x5a0(%rbp), %rdi
movq -0x7a8(%rbp), %r8
addq $0x178, %r8             # imm = 0x178
leaq -0x350(%rbp), %rdx
leaq -0x560(%rbp), %rcx
callq 0x5a1e0
movb %al, -0x7a9(%rbp)
jmp 0x59b8c
movb -0x7a9(%rbp), %al
movb %al, -0x78a(%rbp)
jmp 0x59b9a
movb -0x78a(%rbp), %al
andb $0x1, %al
movb %al, -0x439(%rbp)
testb $0x1, -0x563(%rbp)
jne 0x59bb3
jmp 0x59bbf
leaq -0x560(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x562(%rbp)
jne 0x59bca
jmp 0x59bd6
leaq -0x561(%rbp), %rdi
callq 0x8540
movb -0x439(%rbp), %cl
movb $0x0, -0x58a(%rbp)
movb $0x0, -0x58b(%rbp)
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x7aa(%rbp)
jne 0x59ca0
movq -0x370(%rbp), %rax
movq %rax, -0x7c0(%rbp)
leaq -0x589(%rbp), %rdi
movq %rdi, -0x7b8(%rbp)
callq 0x8870
movq -0x7b8(%rbp), %rdx
movb $0x1, -0x58a(%rbp)
leaq 0x1e48e(%rip), %rsi     # 0x780bf
leaq -0x588(%rbp), %rdi
callq 0xcb30
jmp 0x59c3f
movq -0x5a0(%rbp), %rdi
movb $0x1, -0x58b(%rbp)
callq 0x5a660
movq %rax, -0x7c8(%rbp)
jmp 0x59c5b
movq -0x7c0(%rbp), %rsi
movq -0x5a0(%rbp), %rdi
movq -0x7c8(%rbp), %r8
addq $0x1a8, %r8             # imm = 0x1A8
leaq -0x368(%rbp), %rdx
leaq -0x588(%rbp), %rcx
callq 0x5a1e0
movb %al, -0x7c9(%rbp)
jmp 0x59c92
movb -0x7c9(%rbp), %al
movb %al, -0x7aa(%rbp)
jmp 0x59ca0
movb -0x7aa(%rbp), %al
andb $0x1, %al
movb %al, -0x439(%rbp)
testb $0x1, -0x58b(%rbp)
jne 0x59cb9
jmp 0x59cc5
leaq -0x588(%rbp), %rdi
callq 0x82e0
testb $0x1, -0x58a(%rbp)
jne 0x59cd0
jmp 0x59cdc
leaq -0x589(%rbp), %rdi
callq 0x8540
testb $0x1, -0x439(%rbp)
je 0x59ed2
movl $0x4, -0x590(%rbp)
jmp 0x59fd0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59d2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
testb $0x1, -0x4c3(%rbp)
jne 0x59d1d
jmp 0x59d29
leaq -0x4c0(%rbp), %rdi
callq 0x82e0
jmp 0x59d2b
testb $0x1, -0x4c2(%rbp)
jne 0x59d36
jmp 0x59d42
leaq -0x4c1(%rbp), %rdi
callq 0x8540
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59d7a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
testb $0x1, -0x4eb(%rbp)
jne 0x59d6c
jmp 0x59d78
leaq -0x4e8(%rbp), %rdi
callq 0x82e0
jmp 0x59d7a
testb $0x1, -0x4ea(%rbp)
jne 0x59d85
jmp 0x59d91
leaq -0x4e9(%rbp), %rdi
callq 0x8540
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59dc9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
testb $0x1, -0x513(%rbp)
jne 0x59dbb
jmp 0x59dc7
leaq -0x510(%rbp), %rdi
callq 0x82e0
jmp 0x59dc9
testb $0x1, -0x512(%rbp)
jne 0x59dd4
jmp 0x59de0
leaq -0x511(%rbp), %rdi
callq 0x8540
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59e18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
testb $0x1, -0x53b(%rbp)
jne 0x59e0a
jmp 0x59e16
leaq -0x538(%rbp), %rdi
callq 0x82e0
jmp 0x59e18
testb $0x1, -0x53a(%rbp)
jne 0x59e23
jmp 0x59e2f
leaq -0x539(%rbp), %rdi
callq 0x8540
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59e67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
testb $0x1, -0x563(%rbp)
jne 0x59e59
jmp 0x59e65
leaq -0x560(%rbp), %rdi
callq 0x82e0
jmp 0x59e67
testb $0x1, -0x562(%rbp)
jne 0x59e72
jmp 0x59e7e
leaq -0x561(%rbp), %rdi
callq 0x8540
jmp 0x5a07d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x59eb6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
testb $0x1, -0x58b(%rbp)
jne 0x59ea8
jmp 0x59eb4
leaq -0x588(%rbp), %rdi
callq 0x82e0
jmp 0x59eb6
testb $0x1, -0x58a(%rbp)
jne 0x59ec1
jmp 0x59ecd
leaq -0x589(%rbp), %rdi
callq 0x8540
jmp 0x5a07d
movslq -0x20(%rbp), %rsi
leaq 0x50d03(%rip), %rdi     # 0xaabe0
callq 0x2b070
movq (%rax), %rdi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
movsd %xmm0, -0x7d8(%rbp)
jmp 0x59ef7
movq -0x370(%rbp), %rdi
callq 0xc170
movsd %xmm0, -0x7e0(%rbp)
jmp 0x59f0d
movsd -0x7e0(%rbp), %xmm0
movsd -0x7d8(%rbp), %xmm1
xorl %eax, %eax
ucomisd %xmm1, %xmm0
adcb $-0x1, %al
andb $0x1, %al
movb %al, -0x239(%rbp)
testb $0x1, -0x239(%rbp)
jne 0x59f4c
movl $0x0, -0x4(%rbp)
movl $0x1, -0x590(%rbp)
jmp 0x59fd0
jmp 0x59f4e
leaq -0x1f0(%rbp), %rdi
callq 0x4bec0
leaq -0x1f8(%rbp), %rdi
callq 0x4bec0
leaq -0x200(%rbp), %rdi
callq 0x4bec0
leaq -0x208(%rbp), %rdi
callq 0x4bec0
leaq -0x210(%rbp), %rdi
callq 0x4bec0
leaq -0x218(%rbp), %rdi
callq 0x4bec0
leaq -0x220(%rbp), %rdi
callq 0x4bec0
leaq -0x228(%rbp), %rdi
callq 0x4bec0
leaq -0x230(%rbp), %rdi
callq 0x4bec0
leaq -0x238(%rbp), %rdi
callq 0x4bec0
movl $0x0, -0x590(%rbp)
leaq -0x368(%rbp), %rdi
callq 0x2bfd0
leaq -0x350(%rbp), %rdi
callq 0x2bfd0
leaq -0x338(%rbp), %rdi
callq 0x2bfd0
leaq -0x320(%rbp), %rdi
callq 0x2bfd0
leaq -0x308(%rbp), %rdi
callq 0x2bfd0
leaq -0x2f0(%rbp), %rdi
callq 0x2bfd0
leaq -0x2d8(%rbp), %rdi
callq 0x2bfd0
leaq -0x2c0(%rbp), %rdi
callq 0x2bfd0
leaq -0x2a8(%rbp), %rdi
callq 0x2bfd0
leaq -0x290(%rbp), %rdi
callq 0x2bfd0
movl -0x590(%rbp), %eax
movl %eax, -0x7e4(%rbp)
testl %eax, %eax
je 0x5a06a
jmp 0x5a05a
movl -0x7e4(%rbp), %eax
subl $0x4, %eax
je 0x5a06c
jmp 0x5a15c
jmp 0x5a06c
leaq -0x270(%rbp), %rdi
callq 0x4a5a0
jmp 0x58d61
leaq -0x368(%rbp), %rdi
callq 0x2bfd0
leaq -0x350(%rbp), %rdi
callq 0x2bfd0
leaq -0x338(%rbp), %rdi
callq 0x2bfd0
leaq -0x320(%rbp), %rdi
callq 0x2bfd0
leaq -0x308(%rbp), %rdi
callq 0x2bfd0
leaq -0x2f0(%rbp), %rdi
callq 0x2bfd0
leaq -0x2d8(%rbp), %rdi
callq 0x2bfd0
leaq -0x2c0(%rbp), %rdi
callq 0x2bfd0
leaq -0x2a8(%rbp), %rdi
callq 0x2bfd0
leaq -0x290(%rbp), %rdi
callq 0x2bfd0
jmp 0x5a167
testb $0x1, -0x239(%rbp)
jne 0x5a113
movl $0x0, -0x4(%rbp)
movl $0x1, -0x590(%rbp)
jmp 0x5a15c
cmpq $0x0, -0x18(%rbp)
je 0x5a13f
movq -0x5a0(%rbp), %rdi
addq $0x140, %rdi            # imm = 0x140
leaq -0x18(%rbp), %rsi
callq 0x5c0f0
jmp 0x5a133
movl $0x1, -0x594(%rbp)
jmp 0x5a149
movl $0x0, -0x594(%rbp)
movl -0x594(%rbp), %eax
movl %eax, -0x4(%rbp)
movl $0x1, -0x590(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x82e0
jmp 0x5a172
leaq -0x58(%rbp), %rdi
callq 0x82e0
jmp 0x5a17e
movl -0x4(%rbp), %eax
addq $0x7f0, %rsp            # imm = 0x7F0
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x8860
nopw (%rax,%rax)