// File: /workspace/github_cpp_makefile_star2_O3/melop[P]admixem/config.cpp
// Function: NaturalSelectionConfigurations::LoadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void NaturalSelectionConfigurations::LoadFromFile(string szConfigFile)
{
	//FILE *pConfigFile;
	ifstream fsConfigFile;
	string sBuffer;
	char szPopName[MAXLINE];
	char szFormula[MAXLINE];
	
	#ifdef _OPENMP
		int nTotalCPUCore =  omp_get_max_threads();//omp_get_num_threads();
		//printf("OpenMP enabled\n");
	#else
		int nTotalCPUCore = 1;
		//printf("OpenMP disabled \n");
	#endif

	
	
	printf("Start loading natural selection file %s ...\n", szConfigFile.c_str());

	_szConfigFilename = szConfigFile; // save name of config file

	fsConfigFile.open(szConfigFile.c_str() );
	//pConfigFile = fopen(szConfigFile.c_str(), "r");
	

	if (!fsConfigFile.is_open()) {
		printf("%s\n", "Cannot open natural selection file ...");
		throw "Cannot open natural selection file!";
	}

	getline(fsConfigFile,sBuffer);
	if (sBuffer == "") { // skip the header line
		throw "Cannot read natural selection file!";
	}

	string sPopName="";
	string sFormula="";
	string sPrevPopName="";
	string sPrevFormula="";

	while(fsConfigFile.good()) 
	{
		getline(fsConfigFile,sBuffer);
		
		int nGen;
		sBuffer.erase(sBuffer.find_last_not_of(" \n\r\t")+1);//trim
                if (sBuffer == "") {
                        continue;
                }

		sscanf(sBuffer.c_str(), "%[^\t\n]	%d	%[^\t\n]", szPopName, &nGen, szFormula);
		sPrevPopName = sPopName;
		sPrevFormula = sFormula;
		sPopName = szPopName; //make it string so that it saves lots of trouble of fuddling with c strings... i hate c strings.
		sFormula = szFormula;
		if (sPopName==sPrevPopName && sFormula == sPrevFormula) {
			printf("Warning: %s already loaded for pop %s, skipping...\n", sFormula.c_str(), sPopName.c_str());
			continue;
		}

		printf("Parsing natural rule for Pop %s : %s\n", sPopName.c_str(), sFormula.c_str());
		if (sPopName.length() != 0 && sFormula.length() !=0) {
			
			

			if (this->_mpRules.find(sPopName) == this->_mpRules.end()) { // if this pop is not in the map yet
				list< string > vsFormulae;
				list< string > vsFreqDependentFormulae;
				list< pair< Parser * , int> > vpFormulae;
				list< pair< Parser * , int> > vpFreqDependentFormulae;
				list< vector<string> > vvsSymbols;
				list< vector<string> > vvsSymbols2;
				list< vector<string> > vvsSymbols3;
				list< vector<string> > vvsSymbols4;
				list< vector<string> > vvsSymbols5;
				list< vector<string> > vvsSymbols6;
				
				this->_mpRules[sPopName] = vsFormulae;
				this->_mpFreqDependentRules[sPopName] = vsFreqDependentFormulae;
				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { // the formula object needs to be duplicated such that it will parallelize
					printf("%d CPU cores found, putting natural selection parser on CPU %d\n",nTotalCPUCore, nCPU );
					if (this->_mpmpRuleFormulae.find(nCPU) == this->_mpmpRuleFormulae.end()) {
						 map<string , list< pair<Parser *, int> > > mpRuleFormulae, _mpFreqDependentRuleFormulae;
						this->_mpmpRuleFormulae[nCPU] =  mpRuleFormulae;
						this->_mpmpFreqDependentRuleFormulae[nCPU] = _mpFreqDependentRuleFormulae;
					}

					this->_mpmpRuleFormulae[nCPU][sPopName] = vpFormulae;
					this->_mpmpFreqDependentRuleFormulae[nCPU][sPopName] = vpFreqDependentFormulae;
				}
				this->_mpRuleFormulaSymbolStrings[sPopName] = vvsSymbols;
				this->_mpRuleFormulaSymbolStringsCourter[sPopName] = vvsSymbols2;
				this->_mpRuleFormulaSymbolStringsSelf[sPopName] = vvsSymbols3;
				this->_mpRuleFormulaSymbolStringsPopWide[sPopName] = vvsSymbols4;
				this->_mpRuleFormulaSymbolStringsPopWideChooser[sPopName] = vvsSymbols5;
				this->_mpRuleFormulaSymbolStringsPopWideCourter[sPopName] = vvsSymbols6;

			}

			
			
			Parser * pF = new Parser("");
			//Parser * pDummyFormula = new Parser("1"); // dummy formula that always return 1.

			try {
				pF->Evaluate(sFormula);
			}
			catch(std::runtime_error e) {
				
				if ( string(e.what()) == "Divide by zero" ) {
					
					printf("Warning in formula: %s \nErrMsg:%s\nThis could simply be caused by uninitialized values", sFormula.c_str(), e.what());
					
					
				}
				else {
					printf("Error occured when trying to parse formula: %s \nErrMsg:%s\nPlease check formulae grammar!", sFormula.c_str(), e.what());
					exit(100);
				}
			}

		
			vector<string> vSymbolStrings; // all symbols
			vector<string> vSymbolStringsCourter; // only symbols referring to an individual courter's trait prefixed with Courter_
			vector<string> vSymbolStringsPopWideCourter; // symbols referring to population-level variables prefixed with PopCourter_
			vector<string> vSymbolStringsSelf; //symbols referring to individual chooser trait prefixed with My_
			vector<string> vSymbolStringsPopWideChooser;//symbols referring to population-level variables prefixed with PopChooser_
			vector<string> vSymbolStringsPopWide; // symbols referring to population-level variables prefixed with Pop_
			//list all the symbols used in this formula

			bool bFreqDependent = false; // does this formula contain frequency dependent symbols?

			for(map<string,double>::iterator it = pF->symbols_.begin(); it != pF->symbols_.end(); ++it) 
			{	
				//Parse chromosome number and position from the symbol
				//cout << (it->first) << "\n"; //list all keys

				
				if (strlen(it->first.c_str()) < 3) { // no need to add symbol
					continue;
				}

				vSymbolStrings.push_back(it->first); // save label too

				//Look at prefixes:
				string sSymbol = it->first;
				
				if (sSymbol.find("Courter_") == 0) {
					throw(new Exception("Courter_ not yet implemented in natural selection."));
					sSymbol.replace(0, 8, "");
					vSymbolStringsCourter.push_back(sSymbol);
				}
				else if (sSymbol.find("PopCourter_") == 0) {
					//throw(new Exception("PopCourter_ not yet implemented in natural selection."));
					sSymbol.replace(0, 11, "");
					vSymbolStringsPopWideCourter.push_back(sSymbol );
					bFreqDependent = true;
				}
				else if (sSymbol.find("My_") == 0) {
					sSymbol.replace(0, 3, "");
					vSymbolStringsSelf.push_back(sSymbol);
				}
				else if (sSymbol.find("PopChooser_") == 0) {
					//throw(new Exception("PopChooser_ not yet implemented in natural selection."));
					sSymbol.replace(0, 11, "");
					vSymbolStringsPopWideChooser.push_back(sSymbol);
					bFreqDependent = true;
				}
				else if (sSymbol.find("Pop_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 4, "");
					vSymbolStringsPopWide.push_back(sSymbol);
					bFreqDependent = true;
				}
				else { //default to be self
					vSymbolStringsSelf.push_back(sSymbol);
				}
			}

			delete pF;
			
			if (bFreqDependent) {
				this->_mpFreqDependentRules[sPopName].push_back(sFormula); // save the formula string for further reference.
				
				
				
				this->_mpRules[sPopName].push_back("1"); // 
				

				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { // the formula object needs to be duplicated such that it will parallelize

					this->_mpmpFreqDependentRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser(sFormula) , nGen )); // literally duplicate the parser object so that it can parallelize
					this->_mpmpRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser("1") , nGen )); // set dummy formula which always return 1. 
				}
				
			}
			else {

				this->_mpRules[sPopName].push_back(sFormula); // save the formula string for further reference.			

				this->_mpFreqDependentRules[sPopName].push_back("1"); 
				

				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { // the formula object needs to be duplicated such that it will parallelize
					this->_mpmpRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser(sFormula) , nGen ));
					this->_mpmpFreqDependentRuleFormulae[nCPU][sPopName].push_back(pair< Parser *, int >( new Parser("1") , nGen ));// set dummy formula which always return 1.
					
				}

			}
			this->_mpRuleFormulaSymbolStrings[sPopName].push_back(vSymbolStrings);
			this->_mpRuleFormulaSymbolStringsCourter[sPopName].push_back(vSymbolStringsCourter);
			this->_mpRuleFormulaSymbolStringsSelf[sPopName].push_back(vSymbolStringsSelf);
			this->_mpRuleFormulaSymbolStringsPopWide[sPopName].push_back(vSymbolStringsPopWide);
			this->_mpRuleFormulaSymbolStringsPopWideChooser[sPopName].push_back(vSymbolStringsPopWideChooser);
			this->_mpRuleFormulaSymbolStringsPopWideCourter[sPopName].push_back(vSymbolStringsPopWideCourter);

			if (nGen > -1) {
				this->_vSpecialGens.insert(nGen);
			}
		}
	}

	printf("Selection rules for %d populations loaded. \n", this->_mpRules.size());

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x7a5c8, %rsp          # imm = 0x7A5C8
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x298(%rsp), %rdi
callq 0x73f0
leaq 0x150(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq (%rbx), %rsi
leaq 0x20ab2(%rip), %rdi     # 0x34f99
xorl %eax, %eax
callq 0x7060
movq %r14, 0x168(%rsp)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x71d0
movq (%rbx), %rsi
leaq 0x298(%rsp), %rbx
movq %rbx, %rdi
movl $0x8, %edx
callq 0x7200
leaq 0x310(%rsp), %rdi
callq 0x70c0
testb %al, %al
je 0x1588f
movq 0x298(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x7350
movsbl %al, %edx
leaq 0x298(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x76d0
leaq 0x20ad3(%rip), %rsi     # 0x35039
leaq 0x140(%rsp), %rdi
callq 0x7100
testl %eax, %eax
je 0x158a4
leaq 0x18(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x20aae(%rip), %rdx     # 0x35039
leaq 0x8(%rsp), %rdi
movq %rdx, %rsi
callq 0xa91c
leaq 0x80(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x20a8e(%rip), %rdx     # 0x35039
leaq 0x70(%rsp), %rdi
movq %rdx, %rsi
callq 0xa91c
leaq 0x180(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x20a6e(%rip), %rdx     # 0x35039
leaq 0x170(%rsp), %rdi
movq %rdx, %rsi
callq 0xa91c
leaq 0x270(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x20a4b(%rip), %rdx     # 0x35039
leaq 0x260(%rsp), %rdi
movq %rdx, %rsi
callq 0xa91c
movq 0x298(%rsp), %rax
movq -0x18(%rax), %rax
cmpl $0x0, 0x2b8(%rsp,%rax)
je 0x146fe
movq 0x168(%rsp), %rax
movq 0x50(%rax), %rsi
leaq 0x20cc6(%rip), %rdi     # 0x352f1
xorl %eax, %eax
callq 0x7060
movq 0x260(%rsp), %rdi
leaq 0x270(%rsp), %rax
cmpq %rax, %rdi
je 0x14657
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x7390
movq 0x170(%rsp), %rdi
leaq 0x180(%rsp), %rax
cmpq %rax, %rdi
je 0x1467c
movq 0x180(%rsp), %rsi
incq %rsi
callq 0x7390
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x1469e
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x7390
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x146ba
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7390
movq 0x140(%rsp), %rdi
leaq 0x150(%rsp), %rax
cmpq %rax, %rdi
je 0x146df
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x7390
leaq 0x298(%rsp), %rdi
callq 0x70d0
addq $0x7a5c8, %rsp          # imm = 0x7A5C8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq (%rsp,%rax), %rdi
addq $0x298, %rdi            # imm = 0x298
movq 0x168(%rsp), %rax
leaq 0x28(%rax), %rcx
movq %rcx, 0x108(%rsp)
leaq 0x30(%rax), %rcx
movq %rcx, 0x288(%rsp)
leaq 0x58(%rax), %rcx
movq %rcx, 0x160(%rsp)
leaq 0x88(%rax), %rcx
movq %rcx, 0x118(%rsp)
leaq 0x90(%rax), %rcx
movq %rcx, 0x1f8(%rsp)
leaq 0xb8(%rax), %rcx
movq %rcx, 0x110(%rsp)
leaq 0xe8(%rax), %rcx
movq %rcx, 0x1e8(%rsp)
leaq 0x118(%rax), %rcx
movq %rcx, 0x1e0(%rsp)
leaq 0x148(%rax), %rcx
movq %rcx, 0x1d8(%rsp)
leaq 0x178(%rax), %rcx
movq %rcx, 0x1d0(%rsp)
leaq 0x1d8(%rax), %rcx
movq %rcx, 0x1c8(%rsp)
leaq 0x1a8(%rax), %rcx
movq %rcx, 0x1c0(%rsp)
leaq 0x38(%rsp), %r13
addq $0x208, %rax            # imm = 0x208
movq %rax, 0x280(%rsp)
leaq 0x120(%rsp), %rbp
leaq 0x28(%rsp), %r15
movl $0xa, %esi
callq 0x7350
leaq 0x140(%rsp), %rbx
movsbl %al, %edx
leaq 0x298(%rsp), %rdi
movq %rbx, %rsi
callq 0x76d0
movl $0x4, %ecx
movq %rbx, %rdi
leaq 0x20825(%rip), %rsi     # 0x35035
movq $-0x1, %rdx
callq 0x75e0
incq %rax
movq 0x148(%rsp), %rcx
cmpq %rax, %rcx
jb 0x15877
movq %rax, 0x148(%rsp)
movq 0x140(%rsp), %rcx
movb $0x0, (%rcx,%rax)
movq %rbx, %rdi
leaq 0x207eb(%rip), %rsi     # 0x35039
callq 0x7100
testl %eax, %eax
je 0x1574f
movq 0x140(%rsp), %rdi
leaq 0x207d0(%rip), %rsi     # 0x3503a
leaq 0x3d530(%rsp), %rdx
leaq 0x4(%rsp), %rcx
leaq 0x4a0(%rsp), %r8
xorl %eax, %eax
callq 0x7360
leaq 0x170(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x71d0
leaq 0x260(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x71d0
movq 0x10(%rsp), %rbx
leaq 0x3d530(%rsp), %r14
movq %r14, %rdi
callq 0x7170
leaq 0x8(%rsp), %rdi
xorl %esi, %esi
movq %rbx, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x7570
movq 0x78(%rsp), %rbx
leaq 0x4a0(%rsp), %r14
movq %r14, %rdi
callq 0x7170
leaq 0x70(%rsp), %rdi
xorl %esi, %esi
movq %rbx, %rdx
movq %r14, %rcx
movq %rax, %r8
callq 0x7570
movq 0x10(%rsp), %rdx
cmpq 0x178(%rsp), %rdx
jne 0x1495d
testq %rdx, %rdx
je 0x14928
movq 0x170(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x73b0
testl %eax, %eax
jne 0x1495d
movq 0x78(%rsp), %rdx
cmpq 0x268(%rsp), %rdx
jne 0x1495d
movq 0x70(%rsp), %rbx
testq %rdx, %rdx
je 0x152ce
movq 0x260(%rsp), %rsi
movq %rbx, %rdi
callq 0x73b0
testl %eax, %eax
je 0x152ce
movq 0x8(%rsp), %rsi
movq 0x70(%rsp), %rdx
leaq 0x20711(%rip), %rdi     # 0x3507f
xorl %eax, %eax
callq 0x7060
cmpq $0x0, 0x10(%rsp)
je 0x1574f
cmpq $0x0, 0x78(%rsp)
je 0x1574f
movq 0x108(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1efb6
cmpq 0x288(%rsp), %rax
jne 0x14ec6
leaq 0xf0(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq %rax, 0xf0(%rsp)
xorl %eax, %eax
movq %rax, 0x100(%rsp)
leaq 0xd0(%rsp), %rcx
movq %rcx, 0xd8(%rsp)
movq %rcx, 0xd0(%rsp)
movq %rax, 0xe0(%rsp)
movq %rbp, 0x128(%rsp)
movq %rbp, 0x120(%rsp)
movq %rax, 0x130(%rsp)
leaq 0x90(%rsp), %rcx
movq %rcx, 0x98(%rsp)
movq %rcx, 0x90(%rsp)
movq %rax, 0xa0(%rsp)
leaq 0xb0(%rsp), %rcx
movq %rcx, 0xb8(%rsp)
movq %rcx, 0xb0(%rsp)
movq %rax, 0xc0(%rsp)
leaq 0x58(%rsp), %rcx
movq %rcx, 0x60(%rsp)
movq %rcx, 0x58(%rsp)
movq %rax, 0x68(%rsp)
leaq 0x248(%rsp), %rcx
movq %rcx, 0x250(%rsp)
movq %rcx, 0x248(%rsp)
movq %rax, 0x258(%rsp)
leaq 0x230(%rsp), %rcx
movq %rcx, 0x238(%rsp)
movq %rcx, 0x230(%rsp)
movq %rax, 0x240(%rsp)
leaq 0x218(%rsp), %rcx
movq %rcx, 0x220(%rsp)
movq %rcx, 0x218(%rsp)
movq %rax, 0x228(%rsp)
leaq 0x200(%rsp), %rcx
movq %rcx, 0x208(%rsp)
movq %rcx, 0x200(%rsp)
movq %rax, 0x210(%rsp)
movq 0x108(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a724
leaq 0xf0(%rsp), %rcx
cmpq %rcx, %rax
je 0x14b12
movq 0xf0(%rsp), %rsi
movq %rax, %rdi
leaq 0xf0(%rsp), %rdx
callq 0x1f3a2
movq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a724
leaq 0xd0(%rsp), %rcx
cmpq %rcx, %rax
je 0x14b49
movq 0xd0(%rsp), %rsi
movq %rax, %rdi
leaq 0xd0(%rsp), %rdx
callq 0x1f3a2
movl $0x0, (%rsp)
xorl %edx, %edx
leaq 0x2054c(%rip), %rdi     # 0x350a5
movl $0x1, %esi
xorl %eax, %eax
callq 0x7060
movq 0x168(%rsp), %rax
movq 0x98(%rax), %rcx
testq %rcx, %rcx
je 0x14bae
movl (%rsp), %eax
movq 0x1f8(%rsp), %rdx
xorl %esi, %esi
cmpl %eax, 0x20(%rcx)
setl %sil
cmovgeq %rcx, %rdx
movq 0x10(%rcx,%rsi,8), %rcx
testq %rcx, %rcx
jne 0x14b84
cmpq 0x1f8(%rsp), %rdx
je 0x14bae
cmpl 0x20(%rdx), %eax
jge 0x14c4c
xorl %ecx, %ecx
movl %ecx, 0x30(%rsp)
movq %rcx, 0x38(%rsp)
leaq 0x30(%rsp), %rax
movq %rax, 0x40(%rsp)
movq %rax, 0x48(%rsp)
movq %rcx, 0x50(%rsp)
movl %ecx, 0x198(%rsp)
movq %rcx, 0x1a0(%rsp)
leaq 0x198(%rsp), %rax
movq %rax, 0x1a8(%rsp)
movq %rax, 0x1b0(%rsp)
movq %rcx, 0x1b8(%rsp)
movq 0x118(%rsp), %rdi
movq %rsp, %rsi
callq 0x1a7a0
movq %rax, %rdi
movq %r15, %rsi
callq 0x1b5d4
movq 0x110(%rsp), %rdi
movq %rsp, %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x190(%rsp), %rsi
callq 0x1b5d4
leaq 0x190(%rsp), %rdi
callq 0x1ba5e
movq %r15, %rdi
callq 0x1ba5e
movq 0x118(%rsp), %rdi
movq %rsp, %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a806
cmpq %rbp, %rax
je 0x14c81
movq 0x120(%rsp), %rsi
movq %rax, %rdi
movq %rbp, %rdx
callq 0x1fb4e
movq 0x110(%rsp), %rdi
movq %rsp, %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a806
leaq 0x90(%rsp), %rcx
cmpq %rcx, %rax
je 0x14cc3
movq 0x90(%rsp), %rsi
movq %rax, %rdi
leaq 0x90(%rsp), %rdx
callq 0x1fb4e
movl (%rsp), %eax
leal 0x1(%rax), %edx
movl %edx, (%rsp)
testl %eax, %eax
js 0x14b52
movq 0x1e8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
leaq 0xb0(%rsp), %rcx
cmpq %rcx, %rax
je 0x14d0b
movq 0xb0(%rsp), %rsi
movq %rax, %rdi
leaq 0xb0(%rsp), %rdx
callq 0x2006a
movq 0x1e0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
leaq 0x58(%rsp), %rcx
cmpq %rcx, %rax
je 0x14d39
movq 0x58(%rsp), %rsi
movq %rax, %rdi
leaq 0x58(%rsp), %rdx
callq 0x2006a
movq 0x1d8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
leaq 0x248(%rsp), %rcx
cmpq %rcx, %rax
je 0x14d70
movq 0x248(%rsp), %rsi
movq %rax, %rdi
leaq 0x248(%rsp), %rdx
callq 0x2006a
movq 0x1d0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
leaq 0x230(%rsp), %rcx
cmpq %rcx, %rax
je 0x14da7
movq 0x230(%rsp), %rsi
movq %rax, %rdi
leaq 0x230(%rsp), %rdx
callq 0x2006a
movq 0x1c8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
leaq 0x218(%rsp), %rcx
cmpq %rcx, %rax
je 0x14dde
movq 0x218(%rsp), %rsi
movq %rax, %rdi
leaq 0x218(%rsp), %rdx
callq 0x2006a
movq 0x1c0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
leaq 0x200(%rsp), %rcx
cmpq %rcx, %rax
je 0x14e15
movq 0x200(%rsp), %rsi
movq %rax, %rdi
leaq 0x200(%rsp), %rdx
callq 0x2006a
leaq 0x200(%rsp), %rdi
callq 0x1ba72
leaq 0x218(%rsp), %rdi
callq 0x1ba72
leaq 0x230(%rsp), %rdi
callq 0x1ba72
leaq 0x248(%rsp), %rdi
callq 0x1ba72
leaq 0x58(%rsp), %rdi
callq 0x1ba72
leaq 0xb0(%rsp), %rdi
callq 0x1ba72
movq 0x90(%rsp), %rdi
leaq 0x90(%rsp), %r14
cmpq %r14, %rdi
je 0x14e8a
movq (%rdi), %rbx
movl $0x20, %esi
callq 0x7390
movq %rbx, %rdi
cmpq %r14, %rbx
jne 0x14e75
movq 0x120(%rsp), %rdi
cmpq %rbp, %rdi
je 0x14eac
movq (%rdi), %rbx
movl $0x20, %esi
callq 0x7390
movq %rbx, %rdi
cmpq %rbp, %rbx
jne 0x14e97
leaq 0xd0(%rsp), %rdi
callq 0x1baaa
leaq 0xf0(%rsp), %rdi
callq 0x1baaa
movl $0x98, %edi
callq 0x7380
movq %rax, 0x1f0(%rsp)
movq %rax, %r14
movq %r13, 0x28(%rsp)
movq %r15, %rdi
leaq 0x2014f(%rip), %rdx     # 0x35039
movq %rdx, %rsi
callq 0xa91c
movq %r14, %rdi
movq %r15, %rsi
callq 0x19fda
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x14f14
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movq %r13, %r12
movq %r14, %rdi
leaq 0x70(%rsp), %rsi
callq 0x99c0
xorps %xmm0, %xmm0
movaps %xmm0, 0x190(%rsp)
xorl %ebx, %ebx
movq %rbx, 0x1a0(%rsp)
movq %rbx, 0x100(%rsp)
movaps %xmm0, 0xf0(%rsp)
movq %rbx, 0xe0(%rsp)
movaps %xmm0, 0xd0(%rsp)
movq %rbx, 0x130(%rsp)
movaps %xmm0, 0x120(%rsp)
movq %rbx, 0xa0(%rsp)
movaps %xmm0, 0x90(%rsp)
movq %rbx, 0xc0(%rsp)
movaps %xmm0, 0xb0(%rsp)
movq %r14, 0x290(%rsp)
movq 0x80(%r14), %r14
movq 0x1f0(%rsp), %rax
leaq 0x70(%rax), %r13
cmpq %r13, %r14
je 0x15140
xorl %ebx, %ebx
movq 0x20(%r14), %rdi
callq 0x7170
cmpq $0x3, %rax
jb 0x1512c
leaq 0x20(%r14), %rsi
leaq 0x190(%rsp), %rdi
callq 0x1a172
movq %r12, 0x28(%rsp)
movq 0x20(%r14), %rsi
movq 0x28(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0xa9b2
movl $0x8, %ecx
movq %r15, %rdi
leaq 0x20251(%rip), %rsi     # 0x3524b
xorl %edx, %edx
callq 0x7680
testq %rax, %rax
je 0x1583a
movl $0xb, %ecx
movq %r15, %rdi
leaq 0x2022f(%rip), %rsi     # 0x35248
xorl %edx, %edx
callq 0x7680
testq %rax, %rax
je 0x150a1
movl $0x3, %ecx
movq %r15, %rdi
leaq 0x200e4(%rip), %rsi     # 0x35118
xorl %edx, %edx
callq 0x7680
testq %rax, %rax
je 0x150c4
movl $0xb, %ecx
movq %r15, %rdi
leaq 0x2020c(%rip), %rsi     # 0x3525f
xorl %edx, %edx
callq 0x7680
testq %rax, %rax
je 0x150ea
movl $0x4, %ecx
movq %r15, %rdi
leaq 0x201c6(%rip), %rsi     # 0x35238
xorl %edx, %edx
callq 0x7680
testq %rax, %rax
jne 0x150dd
movl $0x4, %edx
movq %r15, %rdi
xorl %esi, %esi
leaq 0x1ffaa(%rip), %rcx     # 0x35039
xorl %r8d, %r8d
callq 0x73e0
leaq 0xb0(%rsp), %rdi
jmp 0x1510b
movl $0xb, %edx
movq %r15, %rdi
xorl %esi, %esi
leaq 0x1ff87(%rip), %rcx     # 0x35039
xorl %r8d, %r8d
callq 0x73e0
leaq 0xd0(%rsp), %rdi
jmp 0x1510b
movl $0x3, %edx
movq %r15, %rdi
xorl %esi, %esi
leaq 0x1ff64(%rip), %rcx     # 0x35039
xorl %r8d, %r8d
callq 0x73e0
movq %rbp, %rdi
movq %r15, %rsi
callq 0x1a172
jmp 0x15115
movl $0xb, %edx
movq %r15, %rdi
xorl %esi, %esi
leaq 0x1ff3e(%rip), %rcx     # 0x35039
xorl %r8d, %r8d
callq 0x73e0
leaq 0x90(%rsp), %rdi
movb $0x1, %bl
movq %r15, %rsi
callq 0x1a172
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x1512c
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movq %r14, %rdi
callq 0x7270
movq %rax, %r14
cmpq %r13, %rax
jne 0x14faf
movq 0x1f0(%rsp), %rbp
leaq 0x68(%rbp), %rdi
callq 0x1bc0a
movq 0x290(%rsp), %r14
movq 0x38(%r14), %rdi
leaq 0x48(%rbp), %rax
cmpq %rax, %rdi
je 0x15171
movq (%rax), %rsi
incq %rsi
callq 0x7390
movq (%r14), %rdi
addq $0x10, %rbp
cmpq %rbp, %rdi
movq %r12, %r13
je 0x1518c
movq (%rbp), %rsi
incq %rsi
callq 0x7390
movl $0x98, %esi
movq %r14, %rdi
callq 0x7390
testb $0x1, %bl
je 0x15238
movq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a724
movq %rax, %rbx
movq %rax, %rdi
leaq 0x70(%rsp), %rsi
callq 0x1f550
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x108(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a724
movq %rax, %rbx
movq %r13, 0x28(%rsp)
movq %r15, %rdi
leaq 0x2217c(%rip), %rsi     # 0x37373
leaq 0x22176(%rip), %rdx     # 0x37374
callq 0xa91c
movl $0x30, %edi
callq 0x7380
movq %rax, %rcx
addq $0x20, %rcx
movq %rcx, 0x10(%rax)
movq 0x28(%rsp), %rdx
cmpq %r13, %rdx
je 0x152e9
movq %rdx, 0x10(%rax)
movq 0x38(%rsp), %rcx
movq %rcx, 0x20(%rax)
jmp 0x152f1
movq 0x108(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a724
movq %rax, %rbx
movq %rax, %rdi
leaq 0x70(%rsp), %rsi
callq 0x1f550
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a724
movq %rax, %rbx
movq %r13, 0x28(%rsp)
movq %r15, %rdi
leaq 0x220e6(%rip), %rsi     # 0x37373
leaq 0x220e0(%rip), %rdx     # 0x37374
callq 0xa91c
movl $0x30, %edi
callq 0x7380
movq %rax, %rcx
addq $0x20, %rcx
movq %rcx, 0x10(%rax)
movq 0x28(%rsp), %rdx
cmpq %r13, %rdx
je 0x15454
movq %rdx, 0x10(%rax)
movq 0x38(%rsp), %rcx
movq %rcx, 0x20(%rax)
jmp 0x1545c
movq 0x8(%rsp), %rdx
leaq 0x1fd71(%rip), %rdi     # 0x3504b
movq %rbx, %rsi
xorl %eax, %eax
callq 0x7060
jmp 0x1574f
movups (%r13), %xmm0
movups %xmm0, (%rcx)
movq 0x30(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq %r13, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x15333
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movl $0x0, 0x58(%rsp)
movq 0x110(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a806
movq %rax, %rbx
movl $0x98, %edi
callq 0x7380
movq %rax, %r14
movq %rax, %rdi
leaq 0x70(%rsp), %rsi
callq 0x19fda
movl 0x4(%rsp), %ebp
movl $0x20, %edi
callq 0x7380
movq %r14, 0x10(%rax)
movl %ebp, 0x18(%rax)
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x118(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a806
movq %rax, %r14
movl $0x98, %edi
callq 0x7380
movq %rax, %rbx
movq %r13, 0x28(%rsp)
movq %r15, %rdi
leaq 0x21f9a(%rip), %rsi     # 0x37373
leaq 0x21f94(%rip), %rdx     # 0x37374
callq 0xa91c
movb $0x1, %r13b
movq %rbx, %rdi
movq %r15, %rsi
callq 0x19fda
movl 0x4(%rsp), %ebp
xorl %r13d, %r13d
movl $0x20, %edi
callq 0x7380
movq %rbx, 0x10(%rax)
movl %ebp, 0x18(%rax)
movq %rax, %rdi
movq %r14, %rsi
callq 0x7080
incq 0x10(%r14)
movq 0x28(%rsp), %rdi
movq %r12, %r13
cmpq %r12, %rdi
je 0x15434
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movl 0x58(%rsp), %eax
leal 0x1(%rax), %ecx
movl %ecx, 0x58(%rsp)
testl %eax, %eax
leaq 0x120(%rsp), %rbp
js 0x1533b
jmp 0x155ba
movups (%r13), %xmm0
movups %xmm0, (%rcx)
movq 0x30(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq %r13, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x1549e
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movl $0x0, 0x58(%rsp)
movq 0x118(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a806
movq %rax, %rbx
movl $0x98, %edi
callq 0x7380
movq %rax, %r14
movq %rax, %rdi
leaq 0x70(%rsp), %rsi
callq 0x19fda
movl 0x4(%rsp), %ebp
movl $0x20, %edi
callq 0x7380
movq %r14, 0x10(%rax)
movl %ebp, 0x18(%rax)
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x110(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x1a7a0
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a806
movq %rax, %r14
movl $0x98, %edi
callq 0x7380
movq %rax, %rbx
movq %r13, 0x28(%rsp)
movq %r15, %rdi
leaq 0x21e2f(%rip), %rsi     # 0x37373
leaq 0x21e29(%rip), %rdx     # 0x37374
callq 0xa91c
movb $0x1, %r13b
movq %rbx, %rdi
movq %r15, %rsi
callq 0x19fda
movl 0x4(%rsp), %ebp
xorl %r13d, %r13d
movl $0x20, %edi
callq 0x7380
movq %rbx, 0x10(%rax)
movl %ebp, 0x18(%rax)
movq %rax, %rdi
movq %r14, %rsi
callq 0x7080
incq 0x10(%r14)
movq 0x28(%rsp), %rdi
movq %r12, %r13
cmpq %r12, %rdi
je 0x1559f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movl 0x58(%rsp), %eax
leal 0x1(%rax), %ecx
movl %ecx, 0x58(%rsp)
testl %eax, %eax
leaq 0x120(%rsp), %rbp
js 0x154a6
movq 0x1e8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
movq %rax, %rbx
movq %rax, %rdi
leaq 0x190(%rsp), %rsi
callq 0x2020a
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x1e0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
movq %rax, %rbx
movq %rax, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x2020a
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x1d8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
movq %rax, %rbx
movq %rax, %rdi
movq %rbp, %rsi
callq 0x2020a
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x1d0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
movq %rax, %rbx
movq %rax, %rdi
leaq 0xb0(%rsp), %rsi
callq 0x2020a
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x1c8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
movq %rax, %rbx
movq %rax, %rdi
leaq 0x90(%rsp), %rsi
callq 0x2020a
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
movq 0x1c0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1a882
movq %rax, %rbx
movq %rax, %rdi
leaq 0xd0(%rsp), %rsi
callq 0x2020a
movq %rax, %rdi
movq %rbx, %rsi
callq 0x7080
incq 0x10(%rbx)
cmpl $0x0, 0x4(%rsp)
js 0x15706
movq 0x280(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x202d8
leaq 0xb0(%rsp), %rdi
callq 0x1a6c6
leaq 0x90(%rsp), %rdi
callq 0x1a6c6
movq %rbp, %rdi
callq 0x1a6c6
leaq 0xd0(%rsp), %rdi
callq 0x1a6c6
leaq 0xf0(%rsp), %rdi
callq 0x1a6c6
leaq 0x190(%rsp), %rdi
callq 0x1a6c6
movq 0x298(%rsp), %rax
movq -0x18(%rax), %rax
leaq (%rsp,%rax), %rdi
addq $0x298, %rdi            # imm = 0x298
cmpl $0x0, 0x20(%rdi)
je 0x147dc
jmp 0x14618
cmpl $0x1, %edx
jne 0x159b1
movq %r14, %r13
movq %rax, %r14
movq %rax, %rdi
callq 0x7470
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq %rax, %rsi
callq 0x7160
movq %r14, %rdi
callq 0x7150
movq %rbx, %rdi
callq 0x74d0
movq %r15, %rdi
movq %rax, %rsi
leaq 0xf0(%rsp), %rdx
callq 0x9c98
movq %r15, %rdi
leaq 0x1e986(%rip), %rsi     # 0x34152
callq 0x7100
movl %eax, %ebx
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x157ea
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
movq 0x70(%rsp), %r14
leaq 0x190(%rsp), %rdi
callq 0x74d0
testl %ebx, %ebx
jne 0x158c9
leaq 0x1f6a7(%rip), %rdi     # 0x34eb2
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x7060
leaq 0x190(%rsp), %rdi
callq 0x7738
callq 0x7610
leaq 0x120(%rsp), %rbp
movq %r13, %r14
jmp 0x14f24
movl $0x8, %edi
callq 0x7180
movq %rax, %rbx
movl $0x1, %edi
callq 0x7380
movq %rax, %r14
leaq 0x1f88a(%rip), %rsi     # 0x350e5
movq %rax, %rdi
callq 0xb5c8
movq %r14, (%rbx)
leaq 0x3244b(%rip), %rsi     # 0x47cb8
movq %rbx, %rdi
xorl %edx, %edx
callq 0x7660
leaq 0x20392(%rip), %rdi     # 0x35c10
leaq 0x203c2(%rip), %rsi     # 0x35c47
movq %rax, %rdx
xorl %eax, %eax
callq 0x7530
leaq 0x1f730(%rip), %rdi     # 0x34fc6
callq 0x7560
leaq 0x1f74b(%rip), %rbx     # 0x34fed
jmp 0x158ab
leaq 0x1f766(%rip), %rbx     # 0x35011
movl $0x8, %edi
callq 0x7180
movq %rbx, (%rax)
movq 0x32679(%rip), %rsi     # 0x47f38
movq %rax, %rdi
xorl %edx, %edx
callq 0x7660
leaq 0x1f638(%rip), %rdi     # 0x34f08
movq %r14, %rsi
movq %rax, %rdx
xorl %eax, %eax
callq 0x7060
movl $0x64, %edi
callq 0x7450
jmp 0x159b1
movq %rax, %r15
leaq 0x190(%rsp), %rdi
callq 0x7738
callq 0x7610
jmp 0x15b64
movq %rax, %rdi
callq 0x9cd5
movq %rax, %r15
jmp 0x15b89
movq %rax, %r15
jmp 0x15bae
movq %rax, %r15
jmp 0x15bd0
jmp 0x1597f
jmp 0x15b13
jmp 0x15934
jmp 0x15b13
movq %rax, %r15
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
jne 0x159f9
jmp 0x15b16
movq %rax, %r15
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x15969
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
jmp 0x15969
movq %rax, %r15
movl $0x98, %esi
movq %r14, %rdi
callq 0x7390
jmp 0x15b64
jmp 0x159b1
jmp 0x159b1
movq %rax, %r15
jmp 0x15bec
jmp 0x159e8
movq %rax, %r15
movl $0x1, %esi
movq %r14, %rdi
callq 0x7390
jmp 0x159a5
jmp 0x159b1
jmp 0x15a60
movq %rax, %r15
movq %rbx, %rdi
callq 0x72a0
jmp 0x159eb
jmp 0x159b1
movq %rax, %r15
jmp 0x15b64
jmp 0x15b13
jmp 0x15b13
jmp 0x15b13
jmp 0x15b13
jmp 0x159d6
jmp 0x15b13
jmp 0x159e3
movq %rax, %r15
movl $0x98, %esi
movq %r14, %rdi
jmp 0x15a30
movq %rax, %r15
jmp 0x15a28
movq %rax, %r15
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x15b16
movq 0x38(%rsp), %rsi
incq %rsi
jmp 0x15a30
jmp 0x15a05
movq %rax, %r15
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x15a1f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x7390
testb %r13b, %r13b
je 0x15b16
movl $0x98, %esi
movq %rbx, %rdi
callq 0x7390
jmp 0x15b16
jmp 0x15b13
jmp 0x15b13
movq %rax, %r15
leaq 0x190(%rsp), %rdi
callq 0x1ba5e
leaq 0x28(%rsp), %rdi
callq 0x1ba5e
jmp 0x15a63
movq %rax, %r15
leaq 0x200(%rsp), %rdi
callq 0x1ba72
leaq 0x218(%rsp), %rdi
callq 0x1ba72
leaq 0x230(%rsp), %rdi
callq 0x1ba72
leaq 0x248(%rsp), %rdi
callq 0x1ba72
leaq 0x58(%rsp), %rdi
callq 0x1ba72
leaq 0xb0(%rsp), %rdi
callq 0x1ba72
leaq 0x90(%rsp), %rbx
movq (%rbx), %rdi
cmpq %rbx, %rdi
je 0x15ad3
movq (%rdi), %r14
movl $0x20, %esi
callq 0x7390
movq %r14, %rdi
cmpq %rbx, %r14
jne 0x15abe
movq 0x120(%rsp), %rdi
cmpq %rbp, %rdi
je 0x15af5
movq (%rdi), %rbx
movl $0x20, %esi
callq 0x7390
movq %rbx, %rdi
cmpq %rbp, %rbx
jne 0x15ae0
leaq 0xd0(%rsp), %rdi
callq 0x1baaa
leaq 0xf0(%rsp), %rdi
callq 0x1baaa
jmp 0x15b64
jmp 0x15b13
movq %rax, %r15
leaq 0xb0(%rsp), %rdi
callq 0x1a6c6
leaq 0x90(%rsp), %rdi
callq 0x1a6c6
leaq 0x120(%rsp), %rdi
callq 0x1a6c6
leaq 0xd0(%rsp), %rdi
callq 0x1a6c6
leaq 0xf0(%rsp), %rdi
callq 0x1a6c6
leaq 0x190(%rsp), %rdi
callq 0x1a6c6
leaq 0x270(%rsp), %rax
movq 0x260(%rsp), %rdi
cmpq %rax, %rdi
je 0x15b89
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x7390
leaq 0x180(%rsp), %rax
movq 0x170(%rsp), %rdi
cmpq %rax, %rdi
je 0x15bae
movq 0x180(%rsp), %rsi
incq %rsi
callq 0x7390
leaq 0x80(%rsp), %rax
movq 0x70(%rsp), %rdi
cmpq %rax, %rdi
je 0x15bd0
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x7390
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x15bec
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x7390
leaq 0x150(%rsp), %rax
movq 0x140(%rsp), %rdi
cmpq %rax, %rdi
je 0x15c11
movq 0x150(%rsp), %rsi
incq %rsi
callq 0x7390
leaq 0x298(%rsp), %rdi
callq 0x70d0
movq %r15, %rdi
callq 0x76a0