// File: /workspace/github_cpp_makefile_star2_O1/richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::initFit()
void Swarm::initFit () {  //razi: modified version
	int i, nModels=options.models.size();
	if (resumingSavedSwarm) {
		//razi: TODO modify this part
		cout << "Resuming fitting run. May need some modifcation to support multiple files. Enter a number..." << endl; cin>>i;

		/*
		for (auto particle = particleIterationCounter_.begin(); particle != particleIterationCounter_.end(); ++particle) {
			swarmComm->univMessageSender.push_back(toString(currentGeneration - 1));

			cout<<"Init fit, modify this line ...\n";
			for (unsigned int mid = 0; mid < options.models.size(); ++mid)
				swarmComm->sendToSwarm(0, particle->first, SEND_NUMFLIGHTS_TO_PARTICLE, false, swarmComm->univMessageSender);
			swarmComm->univMessageSender.clear();

			for (auto param = particleCurrParamSets_.at(particle->first).begin(); param != particleCurrParamSets_.at(particle->first).end(); ++param) {
				//cout << "Sending " << *param << " to " << particle->first << endl;
				swarmComm->univMessageSender.push_back(toString(*param));
			}
			swarmComm->sendToSwarm(0, particle->first, SEND_FINAL_PARAMS_TO_PARTICLE, false, swarmComm->univMessageSender);
			swarmComm->univMessageSender.clear();
		}

		// We need to set current generation to the iteration counter because the saved swarm
		// currentGeneration may not be accurate due to it changed between runGeneration() and
		// breedGenerationGA()
		if (options.fitType == "ga") {
			currentGeneration = currentGeneration - 1;
		}

		*/
	}
	else {
		if (options.verbosity >= 3) {
			cout << "Initializing fitting run" << endl;
		}

		// If we are running ODE, we want to generate a network and network reader.
		// The network file has parameters that are replaced in every generation,
		// and the network reader is used to read those network files

		//razi, generate subparticles, set particle id to 1;
		unsigned int ParID = 1; unsigned int subParId;

		Particle p = Particle(this, 1); bool genNetworkFlag = false;
		vector<subParticle *> sp(nModels);
		for (int mid=0; mid <nModels; mid++){
			if (options.models.at(mid)->getHasGenerateNetwork() && bootstrapCounter == 0) {

				genNetworkFlag = true;
				if (options.verbosity >= 3) {
					cout << "Creating dummy .bngl, running to get a .net file" << endl;
				}

				// First create a particle which will generate the network
				// and fill it with dummy params
				p.setModel(options.models[mid], mid);

				subParId= fcalcsubParID(ParID, mid, nModels); //razi: calc subparticle id from model index
				sp[mid] = new subParticle(&p, mid, subParId); //razi: generate subparticles
				//sp[mid]->setModel(mid);

			}
		}
		if (genNetworkFlag){
			p.generateParams();

			// Output model file with dummy parameters. This file will be used to generate
			// our initial network
			//razi, was options.model->outputModelWithParams(p.getParams(), options.jobOutputDir, "base.bngl", "", false, false, false, false, false);
			for (unsigned int mid = 0; mid < options.models.size(); ++mid){
				options.models[mid]->outputModelWithParams(p.getParams(mid), options.jobOutputDir, p.swarm_->getModelName(mid, false)+"_base.bngl", "", false, false, false, false, false);

				// Construct our simulation command and run the network generator

				string modelPath;
				if (options.jobOutputDir.substr(options.jobOutputDir.size()-1,1)=="/")   //razi added to avoid "//" in windows
					modelPath = options.jobOutputDir + p.swarm_->getModelName(mid, false)+"_base.bngl";
				else
					modelPath = options.jobOutputDir + "/" + p.swarm_->getModelName(mid, false)+"_base.bngl";

				string command = options.bngCommand + " --outdir " + options.jobOutputDir + " " + modelPath + " > " + options.jobOutputDir + "netgen_output 2>&1";
				if(options.verbosity>=1){
					cout << "Generating initial .net file with command: " << command << endl;
				}
				if (options.useCluster) {
					if(options.clusterSoftware == "slurm"){
						command = generateSlurmCommand(command, false, 1);
					}

				}

				int ret; ret= runCommand(command);
				if (ret != 0){
#ifdef PC_VER  //This is only for debugging in windows, the return value is 0 due to some error in BNG2.pl, later to be checked
					cout<<"Warning: Net file may not be generated properly: " <<command<<endl;
#else
					outputError("Error(32): Couldn't generate initial .net file with command: " + command + ". Quitting.");
#endif
				}else{
						// Now that we have a .net file, replace the full .bngl with a .bngl
					// containing ONLY action commands and a .net file loader. This is
					// used later to run our .net files.
					options.models[mid]->outputModelWithParams(p.getParams(mid), options.jobOutputDir, p.swarm_->getModelName(mid, false)+"_base.bngl", "", false, true, false, false, false);

					// Now store our .net file for later use
					//razi, was string netPath = options.jobOutputDir + "/base.net";
					string netPath = options.jobOutputDir + "/"  + p.swarm_->getModelName(mid, false)+"_base.net";
					//netPath=removeLastSlash(netPath);  //razi added for windows, already taken care of
					options.models[mid]->parseNet(netPath);
				}
			}
		}


/*
#if(defined(PC_VER))  //This is only for debugging in windows, the return value is 0 due to some error in BNG2.pl, later to be checked
		// random simulation is requested, just copy the exp file plus some noise into gdat files
		if (options.bngCommand.find("random")!=std::string::npos){
			ret=0;

		}
#endif
*/


		vector<double> params;
		int subPar = 0; //Raquel added to support subparticles
		for (unsigned int param = 0; param < getNumFreeParams(); ++param) {  //Razi: All free params tat appear in some models
			params.push_back(0);
		}

		for (int particle = 1; particle <= options.swarmSize; ++particle) {
			particleCurrParamSets_.insert(pair<int, vector<double> >(particle, params));

			//razi: init for each subparticle
			map<unsigned int, vector<double> > zmap;
			for (unsigned int mid = 0; mid < options.models.size(); ++mid){
				vector<double> zvec(options.models[mid]->getNumFreeParams());	//razi: dummy vector t contain free parameter values
				zmap.insert(make_pair(mid, zvec));
			}
			subparticleCurrParamSets_.insert(make_pair(particle, zmap));

		}


		if (options.fitType == "pso") {
			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleParamVelocities_[particle] = params;
				particleBestParamSets_[particle] = params;
				particleWeights_[particle] = 0;
				for (int mid=0; mid<nModels; mid++)
					particleIterationCounter_[particle][mid] = 0;
			}
		}
		if (options.fitType == "pso" || "de") {
			int subPar = 0;

			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleBestFits_[particle] = 0;

				//Raquel: added support for subparticles
				for(int mid = 0; (unsigned) mid < options.models.size(); mid++){
					subPar = fcalcsubParID(particle, mid, options.models.size());
					subparticleBestFits_[subPar] = 0;
				}//Raquel: added support for subparticles

			}
		}
		if(options.fitType == "de") {
			for (unsigned int island = 0; island <= options.numIslands; ++island) {
				islandToParticle_.push_back(vector<unsigned int>(options.swarmSize / options.numIslands,0));
			}
			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleToIsland_.push_back(0);
				particleBestFitsByFit_.insert(pair<double, unsigned int>(0, particle));

				//Raquel added this loop to support subparticles
				for(unsigned int mid = 0; mid < options.models.size(); mid++){
					subPar = fcalcsubParID(particle, mid, options.models.size());
					subparticleBestFitsByFit_.insert(pair<double, unsigned int>(0, subPar));

				}//Raquel added this loop to support subparticles

			}
		}
		if (options.fitType == "sa") {
			for (int particle = 1; particle <= options.swarmSize; ++particle) {
				particleBestFitsByFit_.insert(pair<double, unsigned int>(0, particle));

				//Raquel added this loop to support subparticles
				for(unsigned int mid = 0; mid < options.models.size(); mid++){
					subPar = fcalcsubParID(particle, mid, options.models.size());
					subparticleBestFitsByFit_.insert(pair<double, unsigned int>(0, subPar));
					currentsubparticleBestFitsByFit_.insert(pair<double, unsigned int>(0, subPar));

				}//Raquel added this loop to support subparticles


			}


		}



	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3d8, %rsp            # imm = 0x3D8
