// File: /workspace/github_cpp_makefile_star2_O1/richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::consolidate_model_params()
void Swarm::consolidate_model_params(){

	if(options.verbosity>=1){
		cout<<"consolidating " << this->getNumModels()<<" models."<<endl;
	}

	//Raquel: commented, unnecessary
	/*if (options.models.size() <1){
		if(options.verbosity >= 3) cout<<"No need to consolidate models. Less than two models exist"<<endl;
		return;
	}
 *
 * Bug Note by Raquel
 * There was a bug in the consolidation function bellow
 * When you have more then 2 models that share equal paramaters, the command:
 * delete options.models.at(j)->freeParams_[fj->first];
 * will try to delete the free parameter from the list more then once
 * this will cause an error of memory access violation
 * I solved this problem by creating a new map containing only the unique parameters
 */



	map<string,FreeParam*> uniqueList;
	int uniqueIndex = 0;
	//remove dulicate free parameters
	unsigned int i,j, k, cnt=0;


	if(options.models.size() > 1 ){

	for (i=0; i <options.models.size(); i++){  //k-1 first models
		//cout << "in the first loop" << endl;
		for (j=i+1; j <options.models.size(); j++){  //the subsequent model to the end
			//cout << "in the second loop" << endl;
			for (auto fi=options.models.at(i)->freeParams_.begin(); fi!=options.models.at(i)->freeParams_.end(); ++fi){
				//cout << "in the thrid loop" << endl;
				for (auto fj=options.models.at(j)->freeParams_.begin(); fj!=options.models.at(j)->freeParams_.end(); ++fj){
					//cout << "in the fourth loop" << endl;
					if(fi->first.compare(fj->first)==0){  //common free parameters
						//cout << "in the if if the fourth loop" << endl;
						cnt++;
						if(options.verbosity >= 4)
							cout<<"Common free parameters found.  Param:"<< fi->first <<"  model1:" <<options.models.at(i)->getName() <<"   model2:" << options.models.at(j)->getName() <<endl;
						//cout << "before deleting" << endl;

						if ( uniqueList.find(fj->first) == uniqueList.end() ) {
							cout << fj->first << endl;
							//delete options.models.at(j)->freeParams_[fj->first]; //delete free param objecyt in j
							uniqueList[fj->first] = fj->second;
							uniqueIndex++;
							//cout << "Found parameter " << fj->first << endl;
						  // found
						} else {
							  // not found
								//cout << "parameter already found: " << fj->first << endl;

						}
						//cout << "after delete" << endl;
						//options.models.at(j)->freeParams_[fj->first] = options.models.at(i)->freeParams_[fi->first];  //map to i
						fj->second = fi->second;
					}
				}
			}
		}
	}
	//cout << "Found " << uniqueIndex << " unique parameters" << endl;
	//Raquel changed the way that the function find unique parameters

	if(options.verbosity >= 3) cout<<"Removing duplicate free parameters is finished. "<<cnt<<" duplicate free parameters are deleted."<<endl;

	}else{

		uniqueList = options.models.at(0)->freeParams_;
	}



		for (i=0; i <options.models.size(); i++){
			options.models.at(i)->freeParams_ = uniqueList;
			if(options.verbosity >= 1){
				cout << "model " << i << " free parameters " << options.models.at(i)->freeParams_.size() << endl;
			}
		}


		options.freeParams_.clear(); cnt=0;
		options.freeParams_ = uniqueList;
		cnt = options.freeParams_.size();

	 //razi make full list of union of free parameters
	options.freeParams_.clear(); cnt=0;
	for (i=0; i <options.models.size(); i++){  //razi: all models, was k-1 first models, later test
		for (auto fi=options.models.at(i)->freeParams_.begin(); fi!=options.models.at(i)->freeParams_.end(); ++fi){
			if (options.freeParams_.count(fi->first) < 1){  //a new free parameters
				options.freeParams_.insert(make_pair(fi->first, fi->second)); cnt++;
				if(options.verbosity >= 3) cout<<"Free parameter:"<<fi->first <<" is added to the list"<<endl;
			}
		}
	}


	if(options.verbosity >= 3) cout<<"Free parameters found:"<< cnt << endl;


	//razi make mapping from models free parameters to the full list of free parameters


	std::map<unsigned int, unsigned int> dummay_map;
	for (i=0; i <options.models.size(); i++){  //razi: all models, was k-1 first models, later test
		j = 0;

		freeParamMapping.push_back(dummay_map);
		for (auto fj=options.models.at(i)->freeParams_.begin(); fj!=options.models.at(i)->freeParams_.end(); ++fj){
			k=0;
			for (auto fk=options.freeParams_.begin(); fk!=options.freeParams_.end(); ++fk){
//cout<<"Full List   FreeParam["<<k<<"] :" << fk->first<<endl; //mypause();
				if (fj->first == fk->first){
					freeParamMapping.at(i).insert(make_pair(j,k));
				}
				k++;
			}
			j++;
		}
	}


	if(options.verbosity >= 3)cout<<"Model consolidation is completed. "<<cnt<<" free parameters are found."<<endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xa8, %rsp
movq %rdi, %rbx
cmpl $0x0, 0x1614(%rdi)
je 0x77e44
movq 0xfe1ba(%rip), %r14     # 0x175f90
leaq 0x865e3(%rip), %rsi     # 0xfe3c0
movl $0xe, %edx
movq %r14, %rdi
callq 0x22ab0
movq 0x15c8(%rbx), %rax
subq 0x15c0(%rbx), %rax
shrq $0x3, %rax
movl %eax, %esi
movq %r14, %rdi
callq 0x22650
movq %rax, %r14
leaq 0x8688d(%rip), %rsi     # 0xfe69d
movl $0x8, %edx
movq %rax, %rdi
callq 0x22ab0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r14, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
leaq 0x80(%rsp), %rcx
movl $0x0, (%rcx)
xorl %eax, %eax
movq %rax, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rax, 0x20(%rcx)
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rcx
subq %rax, %rcx
movq %rcx, %rdx
sarq $0x3, %rdx
cmpq $0x2, %rdx
jb 0x7829a
movq 0x15c8(%rbx), %rax
xorl %r14d, %r14d
cmpq 0x15c0(%rbx), %rax
je 0x78226
xorl %esi, %esi
movl $0x0, 0x4(%rsp)
incl %r14d
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
movq %r14, 0x70(%rsp)
jbe 0x781fe
movq %r14, %r13
movq %rsi, 0x18(%rsp)
movq %r14, 0x10(%rsp)
cmpq %rsi, %rdx
jbe 0x78889
movq 0x15c0(%rbx), %rdi
movq 0x15c8(%rbx), %rdx
subq %rdi, %rdx
sarq $0x3, %rdx
cmpq %rsi, %rdx
jbe 0x78848
movq (%rcx,%rsi,8), %rcx
movq 0x48(%rcx), %rax
movq (%rdi,%rsi,8), %rcx
addq $0x38, %rcx
cmpq %rcx, %rax
je 0x781d5
cmpq %r13, %rdx
jbe 0x78856
movq %rax, 0x8(%rsp)
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
jbe 0x7880a
movq (%rdi,%r13,8), %rax
movq 0x48(%rax), %r14
movq 0x8(%rsp), %rax
leaq 0x20(%rax), %r12
movq (%rcx,%r13,8), %rax
addq $0x38, %rax
cmpq %rax, %r14
je 0x781a3
leaq 0x20(%r14), %r15
movq %r12, %rdi
movq %r15, %rsi
callq 0x22060
testl %eax, %eax
jne 0x78175
cmpl $0x4, 0x1614(%rbx)
jb 0x780f8
movl $0x25, %edx
movq 0xfdff8(%rip), %rdi     # 0x175f90
leaq 0x86430(%rip), %rsi     # 0xfe3cf
callq 0x22ab0
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
movq 0xfdfd8(%rip), %rdi     # 0x175f90
callq 0x22ab0
movq %rax, %rbp
movl $0x9, %edx
movq %rax, %rdi
leaq 0x86426(%rip), %rsi     # 0xfe3f5
callq 0x22ab0
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movq 0x18(%rsp), %rsi
cmpq %rsi, %rdx
jbe 0x7881b
movq (%rax,%rsi,8), %rax
leaq 0x30(%rsp), %rcx
movq %rcx, 0x20(%rsp)
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq 0x20(%rsp), %rdi
callq 0x32180
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
movq %rbp, %rdi
callq 0x22ab0
movq %rax, %rbp
movl $0xa, %edx
movq %rax, %rdi
leaq 0x863c1(%rip), %rsi     # 0xfe3ff
callq 0x22ab0
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
jbe 0x78829
movq (%rax,%r13,8), %rax
leaq 0x60(%rsp), %rcx
movq %rcx, 0x50(%rsp)
movq 0x68(%rax), %rsi
movq 0x70(%rax), %rdx
addq %rsi, %rdx
leaq 0x50(%rsp), %rdi
callq 0x32180
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
movq %rbp, %rdi
callq 0x22ab0
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %rbp, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x780dc
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x780f8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x229c0
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0xae3c4
leaq 0x80(%rsp), %rcx
cmpq %rcx, %rax
jne 0x78164
movq 0x20(%r14), %rsi
movq 0x28(%r14), %rdx
movq 0xfde6f(%rip), %rdi     # 0x175f90
callq 0x22ab0
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %rbp, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq 0x40(%r14), %rbp
leaq 0x78(%rsp), %rdi
movq %r15, %rsi
callq 0xa7df8
movq %rbp, (%rax)
incl 0x4(%rsp)
movq 0x8(%rsp), %rax
movq 0x40(%rax), %rax
movq %rax, 0x40(%r14)
movq %r14, %rdi
callq 0x22670
movq %rax, %r14
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r13, %rdx
ja 0x77f57
jmp 0x7880a
movq 0x8(%rsp), %rdi
callq 0x22670
movq 0x15c0(%rbx), %rdi
movq 0x15c8(%rbx), %rdx
subq %rdi, %rdx
sarq $0x3, %rdx
movq 0x18(%rsp), %rsi
cmpq %rsi, %rdx
ja 0x77f09
jmp 0x78848
movq 0x10(%rsp), %r14
incl %r14d
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
movq %r14, %r13
cmpq %r14, %rdx
ja 0x77ed5
movq 0x70(%rsp), %r14
movl %r14d, %esi
movq 0x15c8(%rbx), %rax
subq 0x15c0(%rbx), %rax
sarq $0x3, %rax
cmpq %rsi, %rax
ja 0x77ea7
movl 0x4(%rsp), %r14d
cmpl $0x3, 0x1614(%rbx)
jb 0x782b5
movq 0xfdd56(%rip), %rdi     # 0x175f90
leaq 0x861c9(%rip), %rsi     # 0xfe40a
movl $0x30, %edx
callq 0x22ab0
movq 0xfdd3e(%rip), %rdi     # 0x175f90
movq %r14, %rsi
callq 0x22650
movq %rax, %r14
leaq 0x861d7(%rip), %rsi     # 0xfe43b
movl $0x27, %edx
movq %rax, %rdi
callq 0x22ab0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r14, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
jmp 0x782b5
cmpq $0x8, %rcx
jne 0x788a8
movq (%rax), %rsi
addq $0x30, %rsi
leaq 0x78(%rsp), %rdi
callq 0xacbc6
movq 0x15c0(%rbx), %rax
cmpq %rax, 0x15c8(%rbx)
je 0x783ac
movl $0x1, %r13d
xorl %ebp, %ebp
leaq 0x78(%rsp), %r14
movq 0xfdcb3(%rip), %r15     # 0x175f90
movq (%rax,%rbp,8), %rdi
addq $0x30, %rdi
movq %r14, %rsi
callq 0xacbc6
cmpl $0x0, 0x1614(%rbx)
je 0x78388
movl $0x6, %edx
movq %r15, %rdi
leaq 0x80e91(%rip), %rsi     # 0xf919a
callq 0x22ab0
movq %r15, %rdi
movq %rbp, %rsi
callq 0x22650
movq %rax, %r12
movl $0x11, %edx
movq %rax, %rdi
leaq 0x86138(%rip), %rsi     # 0xfe463
callq 0x22ab0
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %rbp, %rdx
jbe 0x788aa
movq (%rax,%rbp,8), %rax
movq 0x58(%rax), %rsi
movq %r12, %rdi
callq 0x22650
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
movl %r13d, %ebp
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
incl %r13d
cmpq %rbp, %rcx
ja 0x782dd
leaq 0x1590(%rbx), %r15
movq %r15, %rdi
callq 0xae628
leaq 0x78(%rsp), %rsi
movq %r15, %rdi
callq 0xacbc6
movq %r15, %rdi
callq 0xae628
movq 0x15c0(%rbx), %rax
xorl %r14d, %r14d
cmpq %rax, 0x15c8(%rbx)
je 0x7856a
leaq 0x1598(%rbx), %rcx
movq %rcx, 0x8(%rsp)
leaq 0x20(%rsp), %r12
movl $0x0, 0x4(%rsp)
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
jbe 0x78867
movq (%rax,%r14,8), %rax
movq 0x48(%rax), %rbp
movq (%rcx,%r14,8), %rax
addq $0x38, %rax
cmpq %rax, %rbp
je 0x78544
leaq 0x20(%rbp), %rsi
movq %r15, %rdi
callq 0x4623c
cmpq 0x8(%rsp), %rax
jne 0x78516
leaq 0x30(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rbp), %rsi
movq 0x28(%rbp), %rdx
addq %rsi, %rdx
movq %r12, %r13
movq %r12, %rdi
callq 0x32180
movq 0x40(%rbp), %rax
movq %rax, 0x40(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0x51f58
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x7849e
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x229c0
incl 0x4(%rsp)
cmpl $0x3, 0x1614(%rbx)
jb 0x78516
movl $0xf, %edx
movq 0xfdad9(%rip), %rdi     # 0x175f90
leaq 0x85fb7(%rip), %rsi     # 0xfe475
callq 0x22ab0
movq 0x20(%rbp), %rsi
movq 0x28(%rbp), %rdx
movq 0xfdabe(%rip), %rdi     # 0x175f90
callq 0x22ab0
movq %rax, %r13
movl $0x15, %edx
movq %rax, %rdi
leaq 0x85f9c(%rip), %rsi     # 0xfe485
callq 0x22ab0
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r13, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
movq %rbp, %rdi
callq 0x22670
movq %rax, %rbp
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %r14, %rdx
ja 0x78426
jmp 0x78867
incl %r14d
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r14, %rcx
ja 0x78400
movl 0x4(%rsp), %r14d
movq %r14, 0x10(%rsp)
cmpl $0x3, 0x1614(%rbx)
jb 0x785cb
movq 0xfda11(%rip), %rdi     # 0x175f90
leaq 0x85f15(%rip), %rsi     # 0xfe49b
movl $0x16, %edx
callq 0x22ab0
movq 0xfd9f9(%rip), %rdi     # 0x175f90
movq 0x10(%rsp), %rsi
callq 0x22650
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x22940
movsbl %al, %esi
movq %r15, %rdi
callq 0x22050
movq %rax, %rdi
callq 0x22660
leaq 0x28(%rsp), %rax
movl $0x0, (%rax)
xorl %ebp, %ebp
movq %rbp, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rbp, 0x20(%rax)
movq 0x15c8(%rbx), %rax
cmpq 0x15c0(%rbx), %rax
je 0x78774
leaq 0x1980(%rbx), %rax
movq %rax, 0x18(%rsp)
leaq 0x1598(%rbx), %r14
movq 0x18(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0xa7e74
movq 0x15c0(%rbx), %rcx
movq 0x15c8(%rbx), %rdx
subq %rcx, %rdx
sarq $0x3, %rdx
cmpq %rbp, %rdx
jbe 0x78897
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %rbp, %rdx
jbe 0x78878
movq (%rcx,%rbp,8), %rcx
movq 0x48(%rcx), %r13
movl $0x0, 0x4(%rsp)
movq (%rax,%rbp,8), %rax
addq $0x38, %rax
cmpq %rax, %r13
je 0x78757
movq 0x15a8(%rbx), %r12
cmpq %r14, %r12
je 0x78725
movl 0x4(%rsp), %eax
movq %rax, 0x8(%rsp)
xorl %r15d, %r15d
movq 0x28(%r13), %rdx
cmpq 0x28(%r12), %rdx
jne 0x7870e
testq %rdx, %rdx
je 0x786b9
movq 0x20(%r12), %rsi
movq 0x20(%r13), %rdi
callq 0x229f0
testl %eax, %eax
jne 0x7870e
movq 0x1980(%rbx), %rdi
movq 0x1988(%rbx), %rdx
subq %rdi, %rdx
sarq $0x4, %rdx
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rdx
movq %rbp, %rsi
cmpq %rbp, %rdx
jbe 0x7883a
leaq (%rsi,%rsi,2), %rax
shlq $0x4, %rax
addq %rax, %rdi
movq %r15, %rax
shlq $0x20, %rax
addq 0x8(%rsp), %rax
movq %rax, 0x50(%rsp)
leaq 0x50(%rsp), %rsi
callq 0xae9d2
incl %r15d
movq %r12, %rdi
callq 0x22670
movq %rax, %r12
cmpq %r14, %rax
jne 0x78697
incl 0x4(%rsp)
movq %r13, %rdi
callq 0x22670
movq %rax, %r13
movq 0x15c0(%rbx), %rax
movq 0x15c8(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %rbp, %rdx
ja 0x7866a
jmp 0x78878
incl %ebp
movq 0x15c8(%rbx), %rax
subq 0x15c0(%rbx), %rax
sarq $0x3, %rax
cmpq %rbp, %rax
ja 0x7860f
cmpl $0x3, 0x1614(%rbx)
jb 0x787e4
movq 0xfd80c(%rip), %rdi     # 0x175f90
leaq 0x85d27(%rip), %rsi     # 0xfe4b2
movl $0x22, %edx
callq 0x22ab0
movq 0xfd7f4(%rip), %rdi     # 0x175f90
movq 0x10(%rsp), %rsi
callq 0x22650
movq %rax, %rbx
leaq 0x85d25(%rip), %rsi     # 0xfe4d5
movl $0x1b, %edx
movq %rax, %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 0x20(%rsp), %rdi
callq 0xacef8
leaq 0x78(%rsp), %rdi
callq 0x51992
addq $0xa8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x7aeb4(%rip), %rdi     # 0xf36c5
movq %r13, %rsi
xorl %eax, %eax
callq 0x22f40
leaq 0x7aea3(%rip), %rdi     # 0xf36c5
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae95(%rip), %rdi     # 0xf36c5
movq %r13, %rsi
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae84(%rip), %rdi     # 0xf36c5
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae76(%rip), %rdi     # 0xf36c5
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae68(%rip), %rdi     # 0xf36c5
movq %r13, %rsi
xorl %eax, %eax
callq 0x22f40
movq %r14, %rsi
leaq 0x7ae54(%rip), %rdi     # 0xf36c5
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae46(%rip), %rdi     # 0xf36c5
movq %rbp, %rsi
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae35(%rip), %rdi     # 0xf36c5
xorl %eax, %eax
callq 0x22f40
leaq 0x7ae27(%rip), %rdi     # 0xf36c5
movq %rbp, %rsi
xorl %eax, %eax
callq 0x22f40
xorl %ebp, %ebp
leaq 0x7ae14(%rip), %rdi     # 0xf36c5
movq %rbp, %rsi
xorl %eax, %eax
callq 0x22f40
jmp 0x788d7
jmp 0x78934
jmp 0x788d7
jmp 0x788d7
jmp 0x78934
jmp 0x78934
jmp 0x78934
jmp 0x788f0
jmp 0x788d7
jmp 0x78934
jmp 0x78934
jmp 0x78934
jmp 0x78934
jmp 0x788d7
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0xacef8
jmp 0x78937
jmp 0x788f0
jmp 0x788f0
jmp 0x78934
jmp 0x78934
jmp 0x78934
movq %rax, %rbx
jmp 0x78914
movq %rax, %rbx
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x78914
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x229c0
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
je 0x78937
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x229c0
jmp 0x78937
jmp 0x78934
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x51992
movq %rbx, %rdi
callq 0x23240
nop