// File: richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::mutateParticleDE(unsigned int, float)
vector<double> Swarm::mutateParticleDE(unsigned int particle, float mutateFactor) {

	if (options.verbosity >= 3) {
		cout << "Mutating particle " << particle << endl;
	}

	int parID = 0;
	vector<double> mutatedParams;
	unsigned int currIsland = 0;
	unsigned int particlesPerIsland = 0;

	if (options.fitType == "de") {
		currIsland = particleToIsland_[particle]; //Raquel changed, was .at(particle)
		particlesPerIsland = options.swarmSize / options.numIslands;
	}

	// f between 0.1 and 0.9
	//float f = 0.1 + static_cast <float> (rand()) /( static_cast <float> (RAND_MAX/(0.9-0.1)));
	float f;
	if (mutateFactor) {
		f = mutateFactor;
	}
	else {
		f = 0.9;
	}

	boost::random::uniform_int_distribution<int> unif(0, particlesPerIsland - 1);
	if(options.verbosity>=3){
		cout << "done setting uniform_int_distribution" << endl;
	}
	//Raquel: adding support to use constraints when selecting the best particles in DE
	if (options.mutateType == 1) {
		int bestParticle = 0;

		if(options.constraints_.size()>0){//If the user provided any constraint
			//use the combined rank between fit values and constraint values to select the best particle
			//The ranks are sorted from the best fit to the worst fit values, so the loop will stop at the first particle that it finds, with the best fit as possible per iland
			for (auto fitVal = subParRankFinal.begin(); fitVal != subParRankFinal.end(); ++fitVal) {
				//cout << "Raquel setting particle to island value" << endl;

				parID = fcalcParID(fitVal->first, options.models.size());

				if (fitVal->second > 0 && particleToIsland_[parID] == currIsland) {
					//cout << "Raquel setting particle to island value done" << endl;

					bestParticle = fitVal->second;
					//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
					break;
				}

			}


		}else{

			for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
				if(options.verbosity>=4){
					cout << "Raquel setting particle to island value" << endl;
				}
				if (fitVal->first > 0 && particleToIsland_[fitVal->second] == currIsland) {
					if(options.verbosity>=4){
						cout << "Raquel setting particle to island value done" << endl;
					}
					bestParticle = fitVal->second;
					if(options.verbosity>=4){
						cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
					}
					break;
				}

			}


		}



		vector<double> bestParamSet = particleCurrParamSets_.at(bestParticle);
		unsigned int pi = 0;
		for (auto param = this->getFreeParams_().begin(); param != this->getFreeParams_().end(); ++param) { //for (auto param = options.model->getFreeParams_().begin(); param != options.model->getFreeParams_().end(); ++param) {
			int p1 = 0;
			int p2 = 0;

			while (p1 == p2) {
				p1 = unif(generalRand);
				p2 = unif(generalRand);
			}

			double p1Param = particleCurrParamSets_.at(islandToParticle_.at(currIsland)[p1])[pi];
			double p2Param = particleCurrParamSets_.at(islandToParticle_.at(currIsland)[p2])[pi];

			mutatedParams.push_back(bestParamSet[pi] + f * (p1Param - p2Param));
			++pi;
		}
	}
	else if (options.mutateType == 2) {
		unsigned int pi = 0;
		int bestParticle = 0;
		//for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
		//	if (fitVal->first > 0 && particleToIsland_.at(fitVal->second) == currIsland) {
		//		bestParticle = fitVal->second;
		//	}
		//}
		if(options.constraints_.size()>0){//If the user provided any constraint
					//use the combined rank between fit values and constraint values to select the best particle
					//mutate type 2 will take the worst particle for the current island and mutate it
					for (auto fitVal = subParRankFinal.begin(); fitVal != subParRankFinal.end(); ++fitVal) {
						if(options.verbosity>=4){
							cout << "Raquel setting particle to island value" << endl;
						}
						parID = fcalcParID(fitVal->first, options.models.size());

						if (fitVal->second > 0 && particleToIsland_.at(parID) == currIsland) {
							if(options.verbosity>=4){
								cout << "Raquel setting particle to island value done" << endl;
							}
							bestParticle = fitVal->second;
							//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
							//break;
						}

					}


				}else{


					for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
						//cout << "Raquel setting particle to island value" << endl;
						if (fitVal->first > 0 && particleToIsland_[fitVal->second] == currIsland) {
							//cout << "Raquel setting particle to island value done" << endl;

							bestParticle = fitVal->second;
							//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
							//break;
						}

					}


				}


		vector<double> bestParamSet = particleCurrParamSets_[bestParticle];
		for (auto param = this->getFreeParams_().begin(); param != this->getFreeParams_().end(); ++param) {//for (auto param = options.model->getFreeParams_().begin(); param != options.model->getFreeParams_().end(); ++param) {
			int p1 = 0;
			int p2 = 0;
			int p3 = 0;
			int p4 = 0;
			while (p1 == p2 || p1 == p3 || p1 == p4 || p2 == p3 || p2 == p4 || p3 == p4) {
				p1 = unif(generalRand);
				p2 = unif(generalRand);
				p3 = unif(generalRand);
				p4 = unif(generalRand);
			}

			double p1Param = particleCurrParamSets_[islandToParticle_[currIsland][p1]][pi];
			double p2Param = particleCurrParamSets_[islandToParticle_[currIsland][p2]][pi];
			double p3Param = particleCurrParamSets_[islandToParticle_[currIsland][p3]][pi];
			double p4Param = particleCurrParamSets_[islandToParticle_[currIsland][p4]][pi];

			mutatedParams.push_back(bestParamSet[pi] + f * (p1Param - p2Param) + f * (p3Param - p4Param));
			++pi;
		}
	}
	else if (options.mutateType == 3) {
		unsigned int pi = 0;
		int bestParticle = 0;
		//for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
		//	if (fitVal->first > 0 && particleToIsland_.at(fitVal->second) == currIsland) {
		//		bestParticle = fitVal->second;
		//	}
		//}

		if(options.constraints_.size()>0){//If the user provided any constraint
					//use the combined rank between fit values and constraint values to select the best particle
					//mutate type 3 will take the worst particle for the current island and mutate it
					for (auto fitVal = subParRankFinal.begin(); fitVal != subParRankFinal.end(); ++fitVal) {
						if(options.verbosity>=4){
							cout << "Raquel setting particle to island value" << endl;
						}
						parID = fcalcParID(fitVal->first, options.models.size());

						if (fitVal->second > 0 && particleToIsland_[parID] == currIsland) {
							if(options.verbosity>=4){
								cout << "Raquel setting particle to island value done" << endl;
							}
							bestParticle = fitVal->second;
							//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
							//break;
						}

					}


				}else{


					for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
						//cout << "Raquel setting particle to island value" << endl;
						if (fitVal->first > 0 && particleToIsland_[fitVal->second] == currIsland) {
							//cout << "Raquel setting particle to island value done" << endl;

							bestParticle = fitVal->second;
							//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
							//break;
						}

					}


				}


		vector<double> bestParamSet = particleCurrParamSets_[bestParticle];
		for (auto param = this->getFreeParams_().begin(); param != this->getFreeParams_().end(); ++param) { //for (auto param = options.model->getFreeParams_().begin(); param != options.model->getFreeParams_().end(); ++param) {
			int p1 = 0;
			int p2 = 0;
			int p3 = 0;
			while (p1 == p2 || p1 == p3 || p2 == p3) {
				p1 = unif(generalRand);
				p2 = unif(generalRand);
				p3 = unif(generalRand);
			}

			double p1Param = particleCurrParamSets_.at(islandToParticle_.at(currIsland)[p1])[pi];
			double p2Param = particleCurrParamSets_.at(islandToParticle_.at(currIsland)[p2])[pi];
			double p3Param = particleCurrParamSets_.at(islandToParticle_.at(currIsland)[p3])[pi];

			mutatedParams.push_back(p1Param + f * (p2Param - p3Param));
			++pi;
		}
	}
	else if (options.mutateType == 4) {
		unsigned int pi = 0;
		int bestParticle = 0;
		//for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
		//	if (fitVal->first > 0 && particleToIsland_.at(fitVal->second) == currIsland) {
		//		bestParticle = fitVal->second;
		//	}
		//}

		if(options.constraints_.size()>0){//If the user provided any constraint
					//use the combined rank between fit values and constraint values to select the best particle
					//mutate type 4 will take the worst particle for the current island and mutate it
					for (auto fitVal = subParRankFinal.begin(); fitVal != subParRankFinal.end(); ++fitVal) {
						if(options.verbosity>=4){
							cout << "Raquel setting particle to island value" << endl;
						}
						parID = fcalcParID(fitVal->first, options.models.size());

						if (fitVal->second > 0 && particleToIsland_[parID] == currIsland) {
							if(options.verbosity>=4){
								cout << "Raquel setting particle to island value done" << endl;
							}
							bestParticle = fitVal->second;
							//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
							//break;
						}

					}


				}else{


					for (auto fitVal = particleBestFitsByFit_.begin(); fitVal != particleBestFitsByFit_.end(); ++fitVal) {
						//cout << "Raquel setting particle to island value" << endl;
						if (fitVal->first > 0 && particleToIsland_[fitVal->second] == currIsland) {
							//cout << "Raquel setting particle to island value done" << endl;

							bestParticle = fitVal->second;
							//cout << "setting particle " << fitVal->second << " as best with fit of " << fitVal -> first << endl;
							//break;
						}

					}


				}



		vector<double> bestParamSet = particleCurrParamSets_[bestParticle];
		for (auto param = this->getFreeParams_().begin(); param != this->getFreeParams_().end(); ++param) {//for (auto param = options.model->getFreeParams_().begin(); param != options.model->getFreeParams_().end(); ++param) {
			int p1 = 0;
			int p2 = 0;
			int p3 = 0;
			int p4 = 0;
			int p5 = 0;
			// This (and above instances) should be optimized
			while (p1 == p2 || p1 == p3 || p1 == p4 || p2 == p3 || p2 == p4 || p3 == p4 || p1 == p5 || p2 == p5 || p3 == p5 || p4 == p5) {
				p1 = unif(generalRand);
				p2 = unif(generalRand);
				p3 = unif(generalRand);
				p4 = unif(generalRand);
				p5 = unif(generalRand);
			}

			double p1Param = particleCurrParamSets_[islandToParticle_[currIsland][p1]][pi];
			double p2Param = particleCurrParamSets_[islandToParticle_[currIsland][p2]][pi];
			double p3Param = particleCurrParamSets_[islandToParticle_[currIsland][p3]][pi];
			double p4Param = particleCurrParamSets_[islandToParticle_[currIsland][p4]][pi];
			double p5Param = particleCurrParamSets_[islandToParticle_[currIsland][p5]][pi];

			mutatedParams.push_back(p1Param + f * (p2Param - p3Param) + f * (p4Param - p5Param));
			++pi;
		}
	}

	return mutatedParams;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4f0, %rsp            # imm = 0x4F0