cmpb $0x1, 0x13f0(%rdi)
jne 0x7a7f7
movq 0xfb7ed(%rip), %rbx     # 0x175f90
leaq 0x83f9c(%rip), %rsi     # 0xfe746
movl $0x5c, %edx
movq %rbx, %rdi
callq 0x22ab0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %rbx, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0xfb7db(%rip), %rdi     # 0x175fc0
leaq 0x274(%rsp), %rsi
callq 0x225b0
jmp 0x7bfca
movq %rdi, %r14
movq 0x15c8(%rdi), %r15
subq 0x15c0(%rdi), %r15
shrq $0x3, %r15
cmpl $0x3, 0x1614(%rdi)
jb 0x7a857
movq 0xfb774(%rip), %rbx     # 0x175f90
leaq 0x83f80(%rip), %rsi     # 0xfe7a3
movl $0x18, %edx
movq %rbx, %rdi
callq 0x22ab0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %rbx, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
leaq 0x2b8(%rsp), %rdi
movq %r14, %rsi
movl $0x1, %edx
callq 0x53dc8
movslq %r15d, %rsi
leaq 0x258(%rsp), %rdi
leaq 0x68(%rsp), %rdx
callq 0xa7f84
movq %r15, 0xa0(%rsp)
testl %r15d, %r15d
movq %r14, 0x20(%rsp)
jle 0x7b89f
movq 0xa0(%rsp), %rbx
andl $0x7fffffff, %ebx       # imm = 0x7FFFFFFF
xorl %r15d, %r15d
leaq 0x2b8(%rsp), %rbp
xorl %eax, %eax
movq 0x15c0(%r14), %rcx
movq 0x15c8(%r14), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r15, %rdx
jbe 0x7bfdc
movq (%rcx,%r15,8), %rcx
cmpb $0x1, 0xb8(%rcx)
jne 0x7a99d
cmpl $0x0, 0x13ec(%r14)
jne 0x7a99d
cmpl $0x3, 0x1614(%r14)
jb 0x7a943
movl $0x30, %edx
movq 0xfb68b(%rip), %rdi     # 0x175f90
leaq 0x83eb0(%rip), %rsi     # 0xfe7bc
callq 0x22ab0
movq 0xfb678(%rip), %rcx     # 0x175f90
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq 0xfb65a(%rip), %rdi     # 0x175f90
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0x15c0(%r14), %rax
movq (%rax,%r15,8), %rsi
movq %rbp, %rdi
movl %r15d, %edx
callq 0x655c8
movl $0x1, %edi
movl %r15d, %esi
movq 0xa0(%rsp), %rdx
callq 0xbf2a3
movl %eax, %r12d
movl $0x20, %edi
callq 0x22980
movq %rax, %r13
movq %rax, %rdi
movq %rbp, %rsi
movl %r15d, %edx
movl %r12d, %ecx
callq 0x657a2
movq 0x258(%rsp), %rax
movq %r13, (%rax,%r15,8)
movb $0x1, %al
incq %r15
cmpq %r15, %rbx
jne 0x7a8b2
testb $0x1, %al
je 0x7b89f
leaq 0x2b8(%rsp), %rdi
callq 0x5436a
movq 0x15c0(%r14), %rax
cmpq %rax, 0x15c8(%r14)
je 0x7b89f
leaq 0x1520(%r14), %rcx
movq %rcx, 0x100(%rsp)
leaq 0x248(%rsp), %rbx
leaq 0x1730(%r14), %rcx
movq %rcx, 0x110(%rsp)
xorl %edx, %edx
xorl %r15d, %r15d
movq (%rax,%rdx,8), %r12
movq %rdx, 0xd8(%rsp)
leaq (%rdx,%rdx,2), %rbp
shlq $0x4, %rbp
movq 0x2b8(%rsp), %rsi
addq %rbp, %rsi
leaq 0x3a8(%rsp), %rdi
callq 0x51a66
leaq 0x1c8(%rsp), %rax
movq %rax, 0x1b8(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x1b8(%rsp), %rdi
callq 0x32180
movq 0x360(%rsp), %rsi
leaq 0x68(%rsp), %r13
movq %r13, %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x7a62c
movq %r13, %rdi
leaq 0x83d72(%rip), %rsi     # 0xfe7ed
callq 0x233b0
leaq 0x188(%rsp), %rsi
movq %rsi, 0x178(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7aab4
movq %rdx, 0x178(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x188(%rsp)
jmp 0x7aaba
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x180(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rbx, 0x238(%rsp)
leaq 0x238(%rsp), %r13
movq %r13, %rdi
leaq 0x7c1d2(%rip), %rdx     # 0xf6cc1
movq %rdx, %rsi
callq 0x32210
movq %r12, %rdi
leaq 0x3a8(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
leaq 0x178(%rsp), %rcx
movq %r13, %r8
xorl %r9d, %r9d
xorl %eax, %eax
pushq %rax
pushq %rax
pushq %rax
pushq %rax
callq 0x4eede
addq $0x20, %rsp
movq 0x238(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7ab44
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x7ab69
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7ab85
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1b8(%rsp), %rdi
leaq 0x1c8(%rsp), %rax
cmpq %rax, %rdi
je 0x7abaa
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x3a8(%rsp), %rdi
callq 0x4a694
leaq 0x78(%rsp), %rax
movq %rax, 0x68(%rsp)
movq $0x0, 0x70(%rsp)
movb $0x0, 0x78(%rsp)
movq 0x1528(%r14), %rdx
decq %rdx
movl $0x1, %ecx
leaq 0xa8(%rsp), %rbx
movq %rbx, %rdi
movq 0x100(%rsp), %rsi
callq 0x22a00
movq %rbx, %rdi
leaq 0x84be7(%rip), %rsi     # 0xff7e7
callq 0x22250
movl %eax, %ebx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x7ac2c
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
testl %ebx, %ebx
je 0x7acda
leaq 0x38(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
callq 0x32180
movq %rbx, %rdi
leaq 0x84b81(%rip), %rsi     # 0xff7e7
callq 0x233b0
movq 0x360(%rsp), %rsi
leaq 0x48(%rsp), %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x7a62c
movq 0x28(%rsp), %rcx
movl $0xf, %esi
leaq 0x38(%rsp), %rax
cmpq %rax, %rcx
je 0x7ac9b
movq 0x38(%rsp), %rsi
movq 0x30(%rsp), %r8
movq 0x50(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x7acc9
movl $0xf, %esi
leaq 0x58(%rsp), %rdi
cmpq %rdi, 0x48(%rsp)
je 0x7acc4
movq 0x58(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x7ad3b
movq 0x48(%rsp), %rsi
leaq 0x28(%rsp), %rdi
callq 0x222b0
jmp 0x7ad49
movq 0x360(%rsp), %rsi
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x7a62c
movq 0x1520(%r14), %rcx
movq 0x1528(%r14), %r8
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7ae5a
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7ae60
leaq 0x48(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x7ad6c
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7ad72
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq %rsp, %rdi
leaq 0x83a54(%rip), %rsi     # 0xfe7ed
callq 0x233b0
leaq 0xb8(%rsp), %rbx
movq %rbx, 0xa8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x68(%rsp), %rdi
je 0x7add7
movq %rdx, 0xa8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb8(%rsp)
jmp 0x7addd
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0xb0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rsi
callq 0x22bb0
movq 0xa8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7ae22
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7ae3d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7af26
movq 0x58(%rsp), %rsi
jmp 0x7af1e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rsp, %rdi
leaq 0x8396b(%rip), %rsi     # 0xfe7ed
callq 0x233b0
leaq 0xb8(%rsp), %rbx
movq %rbx, 0xa8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x68(%rsp), %rdi
je 0x7aec0
movq %rdx, 0xa8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb8(%rsp)
jmp 0x7aec6
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0xb0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xa8(%rsp), %rsi
callq 0x22bb0
movq 0xa8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7af0b
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7af26
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7af42
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x148(%rsp), %rax
movq %rax, 0x138(%rsp)
movq 0x1540(%r14), %rsi
movq 0x1548(%r14), %rdx
addq %rsi, %rdx
leaq 0x138(%rsp), %rbx
movq %rbx, %rdi
callq 0x32180
movq %rbx, %rdi
leaq 0x7dc63(%rip), %rsi     # 0xf8be0
callq 0x233b0
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
movq %rbx, %rdi
callq 0x222b0
leaq 0x168(%rsp), %rsi
movq %rsi, 0x158(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x218(%rsp), %rbx
je 0x7afd4
movq %rdx, 0x158(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x168(%rsp)
jmp 0x7afda
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x160(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x158(%rsp), %rdi
leaq 0x86439(%rip), %rsi     # 0x10143d
callq 0x233b0
leaq 0xf0(%rsp), %rsi
movq %rsi, 0xe0(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b03d
movq %rdx, 0xe0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xf0(%rsp)
jmp 0x7b043
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xe8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x68(%rsp), %rsi
movq 0x70(%rsp), %rdx
leaq 0xe0(%rsp), %rdi
callq 0x222b0
leaq 0x58(%rsp), %rsi
movq %rsi, 0x48(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b09d
movq %rdx, 0x48(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x58(%rsp)
jmp 0x7b0a3
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x50(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x48(%rsp), %rdi
leaq 0x83731(%rip), %rsi     # 0xfe7f8
callq 0x233b0
leaq 0x38(%rsp), %rsi
movq %rsi, 0x28(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b0f4
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x7b0fa
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x30(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
leaq 0x28(%rsp), %rdi
callq 0x222b0
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b150
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7b156
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %rsp, %rdi
leaq 0x83684(%rip), %rsi     # 0xfe7fc
callq 0x233b0
leaq 0xb8(%rsp), %rsi
movq %rsi, 0xa8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b1b1
movq %rdx, 0xa8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xb8(%rsp)
jmp 0x7b1b7
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xb0(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7b1ed
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7b209
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7b225
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe0(%rsp), %rdi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rdi
je 0x7b24a
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x7b26f
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
je 0x7b294
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x229c0
cmpl $0x0, 0x1614(%r14)
je 0x7b2fc
movl $0x2b, %edx
movq 0xface6(%rip), %rdi     # 0x175f90
leaq 0x8355e(%rip), %rsi     # 0xfe80f
callq 0x22ab0
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq 0xfacc3(%rip), %rdi     # 0x175f90
callq 0x22ab0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r12, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
cmpb $0x1, 0x1631(%r14)
jne 0x7b3ba
movq 0x110(%rsp), %rdi
leaq 0x770a6(%rip), %rsi     # 0xf23bf
callq 0x22250
testl %eax, %eax
jne 0x7b3ba
leaq 0x228(%rsp), %rax
movq %rax, 0x218(%rsp)
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0x32180
movq %rbx, %rdx
movq %rsp, %rbx
movq %rbx, %rdi
movq %r14, %rsi
xorl %ecx, %ecx
movl $0x1, %r8d
callq 0x7c618
leaq 0xa8(%rsp), %rdi
movq %rbx, %rsi
callq 0x22bb0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7b395
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x218(%rsp), %rdi
leaq 0x228(%rsp), %rax
cmpq %rax, %rdi
je 0x7b3ba
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x208(%rsp), %rax
movq %rax, 0x1f8(%rsp)
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1f8(%rsp), %rbx
movq %rbx, %rdi
callq 0x32180
movq %rbx, %rdi
callq 0xc038e
movl %eax, %r12d
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x7b41d
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x229c0
testl %r12d, %r12d
jne 0x7bfed
movq 0x15c0(%r14), %rax
movq 0xd8(%rsp), %rcx
movq (%rax,%rcx,8), %r12
addq 0x2b8(%rsp), %rbp
leaq 0x378(%rsp), %rdi
movq %rbp, %rsi
callq 0x51a66
leaq 0x1a8(%rsp), %rax
movq %rax, 0x198(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x198(%rsp), %rdi
callq 0x32180
movq 0x360(%rsp), %rsi
movq %rsp, %rbx
movq %rbx, %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x7a62c
movq %rbx, %rdi
leaq 0x8334c(%rip), %rsi     # 0xfe7ed
callq 0x233b0
leaq 0x128(%rsp), %rsi
movq %rsi, 0x118(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b4da
movq %rdx, 0x118(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x128(%rsp)
jmp 0x7b4e0
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x120(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1e8(%rsp), %rax
movq %rax, 0x1d8(%rsp)
leaq 0x1d8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x7b7a4(%rip), %rdx     # 0xf6cc1
movq %rdx, %rsi
callq 0x32210
movq %r12, %rdi
leaq 0x378(%rsp), %rsi
leaq 0x198(%rsp), %rdx
leaq 0x118(%rsp), %rcx
movq %rbx, %r8
xorl %r9d, %r9d
xorl %eax, %eax
pushq %rax
pushq %rax
pushq %rax
pushq $0x1
callq 0x4eede
addq $0x20, %rsp
movq 0x1d8(%rsp), %rdi
leaq 0x1e8(%rsp), %rax
cmpq %rax, %rdi
je 0x7b57b
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x7b5a0
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7b5bb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x7b5e0
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x378(%rsp), %rdi
callq 0x4a694
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x1520(%r14), %rsi
movq 0x1528(%r14), %rdx
addq %rsi, %rdx
leaq 0x48(%rsp), %rbx
movq %rbx, %rdi
callq 0x32180
movq %rbx, %rdi
leaq 0x841c8(%rip), %rsi     # 0xff7e7
callq 0x233b0
movq 0x360(%rsp), %rsi
leaq 0xe0(%rsp), %rdi
movl %r15d, %edx
xorl %ecx, %ecx
callq 0x7a62c
movq 0x48(%rsp), %rcx
movl $0xf, %esi
leaq 0x58(%rsp), %rax
cmpq %rax, %rcx
je 0x7b657
movq 0x58(%rsp), %rsi
movq 0x50(%rsp), %r8
movq 0xe8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x7b691
movl $0xf, %esi
leaq 0xf0(%rsp), %rdi
cmpq %rdi, 0xe0(%rsp)
je 0x7b68c
movq 0xf0(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x7b6a5
movq 0xe0(%rsp), %rsi
leaq 0x48(%rsp), %rdi
callq 0x222b0
jmp 0x7b6b6
leaq 0xe0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x22a80
leaq 0x38(%rsp), %rsi
movq %rsi, 0x28(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x7b6db
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x7b6e1
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x30(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x28(%rsp), %rdi
leaq 0x7d336(%rip), %rsi     # 0xf8a40
callq 0x233b0
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7b735
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x7b73b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7b76f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe0(%rsp), %rdi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rdi
je 0x7b794
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7b7b0
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x15c0(%r14), %rax
movq 0xd8(%rsp), %rcx
movq (%rax,%rcx,8), %r12
leaq 0x288(%rsp), %r13
movq %r13, 0x278(%rsp)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x278(%rsp), %rbx
movq %rbx, %rdi
callq 0x32180
movq %r12, %rdi
movq %rbx, %rsi
leaq 0x10(%rsp), %rbx
callq 0x4ec0e
movq 0x278(%rsp), %rdi
cmpq %r13, %rdi
je 0x7b81c
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
cmpq %rbx, %rdi
je 0x7b832
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
leaq 0x248(%rsp), %rbx
je 0x7b85f
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7b87b
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x229c0
incl %r15d
movq 0x15c0(%r14), %rax
movq 0x15c8(%r14), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
movq %r15, %rdx
cmpq %r15, %rcx
ja 0x7a9fd
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
cmpl $0x0, 0x15b8(%r14)
je 0x7b900
xorl %ebx, %ebx
movq %rsp, %r15
leaq 0x68(%rsp), %r12
movq $0x0, 0x68(%rsp)
movq 0x8(%rsp), %rsi
cmpq 0x10(%rsp), %rsi
je 0x7b8ea
movq $0x0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rsp)
jmp 0x7b8f5
movq %r15, %rdi
movq %r12, %rdx
callq 0x68326
incl %ebx
cmpl 0x15b8(%r14), %ebx
jb 0x7b8c3
cmpl $0x0, 0x1620(%r14)
jle 0x7ba99
leaq 0x1400(%r14), %rax
movq %rax, 0xd8(%rsp)
leaq 0x70(%rsp), %rbp
leaq 0x1460(%r14), %rax
movq %rax, 0x100(%rsp)
movl $0x1, %ebx
leaq 0x68(%rsp), %r15
leaq 0xa8(%rsp), %r13
leaq 0x28(%rsp), %r12
movl %ebx, 0x68(%rsp)
leaq 0x70(%rsp), %rdi
movq %rsp, %rsi
callq 0x66228
movq 0xd8(%rsp), %rdi
movq %r15, %rsi
callq 0xaecb2
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7b983
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movl $0x0, 0xb0(%rsp)
xorl %ecx, %ecx
movq %rcx, 0xb8(%rsp)
leaq 0xb0(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq %rax, 0xc8(%rsp)
movq %rcx, 0xd0(%rsp)
movq 0x15c0(%r14), %rax
cmpq %rax, 0x15c8(%r14)
je 0x7ba4f
xorl %r14d, %r14d
movq (%rax,%r14,8), %rax
movl 0x58(%rax), %esi
movq %r12, %rdi
movq %r15, %rdx
callq 0xa800e
movl %r14d, 0x68(%rsp)
movq %rbp, %rdi
movq %r12, %rsi
callq 0x66228
movq %r13, %rdi
movq %r15, %rsi
callq 0xaed6a
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7ba16
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x7ba2d
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
incl %r14d
movq 0x20(%rsp), %rcx
movq 0x15c0(%rcx), %rax
movq 0x15c8(%rcx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r14, %rcx
ja 0x7b9cf
movl %ebx, 0x68(%rsp)
leaq 0x70(%rsp), %rdi
movq %r13, %rsi
callq 0xacf48
movq 0x100(%rsp), %rdi
movq %r15, %rsi
callq 0xaee22
movq 0x20(%rsp), %r14
leaq 0x70(%rsp), %rdi
callq 0x72c1c
movq %r13, %rdi
callq 0x72c1c
leal 0x1(%rbx), %eax
cmpl 0x1620(%r14), %ebx
movl %eax, %ebx
jl 0x7b948
leaq 0x14e0(%r14), %rdi
leaq 0x8345b(%rip), %rsi     # 0xfef02
movq %rdi, 0x108(%rsp)
callq 0x22250
testl %eax, %eax
jne 0x7bbc5
cmpl $0x0, 0x1620(%r14)
jle 0x7bbc5
leaq 0x1c90(%r14), %rax
movq %rax, 0xd8(%rsp)
leaq 0x1cc0(%r14), %rax
movq %rax, 0x100(%rsp)
leaq 0x1cf0(%r14), %rax
movq %rax, 0x110(%rsp)
leaq 0x1950(%r14), %r15
movl $0x1, %ebx
leaq 0x68(%rsp), %r12
movq %rsp, %r13
leaq 0xa8(%rsp), %rbp
movl %ebx, 0x68(%rsp)
movq 0xd8(%rsp), %rdi
movq %r12, %rsi
callq 0x6f1a2
movq %rax, %rdi
movq %r13, %rsi
callq 0xa8098
movl %ebx, 0x68(%rsp)
movq 0x100(%rsp), %rdi
movq %r12, %rsi
callq 0x6f1a2
movq %rax, %rdi
movq %r13, %rsi
callq 0xa8098
movl %ebx, 0x68(%rsp)
movq 0x110(%rsp), %rdi
movq %r12, %rsi
callq 0xa816e
movq $0x0, (%rax)
cmpl $0x0, 0xa0(%rsp)
jle 0x7bbae
xorl %r14d, %r14d
movl %ebx, 0x68(%rsp)
movq %r15, %rdi
movq %r12, %rsi
callq 0xa81d2
movl %r14d, 0xa8(%rsp)
movq %rax, %rdi
movq %rbp, %rsi
callq 0xa8236
movl $0x0, (%rax)
incl %r14d
cmpl %r14d, 0xa0(%rsp)
jne 0x7bb79
leal 0x1(%rbx), %eax
movq 0x20(%rsp), %r14
cmpl 0x1620(%r14), %ebx
movl %eax, %ebx
jl 0x7bb13
leaq 0x83336(%rip), %rsi     # 0xfef02
movq 0x108(%rsp), %rdi
callq 0x22250
cmpl $0x0, 0x1620(%r14)
jle 0x7bc8f
movq 0x20(%rsp), %rax
leaq 0x1a20(%rax), %r14
leaq 0x1a50(%rax), %r15
movl $0x1, %r13d
leaq 0x68(%rsp), %r12
movl %r13d, 0x68(%rsp)
movq %r14, %rdi
movq %r12, %rsi
callq 0xa816e
movq $0x0, (%rax)
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
je 0x7bc76
sarq $0x3, %rdx
xorl %ebp, %ebp
movl %r13d, %edi
movl %ebp, %esi
callq 0xbf2a3
movl %eax, 0x68(%rsp)
movq %r15, %rdi
movq %r12, %rsi
callq 0xa816e
movq $0x0, (%rax)
incq %rbp
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
sarq $0x3, %rdx
cmpq %rbp, %rdx
ja 0x7bc37
leal 0x1(%r13), %eax
movq 0x20(%rsp), %rcx
cmpl 0x1620(%rcx), %r13d
movl %eax, %r13d
jl 0x7bc05
leaq 0xb2285(%rip), %rsi     # 0x12df1b
movq 0x108(%rsp), %rdi
callq 0x22250
testl %eax, %eax
movq 0x20(%rsp), %rbx
jne 0x7be25
movl 0x16fc(%rbx), %ecx
movq %rbx, %rax
leaq 0x1d38(%rbx), %r14
xorl %ebx, %ebx
leaq 0x68(%rsp), %r15
leaq 0xa8(%rsp), %r12
leaq 0x28(%rsp), %r13
movl 0x1620(%rax), %eax
xorl %edx, %edx
divl %ecx
movl $0x0, 0xa8(%rsp)
movq %r15, %rdi
movq %rax, %rsi
movq %r12, %rdx
movq %r13, %rcx
callq 0xa829a
movq %r14, %rdi
movq %r15, %rsi
callq 0xaf480
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x7bd1c
movq 0x78(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
incl %ebx
movq 0x20(%rsp), %rax
movl 0x16fc(%rax), %ecx
cmpl %ecx, %ebx
jbe 0x7bcd4
cmpl $0x0, 0x1620(%rax)
movq %rax, %rbx
jle 0x7be25
leaq 0x1d20(%rbx), %rax
movq %rax, 0xa0(%rsp)
leaq 0x1ab0(%rbx), %r15
leaq 0x1b10(%rbx), %r12
movl $0x1, %ebp
leaq 0x68(%rsp), %r13
movl $0x0, 0x68(%rsp)
movq 0x1d28(%rbx), %rsi
cmpq 0x1d30(%rbx), %rsi
je 0x7bd8f
movl $0x0, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x1d28(%rbx)
jmp 0x7bd9f
movq 0xa0(%rsp), %rdi
movq %r13, %rdx
callq 0xaf698
movq $0x0, 0x68(%rsp)
movl %ebp, 0x70(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0xaf774
movq 0x15c8(%rbx), %rdx
subq 0x15c0(%rbx), %rdx
je 0x7be0f
sarq $0x3, %rdx
xorl %r14d, %r14d
movl %ebp, %edi
movl %r14d, %esi
callq 0xbf2a3
movq $0x0, 0x68(%rsp)
movl %eax, 0x70(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0xaf774
incl %r14d
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0x7bdce
leal 0x1(%rbp), %eax
movq 0x20(%rsp), %rbx
cmpl 0x1620(%rbx), %ebp
movl %eax, %ebp
jl 0x7bd64
leaq 0x76180(%rip), %rsi     # 0xf1fac
movq 0x108(%rsp), %rdi
callq 0x22250
testl %eax, %eax
jne 0x7bf1a
cmpl $0x0, 0x1620(%rbx)
jle 0x7bf1a
leaq 0x1ab0(%rbx), %rax
movq %rax, 0xa0(%rsp)
leaq 0x1b10(%rbx), %r15
leaq 0x1b70(%rbx), %r12
movl $0x1, %ebp
leaq 0x68(%rsp), %r13
movq $0x0, 0x68(%rsp)
movl %ebp, 0x70(%rsp)
movq 0xa0(%rsp), %rdi
movq %r13, %rsi
callq 0xaf774
movq 0x15c8(%rbx), %rdx
subq 0x15c0(%rbx), %rdx
je 0x7bf04
sarq $0x3, %rdx
xorl %r14d, %r14d
movl %ebp, %edi
movl %r14d, %esi
callq 0xbf2a3
movl %eax, %ebx
movq $0x0, 0x68(%rsp)
movl %eax, 0x70(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0xaf774
movq $0x0, 0x68(%rsp)
movl %ebx, 0x70(%rsp)
movq %r12, %rdi
movq %r13, %rsi
callq 0xaf774
incl %r14d
movq 0x20(%rsp), %rax
movq 0x15c8(%rax), %rdx
subq 0x15c0(%rax), %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0x7bea9
leal 0x1(%rbp), %eax
movq 0x20(%rsp), %rbx
cmpl 0x1620(%rbx), %ebp
movl %eax, %ebp
jl 0x7be75
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x7bf30
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf4d
movq 0x268(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0x348(%rsp), %rbx
movq %rbx, %rdi
callq 0x660e8
movq -0x18(%rbx), %rdi
testq %rdi, %rdi
je 0x7bf76
movq 0x340(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x318(%rsp), %rdi
testq %rdi, %rdi
je 0x7bf93
movq 0x328(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x300(%rsp), %rdi
testq %rdi, %rdi
je 0x7bfb0
movq 0x310(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0x2d0(%rsp), %rdi
callq 0x6612a
leaq 0x2b8(%rsp), %rdi
callq 0x6616c
addq $0x3d8, %rsp            # imm = 0x3D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x776e2(%rip), %rdi     # 0xf36c5
movq %r15, %rsi
xorl %eax, %eax
callq 0x22f40
leaq 0x82847(%rip), %rsi     # 0xfe83b
movq %rsp, %rdi
leaq 0xa8(%rsp), %rdx
callq 0x319d8
leaq 0x859c7(%rip), %rsi     # 0x1019d2
movq %rsp, %rdi
callq 0x233b0
leaq 0x2a8(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0x7c037
movups (%rcx), %xmm0
movups %xmm0, (%r14)
jmp 0x7c04a
movq %rdx, 0x298(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2a8(%rsp)
movq 0x8(%rax), %rdx
leaq 0x298(%rsp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x78b66
jmp 0x7c56a
movq %rax, %rbx
jmp 0x7c602
movq %rax, %rbx
movq 0x218(%rsp), %rdi
leaq 0x228(%rsp), %rax
cmpq %rax, %rdi
je 0x7c4eb
movq 0x228(%rsp), %rsi
jmp 0x7c358
jmp 0x7c4e8
movq %rax, %rbx
movq 0x298(%rsp), %rdi
cmpq %r14, %rdi
je 0x7c341
movq 0x2a8(%rsp), %rsi
jmp 0x7c339
jmp 0x7c31c
jmp 0x7c4a0
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7c148
movq 0x10(%rsp), %rsi
jmp 0x7c136
jmp 0x7c145
jmp 0x7c57f
jmp 0x7c4e8
jmp 0x7c145
movq %rax, %rbx
jmp 0x7c122
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7c122
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7c148
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x7c148
jmp 0x7c4a0
movq %rax, %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7c510
movq 0x38(%rsp), %rsi
jmp 0x7c508
movq %rax, %rbx
jmp 0x7c1a9
movq %rax, %rbx
jmp 0x7c18d
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7c18d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7c1a9
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7c379
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x7c379
movq %rax, %rbx
movq 0x1f8(%rsp), %rdi
leaq 0x208(%rsp), %rax
cmpq %rax, %rdi
je 0x7c4eb
movq 0x208(%rsp), %rsi
jmp 0x7c358
movq %rax, %rbx
jmp 0x7c29b
movq %rax, %rbx
jmp 0x7c276
movq %rax, %rbx
jmp 0x7c25b
movq %rax, %rbx
jmp 0x7c236
movq %rax, %rbx
movq 0x1d8(%rsp), %rdi
leaq 0x1e8(%rsp), %rax
cmpq %rax, %rdi
je 0x7c236
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x7c25b
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7c276
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x7c29b
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x378(%rsp), %rdi
callq 0x4a694
jmp 0x7c4eb
jmp 0x7c4e8
jmp 0x7c2b4
movq %rax, %rbx
jmp 0x7c302
movq %rax, %rbx
jmp 0x7c2dd
movq %rax, %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x7c2dd
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0xe0(%rsp), %rdi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rdi
je 0x7c302
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x7c4eb
movq 0x58(%rsp), %rsi
jmp 0x7c358
movq %rax, %rbx
jmp 0x7c341
movq %rax, %rbx
movq 0x278(%rsp), %rdi
cmpq %r13, %rdi
je 0x7c341
movq 0x288(%rsp), %rsi
incq %rsi
callq 0x229c0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7c4eb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x7c4eb
jmp 0x7c4a0
jmp 0x7c36c
movq %rax, %rbx
jmp 0x7c3c3
movq %rax, %rbx
jmp 0x7c39e
movq %rax, %rbx
movq 0xe0(%rsp), %rdi
leaq 0xf0(%rsp), %rax
cmpq %rax, %rdi
je 0x7c39e
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x158(%rsp), %rdi
leaq 0x168(%rsp), %rax
cmpq %rax, %rdi
je 0x7c3c3
movq 0x168(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
je 0x7c510
movq 0x148(%rsp), %rsi
jmp 0x7c508
jmp 0x7c56a
movq %rax, %rbx
jmp 0x7c48e
movq %rax, %rbx
jmp 0x7c469
movq %rax, %rbx
jmp 0x7c44d
movq %rax, %rbx
jmp 0x7c428
movq %rbx, %rcx
movq %rax, %rbx
movq 0x238(%rsp), %rdi
cmpq %rcx, %rdi
je 0x7c428
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x178(%rsp), %rdi
leaq 0x188(%rsp), %rax
cmpq %rax, %rdi
je 0x7c44d
movq 0x188(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7c469
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x1b8(%rsp), %rdi
leaq 0x1c8(%rsp), %rax
cmpq %rax, %rdi
je 0x7c48e
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x3a8(%rsp), %rdi
callq 0x4a694
jmp 0x7c5e5
movq %rax, %rbx
jmp 0x7c510
jmp 0x7c57f
jmp 0x7c57f
movq %rax, %rbx
movl $0x20, %esi
movq %r13, %rdi
jmp 0x7c5e0
jmp 0x7c57f
movq %rax, %rbx
movq 0x68(%rsp), %rdi
testq %rdi, %rdi
je 0x7c5cf
movq 0x78(%rsp), %rsi
jmp 0x7c55a
jmp 0x7c4e8
jmp 0x7c57f
jmp 0x7c57f
movq %rax, %rbx
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x7c510
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x68(%rsp), %rdi
leaq 0x78(%rsp), %rax
cmpq %rax, %rdi
je 0x7c5e5
movq 0x78(%rsp), %rsi
incq %rsi
jmp 0x7c5e0
jmp 0x7c57f
jmp 0x7c589
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x72c1c
jmp 0x7c5c2
jmp 0x7c57f
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7c5cf
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
jmp 0x7c5cf
jmp 0x7c56a
jmp 0x7c57f
jmp 0x7c57f
movq %rax, %rbx
jmp 0x7c5e5
jmp 0x7c57f
jmp 0x7c57f
jmp 0x7c57f
jmp 0x7c57f
jmp 0x7c57f
jmp 0x7c57f
jmp 0x7c57f
jmp 0x7c57f
movq %rax, %rbx
jmp 0x7c5cf
movq %rax, %rbx
jmp 0x7c5ab
movq %rax, %rbx
jmp 0x7c5c2
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x7c5ab
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x28(%rsp), %rdi
testq %rdi, %rdi
je 0x7c5c2
movq 0x38(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0xa8(%rsp), %rdi
callq 0x72c1c
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x7c5e5
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
movq 0x258(%rsp), %rdi
testq %rdi, %rdi
je 0x7c602
movq 0x268(%rsp), %rsi
subq %rdi, %rsi
callq 0x229c0
leaq 0x2b8(%rsp), %rdi
callq 0xa8318
movq %rbx, %rdi
callq 0x23240
nop