movq %rdi, -0x288(%rbp)
movq %rdi, %rax
movq %rax, -0x280(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movss %xmm0, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x278(%rbp)
cmpl $0x3, 0x1614(%rax)
jb 0x11418d
movq 0x1c0de9(%rip), %rdi    # 0x2d4f50
leaq 0xd02ca(%rip), %rsi     # 0x1e4438
callq 0x2ff50
movq %rax, %rdi
movl -0x14(%rbp), %esi
callq 0x30640
movq %rax, %rdi
movq 0x1c0e40(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
movq -0x288(%rbp), %rdi
movl $0x0, -0x1c(%rbp)
movb $0x0, -0x1d(%rbp)
callq 0xb2580
movq -0x278(%rbp), %rdi
movl $0x0, -0x24(%rbp)
movl $0x0, -0x28(%rbp)
addq $0x14e0, %rdi           # imm = 0x14E0
leaq 0xfd334(%rip), %rsi     # 0x2114fb
callq 0x44930
movb %al, -0x289(%rbp)
jmp 0x1141d4
movb -0x289(%rbp), %al
testb $0x1, %al
jne 0x1141e0
jmp 0x114228
movq -0x278(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
movl -0x14(%rbp), %eax
movl %eax, %esi
callq 0xccc10
movq -0x278(%rbp), %rcx
movl (%rax), %eax
movl %eax, -0x24(%rbp)
movl 0x1620(%rcx), %eax
xorl %edx, %edx
divl 0x16fc(%rcx)
movl %eax, -0x28(%rbp)
jmp 0x114228
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x115e2e
movss -0x18(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x114239
jp 0x114239
jmp 0x114245
movss -0x18(%rbp), %xmm0
movss %xmm0, -0x38(%rbp)
jmp 0x114252
movss 0xcc917(%rip), %xmm0    # 0x1e0b64
movss %xmm0, -0x38(%rbp)
movl -0x28(%rbp), %edx
decl %edx
leaq -0x40(%rbp), %rdi
xorl %esi, %esi
callq 0x123cd0
jmp 0x114264
movq -0x278(%rbp), %rax
cmpl $0x3, 0x1614(%rax)
jb 0x1142a7
movq 0x1c0cd5(%rip), %rdi    # 0x2d4f50
leaq 0xd01c9(%rip), %rsi     # 0x1e444b
callq 0x2ff50
movq %rax, -0x298(%rbp)
jmp 0x114290
movq -0x298(%rbp), %rdi
movq 0x1c0d2a(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x1142a5
jmp 0x1142a7
movq -0x278(%rbp), %rax
cmpl $0x1, 0x1700(%rax)
jne 0x114870
movq -0x278(%rbp), %rdi
movl $0x0, -0x44(%rbp)
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x120, %rdi            # imm = 0x120
callq 0x123030
cmpq $0x0, %rax
jbe 0x1143c8
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d20
movq %rax, -0x50(%rbp)
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d90
movq %rax, -0x58(%rbp)
leaq -0x50(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x123d50
testb $0x1, %al
jne 0x11432a
jmp 0x1143c3
leaq -0x50(%rbp), %rdi
callq 0x123dc0
movq -0x278(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x2a0(%rbp)
addq $0x15c0, %rdi           # imm = 0x15C0
callq 0x45170
movl -0x2a0(%rbp), %edi
movl %eax, %esi
callq 0x17d3f0
movl %eax, -0x29c(%rbp)
jmp 0x114363
movl -0x29c(%rbp), %eax
movl %eax, -0x1c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x123dc0
movss 0x4(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x1143b3
movq -0x278(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
movslq -0x1c(%rbp), %rsi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x1143b3
leaq -0x50(%rbp), %rdi
callq 0x123dc0
cvttss2si 0x4(%rax), %eax
movl %eax, -0x44(%rbp)
jmp 0x1143c3
jmp 0x1143b5
leaq -0x50(%rbp), %rdi
callq 0x123de0
jmp 0x1142fd
jmp 0x1145b1
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x122630
movq %rax, -0x60(%rbp)
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x1231a0
movq %rax, -0x68(%rbp)
leaq -0x60(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x1231d0
testb $0x1, %al
jne 0x11440c
jmp 0x1145af
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x11444f
movq 0x1c0b2d(%rip), %rdi    # 0x2d4f50
leaq 0xd0047(%rip), %rsi     # 0x1e4471
callq 0x2ff50
movq %rax, -0x2a8(%rbp)
jmp 0x114438
movq -0x2a8(%rbp), %rdi
movq 0x1c0b82(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x11444d
jmp 0x11444f
leaq -0x60(%rbp), %rdi
callq 0x122660
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x11459f
movq -0x278(%rbp), %rax
addq $0x1d20, %rax           # imm = 0x1D20
movq %rax, -0x2b0(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x122660
movq -0x2b0(%rbp), %rdi
movl 0x8(%rax), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x11459f
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x1144e5
movq 0x1c0a97(%rip), %rdi    # 0x2d4f50
leaq 0xcffd9(%rip), %rsi     # 0x1e4499
callq 0x2ff50
movq %rax, -0x2b8(%rbp)
jmp 0x1144ce
movq -0x2b8(%rbp), %rdi
movq 0x1c0aec(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x1144e3
jmp 0x1144e5
leaq -0x60(%rbp), %rdi
callq 0x122660
movq %rax, %rcx
movq -0x278(%rbp), %rax
movl 0x8(%rcx), %ecx
movl %ecx, -0x44(%rbp)
cmpl $0x4, 0x1614(%rax)
jb 0x11459d
movq 0x1c0a3e(%rip), %rdi    # 0x2d4f50
leaq 0xcffad(%rip), %rsi     # 0x1e44c6
callq 0x2ff50
movq %rax, -0x2c0(%rbp)
jmp 0x114527
leaq -0x60(%rbp), %rdi
callq 0x122660
movq -0x2c0(%rbp), %rdi
movl 0x8(%rax), %esi
callq 0x30640
movq %rax, -0x2c8(%rbp)
jmp 0x114548
movq -0x2c8(%rbp), %rdi
leaq 0xcff82(%rip), %rsi     # 0x1e44d8
callq 0x2ff50
movq %rax, -0x2d0(%rbp)
jmp 0x114564
leaq -0x60(%rbp), %rdi
callq 0x122660
movq -0x2d0(%rbp), %rdi
movsd (%rax), %xmm0
callq 0x30710
movq %rax, -0x2d8(%rbp)
jmp 0x114586
movq -0x2d8(%rbp), %rdi
movq 0x1c0a34(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x11459b
jmp 0x11459d
jmp 0x1145af
jmp 0x1145a1
leaq -0x60(%rbp), %rdi
callq 0xcbd20
jmp 0x1143df
jmp 0x1145b1
movq -0x278(%rbp), %rdi
addq $0x1400, %rdi           # imm = 0x1400
movl -0x44(%rbp), %eax
movl %eax, -0x84(%rbp)
leaq -0x84(%rbp), %rsi
callq 0x122470
movq %rax, -0x2e0(%rbp)
jmp 0x1145dd
movq -0x2e0(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0xb2bc0
jmp 0x1145ef
movq -0x278(%rbp), %rdi
movl $0x0, -0x88(%rbp)
callq 0x125110
movq %rax, -0x2e8(%rbp)
jmp 0x11460e
movq -0x2e8(%rbp), %rdi
callq 0xb3200
movq %rax, -0x90(%rbp)
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x2f0(%rbp)
jmp 0x114636
movq -0x2f0(%rbp), %rdi
callq 0xb3310
movq %rax, -0x98(%rbp)
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0xb32e0
testb $0x1, %al
jne 0x114665
jmp 0x114862
movl $0x0, -0x9c(%rbp)
movl $0x0, -0xa0(%rbp)
movl -0x9c(%rbp), %eax
cmpl -0xa0(%rbp), %eax
jne 0x1146f3
movq -0x278(%rbp), %rsi
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x2f4(%rbp)
jmp 0x1146a3
movq -0x278(%rbp), %rsi
movl -0x2f4(%rbp), %eax
movl %eax, -0x9c(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x2f8(%rbp)
jmp 0x1146cb
movl -0x2f8(%rbp), %eax
movl %eax, -0xa0(%rbp)
jmp 0x114679
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x80(%rbp), %rdi
callq 0xb2660
jmp 0x115e2e
movq -0x278(%rbp), %rdi
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x308(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x300(%rbp)
jmp 0x114724
movq -0x300(%rbp), %rdi
movslq -0x9c(%rbp), %rsi
callq 0xccc10
movq -0x308(%rbp), %rdi
movq %rax, %rsi
callq 0x122470
movq %rax, -0x310(%rbp)
jmp 0x11474f
movq -0x310(%rbp), %rdi
movl -0x88(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0xa8(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x320(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x318(%rbp)
jmp 0x1147a0
movq -0x318(%rbp), %rdi
movslq -0xa0(%rbp), %rsi
callq 0xccc10
movq -0x320(%rbp), %rdi
movq %rax, %rsi
callq 0x122470
movq %rax, -0x328(%rbp)
jmp 0x1147cb
movq -0x328(%rbp), %rdi
movl -0x88(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movsd (%rax), %xmm0
movsd %xmm0, -0xb0(%rbp)
movl -0x88(%rbp), %eax
movl %eax, %esi
leaq -0x80(%rbp), %rdi
callq 0xb2610
movq -0x288(%rbp), %rdi
movsd (%rax), %xmm1
movss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0xa8(%rbp), %xmm2
movsd -0xb0(%rbp), %xmm3
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0xb8(%rbp)
leaq -0xb8(%rbp), %rsi
callq 0xb2630
jmp 0x114842
movl -0x88(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x88(%rbp)
leaq -0x90(%rbp), %rdi
callq 0xb3260
jmp 0x114621
leaq -0x80(%rbp), %rdi
callq 0xb2660
jmp 0x115e08
movq -0x278(%rbp), %rax
cmpl $0x2, 0x1700(%rax)
jne 0x114fab
movq -0x278(%rbp), %rdi
movl $0x0, -0xbc(%rbp)
movl $0x0, -0xc0(%rbp)
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x120, %rdi            # imm = 0x120
callq 0x123030
cmpq $0x0, %rax
jbe 0x114a51
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d20
movq %rax, -0xc8(%rbp)
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d90
movq %rax, -0xd0(%rbp)
leaq -0xc8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x123d50
testb $0x1, %al
jne 0x11490c
jmp 0x114a4c
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x11494f
movq 0x1c062d(%rip), %rdi    # 0x2d4f50
leaq 0xcfb47(%rip), %rsi     # 0x1e4471
callq 0x2ff50
movq %rax, -0x330(%rbp)
jmp 0x114938
movq -0x330(%rbp), %rdi
movq 0x1c0682(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x11494d
jmp 0x11494f
leaq -0xc8(%rbp), %rdi
callq 0x123dc0
movq -0x278(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x338(%rbp)
addq $0x15c0, %rdi           # imm = 0x15C0
callq 0x45170
movl -0x338(%rbp), %edi
movl %eax, %esi
callq 0x17d3f0
movl %eax, -0x334(%rbp)
jmp 0x11498b
movl -0x334(%rbp), %eax
movl %eax, -0x1c(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x123dc0
movss 0x4(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x114a39
movq -0x278(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
movslq -0x1c(%rbp), %rsi
callq 0xb4710
movq %rax, -0x340(%rbp)
jmp 0x1149d1
movq -0x340(%rbp), %rax
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x114a39
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x114a22
movq 0x1c055a(%rip), %rdi    # 0x2d4f50
leaq 0xcfa9c(%rip), %rsi     # 0x1e4499
callq 0x2ff50
movq %rax, -0x348(%rbp)
jmp 0x114a0b
movq -0x348(%rbp), %rdi
movq 0x1c05af(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x114a20
jmp 0x114a22
leaq -0xc8(%rbp), %rdi
callq 0x123dc0
cvttss2si 0x4(%rax), %eax
movl %eax, -0xc0(%rbp)
jmp 0x114a3b
leaq -0xc8(%rbp), %rdi
callq 0x123de0
jmp 0x1148d6
jmp 0x114b19
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x122630
movq %rax, -0xd8(%rbp)
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x1231a0
movq %rax, -0xe0(%rbp)
leaq -0xd8(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x1231d0
testb $0x1, %al
jne 0x114a9e
jmp 0x114b17
leaq -0xd8(%rbp), %rdi
callq 0x122660
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x114b04
movq -0x278(%rbp), %rax
addq $0x1d20, %rax           # imm = 0x1D20
movq %rax, -0x350(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x122660
movq -0x350(%rbp), %rdi
movl 0x8(%rax), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x114b04
leaq -0xd8(%rbp), %rdi
callq 0x122660
movl 0x8(%rax), %eax
movl %eax, -0xc0(%rbp)
jmp 0x114b06
leaq -0xd8(%rbp), %rdi
callq 0xcbd20
jmp 0x114a6b
jmp 0x114b19
movq -0x278(%rbp), %rdi
addq $0x1400, %rdi           # imm = 0x1400
movl -0xc0(%rbp), %eax
movl %eax, -0xfc(%rbp)
leaq -0xfc(%rbp), %rsi
callq 0xd0e30
movq %rax, -0x358(%rbp)
jmp 0x114b48
movq -0x358(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
callq 0xb2bc0
jmp 0x114b5d
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x360(%rbp)
jmp 0x114b72
movq -0x360(%rbp), %rdi
callq 0xb3200
movq %rax, -0x108(%rbp)
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x368(%rbp)
jmp 0x114b9a
movq -0x368(%rbp), %rdi
callq 0xb3310
movq %rax, -0x110(%rbp)
leaq -0x108(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xb32e0
testb $0x1, %al
jne 0x114bc9
jmp 0x114f9a
movl $0x0, -0x114(%rbp)
movl $0x0, -0x118(%rbp)
movl $0x0, -0x11c(%rbp)
movl $0x0, -0x120(%rbp)
movl -0x114(%rbp), %ecx
movb $0x1, %al
cmpl -0x118(%rbp), %ecx
movb %al, -0x369(%rbp)
je 0x114c74
movl -0x114(%rbp), %ecx
movb $0x1, %al
cmpl -0x11c(%rbp), %ecx
movb %al, -0x369(%rbp)
je 0x114c74
movl -0x114(%rbp), %ecx
movb $0x1, %al
cmpl -0x120(%rbp), %ecx
movb %al, -0x369(%rbp)
je 0x114c74
movl -0x118(%rbp), %ecx
movb $0x1, %al
cmpl -0x11c(%rbp), %ecx
movb %al, -0x369(%rbp)
je 0x114c74
movl -0x118(%rbp), %ecx
movb $0x1, %al
cmpl -0x120(%rbp), %ecx
movb %al, -0x369(%rbp)
je 0x114c74
movl -0x11c(%rbp), %eax
cmpl -0x120(%rbp), %eax
sete %al
movb %al, -0x369(%rbp)
movb -0x369(%rbp), %al
testb $0x1, %al
jne 0x114c83
jmp 0x114d45
movq -0x278(%rbp), %rsi
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x370(%rbp)
jmp 0x114c9f
movq -0x278(%rbp), %rsi
movl -0x370(%rbp), %eax
movl %eax, -0x114(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x374(%rbp)
jmp 0x114cc7
movq -0x278(%rbp), %rsi
movl -0x374(%rbp), %eax
movl %eax, -0x118(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x378(%rbp)
jmp 0x114cef
movq -0x278(%rbp), %rsi
movl -0x378(%rbp), %eax
movl %eax, -0x11c(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x37c(%rbp)
jmp 0x114d17
movl -0x37c(%rbp), %eax
movl %eax, -0x120(%rbp)
jmp 0x114bf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0xb2660
jmp 0x115e2e
movq -0x278(%rbp), %rdi
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x390(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x114(%rbp), %rsi
callq 0xccc10
movq -0x390(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x388(%rbp)
jmp 0x114d94
movq -0x388(%rbp), %rdi
movl -0xbc(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x128(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x3a0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x118(%rbp), %rsi
callq 0xccc10
movq -0x3a0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x398(%rbp)
jmp 0x114e03
movq -0x398(%rbp), %rdi
movl -0xbc(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x130(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x3b0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x11c(%rbp), %rsi
callq 0xccc10
movq -0x3b0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x3a8(%rbp)
jmp 0x114e72
movq -0x3a8(%rbp), %rdi
movl -0xbc(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x138(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x3c0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x120(%rbp), %rsi
callq 0xccc10
movq -0x3c0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x3b8(%rbp)
jmp 0x114ee1
movq -0x3b8(%rbp), %rdi
movl -0xbc(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movsd (%rax), %xmm0
movsd %xmm0, -0x140(%rbp)
movl -0xbc(%rbp), %eax
movl %eax, %esi
leaq -0xf8(%rbp), %rdi
callq 0xb2610
movq -0x288(%rbp), %rdi
movsd (%rax), %xmm2
movss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x128(%rbp), %xmm3
movsd -0x130(%rbp), %xmm1
subsd %xmm1, %xmm3
movaps %xmm0, %xmm1
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
movsd -0x138(%rbp), %xmm2
movsd -0x140(%rbp), %xmm3
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x148(%rbp)
leaq -0x148(%rbp), %rsi
callq 0xb2630
jmp 0x114f7a
movl -0xbc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xbc(%rbp)
leaq -0x108(%rbp), %rdi
callq 0xb3260
jmp 0x114b85
leaq -0xf8(%rbp), %rdi
callq 0xb2660
jmp 0x115e06
movq -0x278(%rbp), %rax
cmpl $0x3, 0x1700(%rax)
jne 0x1155e7
movq -0x278(%rbp), %rdi
movl $0x0, -0x14c(%rbp)
movl $0x0, -0x150(%rbp)
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x120, %rdi            # imm = 0x120
callq 0x123030
cmpq $0x0, %rax
jbe 0x115178
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d20
movq %rax, -0x158(%rbp)
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d90
movq %rax, -0x160(%rbp)
leaq -0x158(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x123d50
testb $0x1, %al
jne 0x115047
jmp 0x115173
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x11508a
movq 0x1bfef2(%rip), %rdi    # 0x2d4f50
leaq 0xcf40c(%rip), %rsi     # 0x1e4471
callq 0x2ff50
movq %rax, -0x3c8(%rbp)
jmp 0x115073
movq -0x3c8(%rbp), %rdi
movq 0x1bff47(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x115088
jmp 0x11508a
leaq -0x158(%rbp), %rdi
callq 0x123dc0
movq -0x278(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x3d0(%rbp)
addq $0x15c0, %rdi           # imm = 0x15C0
callq 0x45170
movl -0x3d0(%rbp), %edi
movl %eax, %esi
callq 0x17d3f0
movl %eax, -0x3cc(%rbp)
jmp 0x1150c6
movl -0x3cc(%rbp), %eax
movl %eax, -0x1c(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x123dc0
movss 0x4(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x115160
movq -0x278(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
movslq -0x1c(%rbp), %rsi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x115160
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x115149
movq 0x1bfe33(%rip), %rdi    # 0x2d4f50
leaq 0xcf375(%rip), %rsi     # 0x1e4499
callq 0x2ff50
movq %rax, -0x3d8(%rbp)
jmp 0x115132
movq -0x3d8(%rbp), %rdi
movq 0x1bfe88(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x115147
jmp 0x115149
leaq -0x158(%rbp), %rdi
callq 0x123dc0
cvttss2si 0x4(%rax), %eax
movl %eax, -0x150(%rbp)
jmp 0x115162
leaq -0x158(%rbp), %rdi
callq 0x123de0
jmp 0x115011
jmp 0x115240
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x122630
movq %rax, -0x168(%rbp)
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x1231a0
movq %rax, -0x170(%rbp)
leaq -0x168(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x1231d0
testb $0x1, %al
jne 0x1151c5
jmp 0x11523e
leaq -0x168(%rbp), %rdi
callq 0x122660
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x11522b
movq -0x278(%rbp), %rax
addq $0x1d20, %rax           # imm = 0x1D20
movq %rax, -0x3e0(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x122660
movq -0x3e0(%rbp), %rdi
movl 0x8(%rax), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x11522b
leaq -0x168(%rbp), %rdi
callq 0x122660
movl 0x8(%rax), %eax
movl %eax, -0x150(%rbp)
jmp 0x11522d
leaq -0x168(%rbp), %rdi
callq 0xcbd20
jmp 0x115192
jmp 0x115240
movq -0x278(%rbp), %rdi
addq $0x1400, %rdi           # imm = 0x1400
movl -0x150(%rbp), %eax
movl %eax, -0x18c(%rbp)
leaq -0x18c(%rbp), %rsi
callq 0xd0e30
movq %rax, -0x3e8(%rbp)
jmp 0x11526f
movq -0x3e8(%rbp), %rsi
leaq -0x188(%rbp), %rdi
callq 0xb2bc0
jmp 0x115284
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x3f0(%rbp)
jmp 0x115299
movq -0x3f0(%rbp), %rdi
callq 0xb3200
movq %rax, -0x198(%rbp)
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x3f8(%rbp)
jmp 0x1152c1
movq -0x3f8(%rbp), %rdi
callq 0xb3310
movq %rax, -0x1a0(%rbp)
leaq -0x198(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0xb32e0
testb $0x1, %al
jne 0x1152f0
jmp 0x1155d6
movl $0x0, -0x1a4(%rbp)
movl $0x0, -0x1a8(%rbp)
movl $0x0, -0x1ac(%rbp)
movl -0x1a4(%rbp), %ecx
movb $0x1, %al
cmpl -0x1a8(%rbp), %ecx
movb %al, -0x3f9(%rbp)
je 0x11534f
movl -0x1a4(%rbp), %ecx
movb $0x1, %al
cmpl -0x1ac(%rbp), %ecx
movb %al, -0x3f9(%rbp)
je 0x11534f
movl -0x1a8(%rbp), %eax
cmpl -0x1ac(%rbp), %eax
sete %al
movb %al, -0x3f9(%rbp)
movb -0x3f9(%rbp), %al
testb $0x1, %al
jne 0x11535e
jmp 0x1153f8
movq -0x278(%rbp), %rsi
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x400(%rbp)
jmp 0x11537a
movq -0x278(%rbp), %rsi
movl -0x400(%rbp), %eax
movl %eax, -0x1a4(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x404(%rbp)
jmp 0x1153a2
movq -0x278(%rbp), %rsi
movl -0x404(%rbp), %eax
movl %eax, -0x1a8(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x408(%rbp)
jmp 0x1153ca
movl -0x408(%rbp), %eax
movl %eax, -0x1ac(%rbp)
jmp 0x11530e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x188(%rbp), %rdi
callq 0xb2660
jmp 0x115e2e
movq -0x278(%rbp), %rdi
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x418(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x410(%rbp)
jmp 0x115429
movq -0x410(%rbp), %rdi
movslq -0x1a4(%rbp), %rsi
callq 0xccc10
movq -0x418(%rbp), %rdi
movq %rax, %rsi
callq 0x122470
movq %rax, -0x420(%rbp)
jmp 0x115454
movq -0x420(%rbp), %rdi
movl -0x14c(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x1b8(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x430(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x428(%rbp)
jmp 0x1154a5
movq -0x428(%rbp), %rdi
movslq -0x1a8(%rbp), %rsi
callq 0xccc10
movq -0x430(%rbp), %rdi
movq %rax, %rsi
callq 0x122470
movq %rax, -0x438(%rbp)
jmp 0x1154d0
movq -0x438(%rbp), %rdi
movl -0x14c(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x1c0(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x448(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x124560
movq %rax, -0x440(%rbp)
jmp 0x115521
movq -0x440(%rbp), %rdi
movslq -0x1ac(%rbp), %rsi
callq 0xccc10
movq -0x448(%rbp), %rdi
movq %rax, %rsi
callq 0x122470
movq %rax, -0x450(%rbp)
jmp 0x11554c
movq -0x450(%rbp), %rdi
movl -0x14c(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x288(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x1c8(%rbp)
movsd -0x1b8(%rbp), %xmm1
movss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x1c0(%rbp), %xmm2
movsd -0x1c8(%rbp), %xmm3
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x1d0(%rbp)
leaq -0x1d0(%rbp), %rsi
callq 0xb2630
jmp 0x1155b6
movl -0x14c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14c(%rbp)
leaq -0x198(%rbp), %rdi
callq 0xb3260
jmp 0x1152ac
leaq -0x188(%rbp), %rdi
callq 0xb2660
jmp 0x115e04
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1700(%rax)
jne 0x115e02
movq -0x278(%rbp), %rdi
movl $0x0, -0x1d4(%rbp)
movl $0x0, -0x1d8(%rbp)
addq $0x14c0, %rdi           # imm = 0x14C0
addq $0x120, %rdi            # imm = 0x120
callq 0x123030
cmpq $0x0, %rax
jbe 0x1157b4
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d20
movq %rax, -0x1e0(%rbp)
movq -0x278(%rbp), %rdi
addq $0x18f0, %rdi           # imm = 0x18F0
callq 0x123d90
movq %rax, -0x1e8(%rbp)
leaq -0x1e0(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x123d50
testb $0x1, %al
jne 0x115683
jmp 0x1157af
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x1156c6
movq 0x1bf8b6(%rip), %rdi    # 0x2d4f50
leaq 0xcedd0(%rip), %rsi     # 0x1e4471
callq 0x2ff50
movq %rax, -0x458(%rbp)
jmp 0x1156af
movq -0x458(%rbp), %rdi
movq 0x1bf90b(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x1156c4
jmp 0x1156c6
leaq -0x1e0(%rbp), %rdi
callq 0x123dc0
movq -0x278(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x460(%rbp)
addq $0x15c0, %rdi           # imm = 0x15C0
callq 0x45170
movl -0x460(%rbp), %edi
movl %eax, %esi
callq 0x17d3f0
movl %eax, -0x45c(%rbp)
jmp 0x115702
movl -0x45c(%rbp), %eax
movl %eax, -0x1c(%rbp)
leaq -0x1e0(%rbp), %rdi
callq 0x123dc0
movss 0x4(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jbe 0x11579c
movq -0x278(%rbp), %rdi
addq $0x1d20, %rdi           # imm = 0x1D20
movslq -0x1c(%rbp), %rsi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x11579c
movq -0x278(%rbp), %rax
cmpl $0x4, 0x1614(%rax)
jb 0x115785
movq 0x1bf7f7(%rip), %rdi    # 0x2d4f50
leaq 0xced39(%rip), %rsi     # 0x1e4499
callq 0x2ff50
movq %rax, -0x468(%rbp)
jmp 0x11576e
movq -0x468(%rbp), %rdi
movq 0x1bf84c(%rip), %rsi    # 0x2d4fc8
callq 0x30c10
jmp 0x115783
jmp 0x115785
leaq -0x1e0(%rbp), %rdi
callq 0x123dc0
cvttss2si 0x4(%rax), %eax
movl %eax, -0x1d8(%rbp)
jmp 0x11579e
leaq -0x1e0(%rbp), %rdi
callq 0x123de0
jmp 0x11564d
jmp 0x11587c
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x122630
movq %rax, -0x1f0(%rbp)
movq -0x278(%rbp), %rdi
addq $0x1ab0, %rdi           # imm = 0x1AB0
callq 0x1231a0
movq %rax, -0x1f8(%rbp)
leaq -0x1f0(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x1231d0
testb $0x1, %al
jne 0x115801
jmp 0x11587a
leaq -0x1f0(%rbp), %rdi
callq 0x122660
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x115867
movq -0x278(%rbp), %rax
addq $0x1d20, %rax           # imm = 0x1D20
movq %rax, -0x470(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x122660
movq -0x470(%rbp), %rdi
movl 0x8(%rax), %eax
movl %eax, %esi
callq 0xccc10
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0x115867
leaq -0x1f0(%rbp), %rdi
callq 0x122660
movl 0x8(%rax), %eax
movl %eax, -0x1d8(%rbp)
jmp 0x115869
leaq -0x1f0(%rbp), %rdi
callq 0xcbd20
jmp 0x1157ce
jmp 0x11587c
movq -0x278(%rbp), %rdi
addq $0x1400, %rdi           # imm = 0x1400
movl -0x1d8(%rbp), %eax
movl %eax, -0x214(%rbp)
leaq -0x214(%rbp), %rsi
callq 0xd0e30
movq %rax, -0x478(%rbp)
jmp 0x1158ab
movq -0x478(%rbp), %rsi
leaq -0x210(%rbp), %rdi
callq 0xb2bc0
jmp 0x1158c0
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x480(%rbp)
jmp 0x1158d5
movq -0x480(%rbp), %rdi
callq 0xb3200
movq %rax, -0x220(%rbp)
movq -0x278(%rbp), %rdi
callq 0x125110
movq %rax, -0x488(%rbp)
jmp 0x1158fd
movq -0x488(%rbp), %rdi
callq 0xb3310
movq %rax, -0x228(%rbp)
leaq -0x220(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0xb32e0
testb $0x1, %al
jne 0x11592c
jmp 0x115df6
movl $0x0, -0x22c(%rbp)
movl $0x0, -0x230(%rbp)
movl $0x0, -0x234(%rbp)
movl $0x0, -0x238(%rbp)
movl $0x0, -0x23c(%rbp)
movl -0x22c(%rbp), %ecx
movb $0x1, %al
cmpl -0x230(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x22c(%rbp), %ecx
movb $0x1, %al
cmpl -0x234(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x22c(%rbp), %ecx
movb $0x1, %al
cmpl -0x238(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x230(%rbp), %ecx
movb $0x1, %al
cmpl -0x234(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x230(%rbp), %ecx
movb $0x1, %al
cmpl -0x238(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x234(%rbp), %ecx
movb $0x1, %al
cmpl -0x238(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x22c(%rbp), %ecx
movb $0x1, %al
cmpl -0x23c(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x230(%rbp), %ecx
movb $0x1, %al
cmpl -0x23c(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x234(%rbp), %ecx
movb $0x1, %al
cmpl -0x23c(%rbp), %ecx
movb %al, -0x489(%rbp)
je 0x115a49
movl -0x238(%rbp), %eax
cmpl -0x23c(%rbp), %eax
sete %al
movb %al, -0x489(%rbp)
movb -0x489(%rbp), %al
testb $0x1, %al
jne 0x115a58
jmp 0x115b42
movq -0x278(%rbp), %rsi
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x490(%rbp)
jmp 0x115a74
movq -0x278(%rbp), %rsi
movl -0x490(%rbp), %eax
movl %eax, -0x22c(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x494(%rbp)
jmp 0x115a9c
movq -0x278(%rbp), %rsi
movl -0x494(%rbp), %eax
movl %eax, -0x230(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x498(%rbp)
jmp 0x115ac4
movq -0x278(%rbp), %rsi
movl -0x498(%rbp), %eax
movl %eax, -0x234(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x49c(%rbp)
jmp 0x115aec
movq -0x278(%rbp), %rsi
movl -0x49c(%rbp), %eax
movl %eax, -0x238(%rbp)
addq $0x58, %rsi
leaq -0x40(%rbp), %rdi
callq 0x123e00
movl %eax, -0x4a0(%rbp)
jmp 0x115b14
movl -0x4a0(%rbp), %eax
movl %eax, -0x23c(%rbp)
jmp 0x11595e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x210(%rbp), %rdi
callq 0xb2660
jmp 0x115e2e
movq -0x278(%rbp), %rdi
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x4b0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x22c(%rbp), %rsi
callq 0xccc10
movq -0x4b0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x4a8(%rbp)
jmp 0x115b91
movq -0x4a8(%rbp), %rdi
movl -0x1d4(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x248(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x4c0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x230(%rbp), %rsi
callq 0xccc10
movq -0x4c0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x4b8(%rbp)
jmp 0x115c00
movq -0x4b8(%rbp), %rdi
movl -0x1d4(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x250(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x4d0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x234(%rbp), %rsi
callq 0xccc10
movq -0x4d0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x4c8(%rbp)
jmp 0x115c6f
movq -0x4c8(%rbp), %rdi
movl -0x1d4(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x258(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x4e0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x238(%rbp), %rsi
callq 0xccc10
movq -0x4e0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x4d8(%rbp)
jmp 0x115cde
movq -0x4d8(%rbp), %rdi
movl -0x1d4(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x278(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x260(%rbp)
movq %rdi, %rax
addq $0x1400, %rax           # imm = 0x1400
movq %rax, -0x4f0(%rbp)
addq $0x1d38, %rdi           # imm = 0x1D38
movl -0x24(%rbp), %eax
movl %eax, %esi
callq 0x1228d0
movq %rax, %rdi
movslq -0x23c(%rbp), %rsi
callq 0xccc10
movq -0x4f0(%rbp), %rdi
movq %rax, %rsi
callq 0x122da0
movq %rax, -0x4e8(%rbp)
jmp 0x115d4d
movq -0x4e8(%rbp), %rdi
movl -0x1d4(%rbp), %eax
movl %eax, %esi
callq 0xb2610
movq -0x288(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x268(%rbp)
movsd -0x248(%rbp), %xmm2
movss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd -0x250(%rbp), %xmm3
movsd -0x258(%rbp), %xmm1
subsd %xmm1, %xmm3
movaps %xmm0, %xmm1
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
movsd -0x260(%rbp), %xmm2
movsd -0x268(%rbp), %xmm3
subsd %xmm3, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x270(%rbp)
leaq -0x270(%rbp), %rsi
callq 0xb2630
jmp 0x115dd6
movl -0x1d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1d4(%rbp)
leaq -0x220(%rbp), %rdi
callq 0xb3260
jmp 0x1158e8
leaq -0x210(%rbp), %rdi
callq 0xb2660
jmp 0x115e04
jmp 0x115e06
jmp 0x115e08
movb $0x1, -0x1d(%rbp)
testb $0x1, -0x1d(%rbp)
jne 0x115e1e
movq -0x288(%rbp), %rdi
callq 0xb2660
movq -0x280(%rbp), %rax
addq $0x4f0, %rsp            # imm = 0x4F0
popq %rbp
retq
movq -0x288(%rbp), %rdi
callq 0xb2660
movq -0x30(%rbp), %rdi
callq 0x30170
nopw %cs:(%rax,%rax)