// File: medvedevgroup[P]varmatch/src/wholegenome.cpp
// Function: WholeGenome::ClusteringMatchMultiThread()
void WholeGenome::ClusteringMatchMultiThread() {
	int start = 0;
	int cluster_number = variants_by_cluster.size(); // cluster number
	int cluster_end_boundary = start + cluster_number; // end cluster id, exclusive
	int cluster_step = cluster_number / thread_num; // assign clusters to threads
	if (cluster_step * thread_num < cluster_number) cluster_step++;
	int end = start + cluster_step;
	//initialize vector size
	//complex_match_records = new vector<string>*[thread_num];
	match_records_by_mode_by_thread = new vector<string>**[thread_num];

    //query_matches_by_mode_by_thread = new vector<int> ** [thread_num];

	for(int i = 0; i < thread_num; i++){
        match_records_by_mode_by_thread[i] = new vector<string>*[MATCH_MODE_NUM];
        //max_path_num_by_mode_by_thread.push_back(vector<int>());
        for(int j = 0; j < MATCH_MODE_NUM; j++){
            match_records_by_mode_by_thread[i][j] = new vector<string>;
            //max_path_num_by_mode_by_thread[i].push_back(0);
        }
	}

    baseline_total_match_num = new vector<int>** [thread_num];
    query_total_match_num = new vector<int> ** [thread_num];

    baseline_total_edit_distance = new vector<int>** [thread_num];
    query_total_edit_distance = new vector<int>** [thread_num];

    for(int i = 0; i < thread_num; i++){
        
        baseline_total_match_num[i] = new vector<int>* [ROC_SAMPLE_NUM];
        query_total_match_num[i] = new vector<int>* [ROC_SAMPLE_NUM];

        baseline_total_edit_distance[i] = new vector<int> * [ROC_SAMPLE_NUM];
        query_total_edit_distance[i] = new vector<int>* [ROC_SAMPLE_NUM];

        for(int j = 0; j < ROC_SAMPLE_NUM; j++){
            baseline_total_match_num[i][j] = new vector<int>;
            baseline_total_match_num[i][j]->resize(MATCH_MODE_NUM, 0);
            query_total_match_num[i][j] = new vector<int>;
            query_total_match_num[i][j]->resize(MATCH_MODE_NUM, 0);

            baseline_total_edit_distance[i][j] = new vector<int>;
            baseline_total_edit_distance[i][j]->resize(MATCH_MODE_NUM, 0);
            query_total_edit_distance[i][j] = new vector<int>;
            query_total_edit_distance[i][j]->resize(MATCH_MODE_NUM, 0);
        }
    }

	vector<thread> threads;
	//spawn threads
	unsigned i = 0;
	for (; i < thread_num - 1; i++) {
		threads.push_back(thread(&WholeGenome::ClusteringMatchInThread, this, start, end, i));
		start = end;
		end = start + cluster_step;
	}
	// also you need to do a job in main thread
	// i equals to (thread_num - 1)
	if (i != thread_num - 1) {
		dout << "[Error] thread number not match" << endl;
	}
	if (start >= variants_by_cluster.size()) {
		dout << "[Error] index out of map range" << endl;
	}
	else {
		ClusteringMatchInThread(start, end, i);
	}

	// call join() on each thread in turn before this function?
    std::for_each(threads.begin(), threads.end(), std::mem_fn(&std::thread::join));

    //output all results
    cout << "writing results..." << endl;
    ofstream output_stat_file;
    output_stat_file.open(output_dir + "/" + output_prefix+".stat");

    cout << "=========VarMatch Result Stat.=======" << endl;
    string stat_head_string = "#score_unit\tmatch_mode\tscore_unit\tqual_threshold\tbaseline_match_num\tquery_match_num\tquery_total_num\tbaseline_total_ED\tquery_total_ED";
    cout << stat_head_string << endl;
    output_stat_file << "##Baseline:" << baseline_variant_total_num << endl;
    output_stat_file << "##Query:"<< query_variant_total_num << endl;
    output_stat_file << stat_head_string << endl;

    int score_unit;
    int match_mode;
    int score_scheme;

    for(int x = 0; x < score_unit_list.size(); x++){
        score_unit = score_unit_list[x];
        for(int y = 0; y < match_mode_list.size(); y++){
            match_mode = match_mode_list[y];
            for(int z = 0; z < score_scheme_list.size(); z++){
                score_scheme = score_scheme_list[z];
                int mode_index = GetIndexFromMatchScore(score_unit, match_mode, score_scheme);
                int total_ref_complex = 0;
                int total_que_complex = 0;

                string threshold_string = "";
                string baseline_match_num_string = "";
                string query_match_num_string = "";
                string query_total_num_string = "";

                string baseline_edit_distance_string = "";
                string query_edit_distance_string = "";

                for(int t = 0; t < threshold_num; t++){
                    
                    threshold_string += to_string(threshold_list[t]);

                    int baseline_match_num_by_threshold_by_mode = 0;
                    int query_match_num_by_threshold_by_mode = 0;

                    int baseline_edit_distance_by_threshold_by_mode = 0;
                    int query_edit_distance_by_threshold_by_mode = 0;

                    for(int i = 0; i < thread_num; i++){
                        baseline_match_num_by_threshold_by_mode += baseline_total_match_num[i][t]->at(mode_index);
                        query_match_num_by_threshold_by_mode += query_total_match_num[i][t]->at(mode_index);

                        baseline_edit_distance_by_threshold_by_mode += baseline_total_edit_distance[i][t]->at(mode_index);
                        query_edit_distance_by_threshold_by_mode += query_total_edit_distance[i][t]->at(mode_index);
                    }

                    baseline_match_num_string += to_string(baseline_match_num_by_threshold_by_mode);
                    query_match_num_string += to_string(query_match_num_by_threshold_by_mode);
                    query_total_num_string += to_string((int)(query_variant_total_num * (1-per_list[t])) );

                    baseline_edit_distance_string += to_string(baseline_edit_distance_by_threshold_by_mode);
                    query_edit_distance_string += to_string(query_edit_distance_by_threshold_by_mode);

                    if(t < threshold_num-1){
                        threshold_string += ",";
                        baseline_match_num_string += ",";
                        query_match_num_string += ",";
                        query_total_num_string += ",";
                        baseline_edit_distance_string += ",";
                        query_edit_distance_string += ",";
                    }
                                  
                }

                string total_match_num_string = to_string(score_unit) + "\t" +
                                                to_string(match_mode) + "\t" + 
                                                to_string(score_scheme) + "\t" +
                                                threshold_string + "\t" +
                                                baseline_match_num_string + "\t" + 
                                                query_match_num_string + "\t" + 
                                                query_total_num_string;// + "\t" + to_string(mode_index);
                cout << total_match_num_string << "\t" << baseline_edit_distance_string << "\t" << query_edit_distance_string << endl;;
                output_stat_file << total_match_num_string << endl;
            }
        }
    }
    output_stat_file.close();

    int bench_mode_index = GetIndexFromMatchScore(0, 0, 0);

    for(int x = 0; x < score_unit_list.size(); x++){
        score_unit = score_unit_list[x];
        for(int y = 0; y < match_mode_list.size(); y++){
            match_mode = match_mode_list[y];
            for(int z = 0; z < score_scheme_list.size(); z++){
                score_scheme = score_scheme_list[z];
                int mode_index = GetIndexFromMatchScore(score_unit, match_mode, score_scheme);
                string filename_index = to_string(score_unit) + "_" + to_string(match_mode) + "_" + to_string(score_scheme);
                
                ofstream output_complex_file;
                output_complex_file.open(output_dir + "/" + output_prefix+"."+filename_index+".match");

                output_complex_file << "##VCF1:" << ref_vcf_filename << endl;
                output_complex_file << "##VCF2:" << que_vcf_filename << endl;
                output_complex_file << "#CHROM\tPOS\tREF\tALT\tVCF1\tVCF2\tPHASE1\tPHASE2\tSCORE" << endl;

                for(int i = 0; i < thread_num; i++){
                    for(int k = 0; k < match_records_by_mode_by_thread[i][mode_index]->size(); k++){
                        if (match_records_by_mode_by_thread[i][mode_index]->at(k).find_first_not_of(' ') != std::string::npos) {
                            //if(match_records_by_mode_by_thread[i][mode_index]->at(k)[0] == '$'){
                                //int bench_mode_index = stoi(match_records_by_mode_by_thread[i][mode_index]->at(k).erase(0,1));
                                //output_complex_file << match_records_by_mode_by_thread[i][0]->at(k);
                            //}else{
                                output_complex_file << match_records_by_mode_by_thread[i][mode_index]->at(k);
                            //}
                        }
                    }
                }
                output_complex_file.close();
            }
        }
    }

    // int max_path_num = 0;
    // for(int i = 0; i < thread_num; i++){
    //     for(int j = 0; j < MATCH_MODE_NUM; j++){
    //         max_path_num = max(max_path_num, max_path_num_by_mode_by_thread[i][j]);
    //         //max_path_num += max_path_num_by_mode_by_thread[i][j];
    //     }
    // }

    //cout << "max path number: " << max_path_num << endl;

    // clear all matching records
	for(int i = 0; i < thread_num; i++){
        for(int j = 0; j < MATCH_MODE_NUM; j++){
            delete match_records_by_mode_by_thread[i][j];

        }
        for(int j = 0; j < ROC_SAMPLE_NUM; j++){
            delete baseline_total_match_num[i][j];
            delete query_total_match_num[i][j];

            delete baseline_total_edit_distance[i][j];
            delete query_total_edit_distance[i][j];
        }
        delete[] match_records_by_mode_by_thread[i];
        delete[] baseline_total_match_num[i];
        delete[] query_total_match_num[i];
        
        delete[] baseline_total_edit_distance[i];
        delete[] query_total_edit_distance[i];
	}
	delete[] match_records_by_mode_by_thread;
    delete[] baseline_total_match_num;
    delete[] query_total_match_num;

    delete[] baseline_total_edit_distance;
    delete[] query_total_edit_distance;
    //max_path_num_by_mode_by_thread.clear();

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd00, %rsp            # imm = 0xD00
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0xad8(%rbp)
movl $0x0, -0xc(%rbp)
addq $0x160, %rdi            # imm = 0x160
callq 0x338b0
movq -0xad8(%rbp), %rcx
movl %eax, -0x10(%rbp)
movl -0xc(%rbp), %eax
addl -0x10(%rbp), %eax
movl %eax, -0x14(%rbp)
movl -0x10(%rbp), %eax
cltd
idivl 0x4(%rcx)
movl %eax, -0x18(%rbp)
movl -0x18(%rbp), %eax
imull 0x4(%rcx), %eax
cmpl -0x10(%rbp), %eax
jge 0x2e50f
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
movq -0xad8(%rbp), %rax
movl -0xc(%rbp), %ecx
addl -0x18(%rbp), %ecx
movl %ecx, -0x1c(%rbp)
movslq 0x4(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x6040
movq %rax, %rcx
movq -0xad8(%rbp), %rax
movq %rcx, 0x178(%rax)
movl $0x0, -0x20(%rbp)
movq -0xad8(%rbp), %rcx
movl -0x20(%rbp), %eax
cmpl 0x4(%rcx), %eax
jge 0x2e5f8
movl $0x80, %edi
callq 0x6040
movq %rax, %rdx
movq -0xad8(%rbp), %rax
movq 0x178(%rax), %rax
movslq -0x20(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, -0x24(%rbp)
cmpl $0x10, -0x24(%rbp)
jge 0x2e5e8
movl $0x18, %edi
callq 0x6430
movq %rax, %rdi
movq %rdi, -0xae0(%rbp)
callq 0x12d30
movq -0xad8(%rbp), %rax
movq -0xae0(%rbp), %rdx
movq 0x178(%rax), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x24(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2e599
jmp 0x2e5ea
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x2e55c
movq -0xad8(%rbp), %rax
movslq 0x4(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x6040
movq %rax, %rcx
movq -0xad8(%rbp), %rax
movq %rcx, 0x180(%rax)
movslq 0x4(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x6040
movq %rax, %rcx
movq -0xad8(%rbp), %rax
movq %rcx, 0x188(%rax)
movslq 0x4(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x6040
movq %rax, %rcx
movq -0xad8(%rbp), %rax
movq %rcx, 0x190(%rax)
movslq 0x4(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x6040
movq %rax, %rcx
movq -0xad8(%rbp), %rax
movq %rcx, 0x198(%rax)
movl $0x0, -0x28(%rbp)
movq -0xad8(%rbp), %rcx
movl -0x28(%rbp), %eax
cmpl 0x4(%rcx), %eax
jge 0x2e954
movl $0x28, %edi
callq 0x6040
movq %rax, %rdx
movq -0xad8(%rbp), %rax
movq 0x180(%rax), %rax
movslq -0x28(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x28, %edi
callq 0x6040
movq %rax, %rdx
movq -0xad8(%rbp), %rax
movq 0x188(%rax), %rax
movslq -0x28(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x28, %edi
callq 0x6040
movq %rax, %rdx
movq -0xad8(%rbp), %rax
movq 0x190(%rax), %rax
movslq -0x28(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x28, %edi
callq 0x6040
movq %rax, %rdx
movq -0xad8(%rbp), %rax
movq 0x198(%rax), %rax
movslq -0x28(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, -0x2c(%rbp)
cmpl $0x5, -0x2c(%rbp)
jge 0x2e944
movl $0x18, %edi
callq 0x6430
movq %rax, %rdi
movq %rdi, -0xb00(%rbp)
callq 0x32270
movq -0xb00(%rbp), %rsi
movq -0xad8(%rbp), %rax
movq 0x180(%rax), %rcx
movslq -0x28(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq -0x2c(%rbp), %rdx
movq %rsi, (%rcx,%rdx,8)
movq 0x180(%rax), %rax
movslq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movl $0x0, -0x30(%rbp)
movl $0x10, %esi
leaq -0x30(%rbp), %rdx
callq 0x36080
movl $0x18, %edi
callq 0x6430
movq %rax, %rdi
movq %rdi, -0xaf8(%rbp)
callq 0x32270
movq -0xaf8(%rbp), %rsi
movq -0xad8(%rbp), %rax
movq 0x188(%rax), %rcx
movslq -0x28(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq -0x2c(%rbp), %rdx
movq %rsi, (%rcx,%rdx,8)
movq 0x188(%rax), %rax
movslq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movl $0x0, -0x34(%rbp)
movl $0x10, %esi
leaq -0x34(%rbp), %rdx
callq 0x36080
movl $0x18, %edi
callq 0x6430
movq %rax, %rdi
movq %rdi, -0xaf0(%rbp)
callq 0x32270
movq -0xaf0(%rbp), %rsi
movq -0xad8(%rbp), %rax
movq 0x190(%rax), %rcx
movslq -0x28(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq -0x2c(%rbp), %rdx
movq %rsi, (%rcx,%rdx,8)
movq 0x190(%rax), %rax
movslq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movl $0x0, -0x38(%rbp)
movl $0x10, %esi
leaq -0x38(%rbp), %rdx
callq 0x36080
movl $0x18, %edi
callq 0x6430
movq %rax, %rdi
movq %rdi, -0xae8(%rbp)
callq 0x32270
movq -0xae8(%rbp), %rsi
movq -0xad8(%rbp), %rax
movq 0x198(%rax), %rcx
movslq -0x28(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movslq -0x2c(%rbp), %rdx
movq %rsi, (%rcx,%rdx,8)
movq 0x198(%rax), %rax
movslq -0x28(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x2c(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movl $0x0, -0x3c(%rbp)
movl $0x10, %esi
leaq -0x3c(%rbp), %rdx
callq 0x36080
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x2e784
jmp 0x2e946
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x2e6de
leaq -0x58(%rbp), %rdi
callq 0x33500
movl $0x0, -0x5c(%rbp)
movq -0xad8(%rbp), %rcx
movl -0x5c(%rbp), %eax
movl 0x4(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jae 0x2ea25
movq -0xad8(%rbp), %rax
leaq -0xd88a(%rip), %rcx     # 0x21100
movq %rcx, -0x78(%rbp)
movq $0x0, -0x70(%rbp)
movq %rax, -0x80(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x78(%rbp), %rsi
leaq -0x80(%rbp), %rdx
leaq -0xc(%rbp), %rcx
leaq -0x1c(%rbp), %r8
leaq -0x5c(%rbp), %r9
callq 0x36130
jmp 0x2e9b9
leaq -0x58(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x335e0
jmp 0x2e9c8
leaq -0x68(%rbp), %rdi
callq 0x336e0
movl -0x1c(%rbp), %eax
movl %eax, -0xc(%rbp)
movl -0xc(%rbp), %eax
addl -0x18(%rbp), %eax
movl %eax, -0x1c(%rbp)
movl -0x5c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x5c(%rbp)
jmp 0x2e964
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x308c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x336e0
jmp 0x308c0
movq -0xad8(%rbp), %rcx
movl -0x5c(%rbp), %eax
movl 0x4(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
je 0x2ea6c
movq 0x45578(%rip), %rdi     # 0x73fb8
leaq 0x26e0a(%rip), %rsi     # 0x55851
callq 0x6420
movq %rax, -0xb08(%rbp)
jmp 0x2ea55
movq -0xb08(%rbp), %rdi
movq 0x4551d(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2ea6a
jmp 0x2ea6c
movq -0xad8(%rbp), %rdi
movslq -0xc(%rbp), %rax
movq %rax, -0xb10(%rbp)
addq $0x160, %rdi            # imm = 0x160
callq 0x338b0
movq %rax, %rcx
movq -0xb10(%rbp), %rax
cmpq %rcx, %rax
jb 0x2eacc
movq 0x45518(%rip), %rdi     # 0x73fb8
leaq 0x26dca(%rip), %rsi     # 0x55871
callq 0x6420
movq %rax, -0xb18(%rbp)
jmp 0x2eab5
movq -0xb18(%rbp), %rdi
movq 0x454bd(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2eaca
jmp 0x2eae5
movq -0xad8(%rbp), %rdi
movl -0xc(%rbp), %esi
movl -0x1c(%rbp), %edx
movl -0x5c(%rbp), %ecx
callq 0x21100
jmp 0x2eae3
jmp 0x2eae5
leaq -0x58(%rbp), %rdi
movq %rdi, -0xb30(%rbp)
callq 0x33780
movq -0xb30(%rbp), %rdi
movq %rax, -0x98(%rbp)
callq 0x337b0
movq %rax, -0xa0(%rbp)
movq 0x454b2(%rip), %rax     # 0x73fc8
movq %rax, -0xc0(%rbp)
movq $0x0, -0xb8(%rbp)
movq -0xc0(%rbp), %rdi
movq -0xb8(%rbp), %rsi
callq 0x337e0
movq %rax, -0xb0(%rbp)
movq %rdx, -0xa8(%rbp)
movq -0x98(%rbp), %rdi
movq -0xa0(%rbp), %rsi
movq -0xb0(%rbp), %rdx
movq -0xa8(%rbp), %rcx
callq 0x33710
movq %rdx, -0xb28(%rbp)
movq %rax, -0xb20(%rbp)
jmp 0x2eb7a
movq -0xb28(%rbp), %rax
movq -0xb20(%rbp), %rcx
movq %rcx, -0xd0(%rbp)
movq %rax, -0xc8(%rbp)
movq 0x4541b(%rip), %rdi     # 0x73fb8
leaq 0x26cec(%rip), %rsi     # 0x55890
callq 0x6420
movq %rax, -0xb38(%rbp)
jmp 0x2ebb2
movq -0xb38(%rbp), %rdi
movq 0x453c0(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2ebc7
leaq -0x2d0(%rbp), %rdi
callq 0x6710
jmp 0x2ebd5
movq -0xad8(%rbp), %rsi
addq $0x1c0, %rsi            # imm = 0x1C0
leaq 0x269b5(%rip), %rdx     # 0x5559f
leaq -0x330(%rbp), %rdi
callq 0xe200
jmp 0x2ebf8
movq -0xad8(%rbp), %rdx
addq $0x1a0, %rdx            # imm = 0x1A0
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0xe1b0
jmp 0x2ec1b
leaq 0x26c81(%rip), %rdx     # 0x558a3
leaq -0x2f0(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0xb0f0
jmp 0x2ec37
leaq -0x2d0(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
movl $0x10, %edx
callq 0x6200
jmp 0x2ec51
leaq -0x2f0(%rbp), %rdi
callq 0x6828
leaq -0x310(%rbp), %rdi
callq 0x6828
leaq -0x330(%rbp), %rdi
callq 0x6828
movq 0x4533c(%rip), %rdi     # 0x73fb8
leaq 0x26c26(%rip), %rsi     # 0x558a9
callq 0x6420
movq %rax, -0xb40(%rbp)
jmp 0x2ec91
movq -0xb40(%rbp), %rdi
movq 0x452e1(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2eca6
leaq -0x351(%rbp), %rdi
movq %rdi, -0xb48(%rbp)
callq 0x6760
movq -0xb48(%rbp), %rdx
leaq 0x26c08(%rip), %rsi     # 0x558cf
leaq -0x350(%rbp), %rdi
callq 0x9680
jmp 0x2ecd5
leaq -0x351(%rbp), %rdi
callq 0x64b0
movq 0x452d0(%rip), %rdi     # 0x73fb8
leaq -0x350(%rbp), %rsi
callq 0x63e0
movq %rax, -0xb50(%rbp)
jmp 0x2ecfd
movq -0xb50(%rbp), %rdi
movq 0x45275(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2ed12
leaq 0x26c3b(%rip), %rsi     # 0x55954
leaq -0x2d0(%rbp), %rdi
callq 0x6420
movq %rax, -0xb58(%rbp)
jmp 0x2ed2e
movq -0xb58(%rbp), %rdi
movq -0xad8(%rbp), %rax
movl 0x48(%rax), %esi
callq 0x6740
movq %rax, -0xb60(%rbp)
jmp 0x2ed4d
movq -0xb60(%rbp), %rdi
movq 0x45225(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2ed62
leaq 0x26bf7(%rip), %rsi     # 0x55960
leaq -0x2d0(%rbp), %rdi
callq 0x6420
movq %rax, -0xb68(%rbp)
jmp 0x2ed7e
movq -0xb68(%rbp), %rdi
movq -0xad8(%rbp), %rax
movl 0x4c(%rax), %esi
callq 0x6740
movq %rax, -0xb70(%rbp)
jmp 0x2ed9d
movq -0xb70(%rbp), %rdi
movq 0x451d5(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2edb2
leaq -0x2d0(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x63e0
movq %rax, -0xb78(%rbp)
jmp 0x2edce
movq -0xb78(%rbp), %rdi
movq 0x451a4(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2ede3
movl $0x0, -0x364(%rbp)
movq -0xad8(%rbp), %rdi
movslq -0x364(%rbp), %rax
movq %rax, -0xb80(%rbp)
addq $0x1f0, %rdi            # imm = 0x1F0
callq 0x19a40
movq %rax, %rcx
movq -0xb80(%rbp), %rax
cmpq %rcx, %rax
jae 0x2fd05
movq -0xad8(%rbp), %rdi
addq $0x1f0, %rdi            # imm = 0x1F0
movslq -0x364(%rbp), %rsi
callq 0x19a60
movl (%rax), %eax
movl %eax, -0x358(%rbp)
movl $0x0, -0x368(%rbp)
movq -0xad8(%rbp), %rdi
movslq -0x368(%rbp), %rax
movq %rax, -0xb88(%rbp)
addq $0x208, %rdi            # imm = 0x208
callq 0x19a40
movq %rax, %rcx
movq -0xb88(%rbp), %rax
cmpq %rcx, %rax
jae 0x2fcef
movq -0xad8(%rbp), %rdi
addq $0x208, %rdi            # imm = 0x208
movslq -0x368(%rbp), %rsi
callq 0x19a60
movl (%rax), %eax
movl %eax, -0x35c(%rbp)
movl $0x0, -0x36c(%rbp)
movq -0xad8(%rbp), %rdi
movslq -0x36c(%rbp), %rax
movq %rax, -0xb90(%rbp)
addq $0x220, %rdi            # imm = 0x220
callq 0x19a40
movq %rax, %rcx
movq -0xb90(%rbp), %rax
cmpq %rcx, %rax
jae 0x2fcd9
movq -0xad8(%rbp), %rdi
addq $0x220, %rdi            # imm = 0x220
movslq -0x36c(%rbp), %rsi
callq 0x19a60
movq -0xad8(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x360(%rbp)
movl -0x358(%rbp), %esi
movl -0x35c(%rbp), %edx
movl -0x360(%rbp), %ecx
callq 0x35500
movl %eax, -0xb94(%rbp)
jmp 0x2ef29
movl -0xb94(%rbp), %eax
movl %eax, -0x370(%rbp)
movl $0x0, -0x374(%rbp)
movl $0x0, -0x378(%rbp)
leaq -0x399(%rbp), %rdi
movq %rdi, -0xba0(%rbp)
callq 0x6760
movq -0xba0(%rbp), %rdx
leaq 0x26634(%rip), %rsi     # 0x5559e
leaq -0x398(%rbp), %rdi
callq 0x9680
jmp 0x2ef78
leaq -0x399(%rbp), %rdi
callq 0x64b0
leaq -0x3c1(%rbp), %rdi
movq %rdi, -0xba8(%rbp)
callq 0x6760
movq -0xba8(%rbp), %rdx
leaq 0x265f9(%rip), %rsi     # 0x5559e
leaq -0x3c0(%rbp), %rdi
callq 0x9680
jmp 0x2efb3
leaq -0x3c1(%rbp), %rdi
callq 0x64b0
leaq -0x3e9(%rbp), %rdi
movq %rdi, -0xbb0(%rbp)
callq 0x6760
movq -0xbb0(%rbp), %rdx
leaq 0x265be(%rip), %rsi     # 0x5559e
leaq -0x3e8(%rbp), %rdi
callq 0x9680
jmp 0x2efee
leaq -0x3e9(%rbp), %rdi
callq 0x64b0
leaq -0x411(%rbp), %rdi
movq %rdi, -0xbb8(%rbp)
callq 0x6760
movq -0xbb8(%rbp), %rdx
leaq 0x26583(%rip), %rsi     # 0x5559e
leaq -0x410(%rbp), %rdi
callq 0x9680
jmp 0x2f029
leaq -0x411(%rbp), %rdi
callq 0x64b0
leaq -0x439(%rbp), %rdi
movq %rdi, -0xbc0(%rbp)
callq 0x6760
movq -0xbc0(%rbp), %rdx
leaq 0x26548(%rip), %rsi     # 0x5559e
leaq -0x438(%rbp), %rdi
callq 0x9680
jmp 0x2f064
leaq -0x439(%rbp), %rdi
callq 0x64b0
leaq -0x461(%rbp), %rdi
movq %rdi, -0xbc8(%rbp)
callq 0x6760
movq -0xbc8(%rbp), %rdx
leaq 0x2650d(%rip), %rsi     # 0x5559e
leaq -0x460(%rbp), %rdi
callq 0x9680
jmp 0x2f09f
leaq -0x461(%rbp), %rdi
callq 0x64b0
movl $0x0, -0x468(%rbp)
movq -0xad8(%rbp), %rcx
movl -0x468(%rbp), %eax
cmpl 0x268(%rcx), %eax
jge 0x2f725
movq -0xad8(%rbp), %rdi
addq $0x250, %rdi            # imm = 0x250
movslq -0x468(%rbp), %rsi
callq 0x34730
movsd (%rax), %xmm0
leaq -0x488(%rbp), %rdi
callq 0x36210
jmp 0x2f0fa
leaq -0x398(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x6560
jmp 0x2f10f
leaq -0x488(%rbp), %rdi
callq 0x6828
movl $0x0, -0x48c(%rbp)
movl $0x0, -0x490(%rbp)
movl $0x0, -0x494(%rbp)
movl $0x0, -0x498(%rbp)
movl $0x0, -0x49c(%rbp)
movq -0xad8(%rbp), %rcx
movl -0x49c(%rbp), %eax
cmpl 0x4(%rcx), %eax
jge 0x2f475
movq -0xad8(%rbp), %rax
movq 0x180(%rax), %rax
movslq -0x49c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x468(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x370(%rbp), %rsi
callq 0x34130
movq %rax, -0xbd0(%rbp)
jmp 0x2f19c
movq -0xad8(%rbp), %rax
movq -0xbd0(%rbp), %rcx
movl (%rcx), %edx
movl -0x48c(%rbp), %ecx
addl %edx, %ecx
movl %ecx, -0x48c(%rbp)
movq 0x188(%rax), %rax
movslq -0x49c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x468(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x370(%rbp), %rsi
callq 0x34130
movq %rax, -0xbd8(%rbp)
jmp 0x2f1ec
movq -0xad8(%rbp), %rax
movq -0xbd8(%rbp), %rcx
movl (%rcx), %edx
movl -0x490(%rbp), %ecx
addl %edx, %ecx
movl %ecx, -0x490(%rbp)
movq 0x190(%rax), %rax
movslq -0x49c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x468(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x370(%rbp), %rsi
callq 0x34130
movq %rax, -0xbe0(%rbp)
jmp 0x2f23c
movq -0xad8(%rbp), %rax
movq -0xbe0(%rbp), %rcx
movl (%rcx), %edx
movl -0x494(%rbp), %ecx
addl %edx, %ecx
movl %ecx, -0x494(%rbp)
movq 0x198(%rax), %rax
movslq -0x49c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x468(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x370(%rbp), %rsi
callq 0x34130
movq %rax, -0xbe8(%rbp)
jmp 0x2f28c
movq -0xbe8(%rbp), %rax
movl (%rax), %eax
addl -0x498(%rbp), %eax
movl %eax, -0x498(%rbp)
movl -0x49c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x49c(%rbp)
jmp 0x2f14d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x308b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2f31e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2f312
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x6828
leaq -0x310(%rbp), %rdi
callq 0x6828
leaq -0x330(%rbp), %rdi
callq 0x6828
jmp 0x308b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x351(%rbp), %rdi
callq 0x64b0
jmp 0x308b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x308a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x399(%rbp), %rdi
callq 0x64b0
jmp 0x308a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x3c1(%rbp), %rdi
callq 0x64b0
jmp 0x2fcc8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x3e9(%rbp), %rdi
callq 0x64b0
jmp 0x2fcbc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x411(%rbp), %rdi
callq 0x64b0
jmp 0x2fcb0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x439(%rbp), %rdi
callq 0x64b0
jmp 0x2fca4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x461(%rbp), %rdi
callq 0x64b0
jmp 0x2fc98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
movl -0x48c(%rbp), %esi
leaq -0x4c0(%rbp), %rdi
callq 0xb190
jmp 0x2f489
leaq -0x3c0(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x6560
jmp 0x2f49e
leaq -0x4c0(%rbp), %rdi
callq 0x6828
movl -0x490(%rbp), %esi
leaq -0x4e0(%rbp), %rdi
callq 0xb190
jmp 0x2f4be
leaq -0x3e8(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0x6560
jmp 0x2f4d3
leaq -0x4e0(%rbp), %rdi
callq 0x6828
movq -0xad8(%rbp), %rdi
cvtsi2ssl 0x4c(%rdi), %xmm0
movss %xmm0, -0xbec(%rbp)
addq $0x270, %rdi            # imm = 0x270
movslq -0x468(%rbp), %rsi
callq 0x32e10
movss -0xbec(%rbp), %xmm0
movss (%rax), %xmm2
movss 0x25d96(%rip), %xmm1    # 0x552b0
subss %xmm2, %xmm1
mulss %xmm1, %xmm0
cvttss2si %xmm0, %esi
leaq -0x500(%rbp), %rdi
callq 0xb190
jmp 0x2f534
leaq -0x410(%rbp), %rdi
leaq -0x500(%rbp), %rsi
callq 0x6560
jmp 0x2f549
leaq -0x500(%rbp), %rdi
callq 0x6828
movl -0x494(%rbp), %esi
leaq -0x520(%rbp), %rdi
callq 0xb190
jmp 0x2f569
leaq -0x438(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x6560
jmp 0x2f57e
leaq -0x520(%rbp), %rdi
callq 0x6828
movl -0x498(%rbp), %esi
leaq -0x540(%rbp), %rdi
callq 0xb190
jmp 0x2f59e
leaq -0x460(%rbp), %rdi
leaq -0x540(%rbp), %rsi
callq 0x6560
jmp 0x2f5b3
leaq -0x540(%rbp), %rdi
callq 0x6828
movq -0xad8(%rbp), %rcx
movl -0x468(%rbp), %eax
movl 0x268(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x2f70f
leaq 0x25f59(%rip), %rsi     # 0x5553d
leaq -0x398(%rbp), %rdi
callq 0x6410
jmp 0x2f5f2
leaq 0x25f44(%rip), %rsi     # 0x5553d
leaq -0x3c0(%rbp), %rdi
callq 0x6410
jmp 0x2f607
leaq 0x25f2f(%rip), %rsi     # 0x5553d
leaq -0x3e8(%rbp), %rdi
callq 0x6410
jmp 0x2f61c
leaq 0x25f1a(%rip), %rsi     # 0x5553d
leaq -0x410(%rbp), %rdi
callq 0x6410
jmp 0x2f631
leaq 0x25f05(%rip), %rsi     # 0x5553d
leaq -0x438(%rbp), %rdi
callq 0x6410
jmp 0x2f646
leaq 0x25ef0(%rip), %rsi     # 0x5553d
leaq -0x460(%rbp), %rdi
callq 0x6410
jmp 0x2f65b
jmp 0x2f70f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x500(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x520(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
jmp 0x2f711
movl -0x468(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x468(%rbp)
jmp 0x2f0b5
movl -0x358(%rbp), %esi
leaq -0x6e0(%rbp), %rdi
callq 0xb190
jmp 0x2f739
leaq 0x25e5d(%rip), %rdx     # 0x5559d
leaq -0x6c0(%rbp), %rdi
leaq -0x6e0(%rbp), %rsi
callq 0xb0f0
jmp 0x2f755
movl -0x35c(%rbp), %esi
leaq -0x700(%rbp), %rdi
callq 0xb190
jmp 0x2f769
leaq -0x6a0(%rbp), %rdi
leaq -0x6c0(%rbp), %rsi
leaq -0x700(%rbp), %rdx
callq 0xde60
jmp 0x2f785
leaq 0x25e11(%rip), %rdx     # 0x5559d
leaq -0x680(%rbp), %rdi
leaq -0x6a0(%rbp), %rsi
callq 0xb0f0
jmp 0x2f7a1
movl -0x360(%rbp), %esi
leaq -0x720(%rbp), %rdi
callq 0xb190
jmp 0x2f7b5
leaq -0x660(%rbp), %rdi
leaq -0x680(%rbp), %rsi
leaq -0x720(%rbp), %rdx
callq 0xde60
jmp 0x2f7d1
leaq 0x25dc5(%rip), %rdx     # 0x5559d
leaq -0x640(%rbp), %rdi
leaq -0x660(%rbp), %rsi
callq 0xb0f0
jmp 0x2f7ed
leaq -0x620(%rbp), %rdi
leaq -0x640(%rbp), %rsi
leaq -0x398(%rbp), %rdx
callq 0xe1b0
jmp 0x2f809
leaq 0x25d8d(%rip), %rdx     # 0x5559d
leaq -0x600(%rbp), %rdi
leaq -0x620(%rbp), %rsi
callq 0xb0f0
jmp 0x2f825
leaq -0x5e0(%rbp), %rdi
leaq -0x600(%rbp), %rsi
leaq -0x3c0(%rbp), %rdx
callq 0xe1b0
jmp 0x2f841
leaq 0x25d55(%rip), %rdx     # 0x5559d
leaq -0x5c0(%rbp), %rdi
leaq -0x5e0(%rbp), %rsi
callq 0xb0f0
jmp 0x2f85d
leaq -0x5a0(%rbp), %rdi
leaq -0x5c0(%rbp), %rsi
leaq -0x3e8(%rbp), %rdx
callq 0xe1b0
jmp 0x2f879
leaq 0x25d1d(%rip), %rdx     # 0x5559d
leaq -0x580(%rbp), %rdi
leaq -0x5a0(%rbp), %rsi
callq 0xb0f0
jmp 0x2f895
leaq -0x560(%rbp), %rdi
leaq -0x580(%rbp), %rsi
leaq -0x410(%rbp), %rdx
callq 0xe1b0
jmp 0x2f8b1
leaq -0x580(%rbp), %rdi
callq 0x6828
leaq -0x5a0(%rbp), %rdi
callq 0x6828
leaq -0x5c0(%rbp), %rdi
callq 0x6828
leaq -0x5e0(%rbp), %rdi
callq 0x6828
leaq -0x600(%rbp), %rdi
callq 0x6828
leaq -0x620(%rbp), %rdi
callq 0x6828
leaq -0x640(%rbp), %rdi
callq 0x6828
leaq -0x660(%rbp), %rdi
callq 0x6828
leaq -0x720(%rbp), %rdi
callq 0x6828
leaq -0x680(%rbp), %rdi
callq 0x6828
leaq -0x6a0(%rbp), %rdi
callq 0x6828
leaq -0x700(%rbp), %rdi
callq 0x6828
leaq -0x6c0(%rbp), %rdi
callq 0x6828
leaq -0x6e0(%rbp), %rdi
callq 0x6828
movq 0x44658(%rip), %rdi     # 0x73fb8
leaq -0x560(%rbp), %rsi
callq 0x63e0
movq %rax, -0xbf8(%rbp)
jmp 0x2f975
movq -0xbf8(%rbp), %rdi
leaq 0x25c1a(%rip), %rsi     # 0x5559d
callq 0x6420
movq %rax, -0xc00(%rbp)
jmp 0x2f991
movq -0xc00(%rbp), %rdi
leaq -0x438(%rbp), %rsi
callq 0x63e0
movq %rax, -0xc08(%rbp)
jmp 0x2f9ad
movq -0xc08(%rbp), %rdi
leaq 0x25be2(%rip), %rsi     # 0x5559d
callq 0x6420
movq %rax, -0xc10(%rbp)
jmp 0x2f9c9
movq -0xc10(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0x63e0
movq %rax, -0xc18(%rbp)
jmp 0x2f9e5
movq -0xc18(%rbp), %rdi
movq 0x4458d(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2f9fa
leaq -0x2d0(%rbp), %rdi
leaq -0x560(%rbp), %rsi
callq 0x63e0
movq %rax, -0xc20(%rbp)
jmp 0x2fa16
movq -0xc20(%rbp), %rdi
movq 0x4455c(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x2fa2b
leaq -0x560(%rbp), %rdi
callq 0x6828
leaq -0x460(%rbp), %rdi
callq 0x6828
leaq -0x438(%rbp), %rdi
callq 0x6828
leaq -0x410(%rbp), %rdi
callq 0x6828
leaq -0x3e8(%rbp), %rdi
callq 0x6828
leaq -0x3c0(%rbp), %rdi
callq 0x6828
leaq -0x398(%rbp), %rdi
callq 0x6828
movl -0x36c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x36c(%rbp)
jmp 0x2eead
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc60
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fc00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fbf4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fbe8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fbdc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x2fbd0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x6828
leaq -0x5a0(%rbp), %rdi
callq 0x6828
leaq -0x5c0(%rbp), %rdi
callq 0x6828
leaq -0x5e0(%rbp), %rdi
callq 0x6828
leaq -0x600(%rbp), %rdi
callq 0x6828
leaq -0x620(%rbp), %rdi
callq 0x6828
leaq -0x640(%rbp), %rdi
callq 0x6828
leaq -0x660(%rbp), %rdi
callq 0x6828
leaq -0x720(%rbp), %rdi
callq 0x6828
leaq -0x680(%rbp), %rdi
callq 0x6828
leaq -0x6a0(%rbp), %rdi
callq 0x6828
leaq -0x700(%rbp), %rdi
callq 0x6828
leaq -0x6c0(%rbp), %rdi
callq 0x6828
leaq -0x6e0(%rbp), %rdi
callq 0x6828
jmp 0x2fc8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x6828
leaq -0x460(%rbp), %rdi
callq 0x6828
leaq -0x438(%rbp), %rdi
callq 0x6828
leaq -0x410(%rbp), %rdi
callq 0x6828
leaq -0x3e8(%rbp), %rdi
callq 0x6828
leaq -0x3c0(%rbp), %rdi
callq 0x6828
leaq -0x398(%rbp), %rdi
callq 0x6828
jmp 0x308a8
jmp 0x2fcdb
movl -0x368(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x368(%rbp)
jmp 0x2ee4d
jmp 0x2fcf1
movl -0x364(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x364(%rbp)
jmp 0x2eded
leaq -0x2d0(%rbp), %rdi
callq 0x65f0
jmp 0x2fd13
movq -0xad8(%rbp), %rdi
xorl %ecx, %ecx
movl %ecx, %esi
movl %ecx, %edx
callq 0x35500
movl %eax, -0xc24(%rbp)
jmp 0x2fd2d
movl -0xc24(%rbp), %eax
movl %eax, -0x724(%rbp)
movl $0x0, -0x728(%rbp)
movq -0xad8(%rbp), %rdi
movslq -0x728(%rbp), %rax
movq %rax, -0xc30(%rbp)
addq $0x1f0, %rdi            # imm = 0x1F0
callq 0x19a40
movq %rax, %rcx
movq -0xc30(%rbp), %rax
cmpq %rcx, %rax
jae 0x304b2
movq -0xad8(%rbp), %rdi
addq $0x1f0, %rdi            # imm = 0x1F0
movslq -0x728(%rbp), %rsi
callq 0x19a60
movl (%rax), %eax
movl %eax, -0x358(%rbp)
movl $0x0, -0x72c(%rbp)
movq -0xad8(%rbp), %rdi
movslq -0x72c(%rbp), %rax
movq %rax, -0xc38(%rbp)
addq $0x208, %rdi            # imm = 0x208
callq 0x19a40
movq %rax, %rcx
movq -0xc38(%rbp), %rax
cmpq %rcx, %rax
jae 0x3049c
movq -0xad8(%rbp), %rdi
addq $0x208, %rdi            # imm = 0x208
movslq -0x72c(%rbp), %rsi
callq 0x19a60
movl (%rax), %eax
movl %eax, -0x35c(%rbp)
movl $0x0, -0x730(%rbp)
movq -0xad8(%rbp), %rdi
movslq -0x730(%rbp), %rax
movq %rax, -0xc40(%rbp)
addq $0x220, %rdi            # imm = 0x220
callq 0x19a40
movq %rax, %rcx
movq -0xc40(%rbp), %rax
cmpq %rcx, %rax
jae 0x30486
movq -0xad8(%rbp), %rdi
addq $0x220, %rdi            # imm = 0x220
movslq -0x730(%rbp), %rsi
callq 0x19a60
movq -0xad8(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x360(%rbp)
movl -0x358(%rbp), %esi
movl -0x35c(%rbp), %edx
movl -0x360(%rbp), %ecx
callq 0x35500
movl %eax, -0xc44(%rbp)
jmp 0x2fe7f
movl -0xc44(%rbp), %eax
movl %eax, -0x734(%rbp)
movl -0x358(%rbp), %esi
leaq -0x7d8(%rbp), %rdi
callq 0xb190
jmp 0x2fe9f
leaq 0x25ac3(%rip), %rdx     # 0x55969
leaq -0x7b8(%rbp), %rdi
leaq -0x7d8(%rbp), %rsi
callq 0xb0f0
jmp 0x2febb
movl -0x35c(%rbp), %esi
leaq -0x7f8(%rbp), %rdi
callq 0xb190
jmp 0x2fecf
leaq -0x798(%rbp), %rdi
leaq -0x7b8(%rbp), %rsi
leaq -0x7f8(%rbp), %rdx
callq 0xde60
jmp 0x2feeb
leaq 0x25a77(%rip), %rdx     # 0x55969
leaq -0x778(%rbp), %rdi
leaq -0x798(%rbp), %rsi
callq 0xb0f0
jmp 0x2ff07
movl -0x360(%rbp), %esi
leaq -0x818(%rbp), %rdi
callq 0xb190
jmp 0x2ff1b
leaq -0x758(%rbp), %rdi
leaq -0x778(%rbp), %rsi
leaq -0x818(%rbp), %rdx
callq 0xde60
jmp 0x2ff37
leaq -0x818(%rbp), %rdi
callq 0x6828
leaq -0x778(%rbp), %rdi
callq 0x6828
leaq -0x798(%rbp), %rdi
callq 0x6828
leaq -0x7f8(%rbp), %rdi
callq 0x6828
leaq -0x7b8(%rbp), %rdi
callq 0x6828
leaq -0x7d8(%rbp), %rdi
callq 0x6828
leaq -0xa18(%rbp), %rdi
callq 0x6710
jmp 0x2ff8d
movq -0xad8(%rbp), %rsi
addq $0x1c0, %rsi            # imm = 0x1C0
leaq 0x255fd(%rip), %rdx     # 0x5559f
leaq -0xab8(%rbp), %rdi
callq 0xe200
jmp 0x2ffb0
movq -0xad8(%rbp), %rdx
addq $0x1a0, %rdx            # imm = 0x1A0
leaq -0xa98(%rbp), %rdi
leaq -0xab8(%rbp), %rsi
callq 0xe1b0
jmp 0x2ffd3
leaq 0x25a58(%rip), %rdx     # 0x55a32
leaq -0xa78(%rbp), %rdi
leaq -0xa98(%rbp), %rsi
callq 0xb0f0
jmp 0x2ffef
leaq -0xa58(%rbp), %rdi
leaq -0xa78(%rbp), %rsi
leaq -0x758(%rbp), %rdx
callq 0xe1b0
jmp 0x3000b
leaq 0x25959(%rip), %rdx     # 0x5596b
leaq -0xa38(%rbp), %rdi
leaq -0xa58(%rbp), %rsi
callq 0xb0f0
jmp 0x30027
leaq -0xa18(%rbp), %rdi
leaq -0xa38(%rbp), %rsi
movl $0x10, %edx
callq 0x6200
jmp 0x30041
leaq -0xa38(%rbp), %rdi
callq 0x6828
leaq -0xa58(%rbp), %rdi
callq 0x6828
leaq -0xa78(%rbp), %rdi
callq 0x6828
leaq -0xa98(%rbp), %rdi
callq 0x6828
leaq -0xab8(%rbp), %rdi
callq 0x6828
leaq 0x258ee(%rip), %rsi     # 0x55972
leaq -0xa18(%rbp), %rdi
callq 0x6420
movq %rax, -0xc50(%rbp)
jmp 0x30099
movq -0xc50(%rbp), %rdi
movq -0xad8(%rbp), %rsi
addq $0x8, %rsi
callq 0x63e0
movq %rax, -0xc58(%rbp)
jmp 0x300b9
movq -0xc58(%rbp), %rdi
movq 0x43eb9(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x300ce
leaq 0x258a5(%rip), %rsi     # 0x5597a
leaq -0xa18(%rbp), %rdi
callq 0x6420
movq %rax, -0xc60(%rbp)
jmp 0x300ea
movq -0xc60(%rbp), %rdi
movq -0xad8(%rbp), %rsi
addq $0x28, %rsi
callq 0x63e0
movq %rax, -0xc68(%rbp)
jmp 0x3010a
movq -0xc68(%rbp), %rdi
movq 0x43e68(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x3011f
leaq 0x2585c(%rip), %rsi     # 0x55982
leaq -0xa18(%rbp), %rdi
callq 0x6420
movq %rax, -0xc70(%rbp)
jmp 0x3013b
movq -0xc70(%rbp), %rdi
movq 0x43e37(%rip), %rsi     # 0x73f80
callq 0x6480
jmp 0x30150
movl $0x0, -0xabc(%rbp)
movq -0xad8(%rbp), %rcx
movl -0xabc(%rbp), %eax
cmpl 0x4(%rcx), %eax
jge 0x3042f
movl $0x0, -0xac0(%rbp)
movq -0xad8(%rbp), %rax
movslq -0xac0(%rbp), %rcx
movq %rcx, -0xc78(%rbp)
movq 0x178(%rax), %rax
movslq -0xabc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x734(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0xbf00
movq %rax, %rcx
movq -0xc78(%rbp), %rax
cmpq %rcx, %rax
jae 0x30419
movq -0xad8(%rbp), %rax
movq 0x178(%rax), %rax
movslq -0xabc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x734(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0xac0(%rbp), %rsi
callq 0x36260
movq %rax, -0xc80(%rbp)
jmp 0x301fd
movq -0xc80(%rbp), %rdi
movl $0x20, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x63f0
cmpq $-0x1, %rax
je 0x30403
movq -0xad8(%rbp), %rax
movq 0x178(%rax), %rax
movslq -0xabc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0x734(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0xac0(%rbp), %rsi
callq 0x36260
movq %rax, -0xc88(%rbp)
jmp 0x30255
movq -0xc88(%rbp), %rsi
leaq -0xa18(%rbp), %rdi
callq 0x63e0
jmp 0x3026a
jmp 0x30403
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x30324
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x30318
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x3030c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x30300
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x302f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x818(%rbp), %rdi
callq 0x6828
leaq -0x778(%rbp), %rdi
callq 0x6828
leaq -0x798(%rbp), %rdi
callq 0x6828
leaq -0x7f8(%rbp), %rdi
callq 0x6828
leaq -0x7b8(%rbp), %rdi
callq 0x6828
leaq -0x7d8(%rbp), %rdi
callq 0x6828
jmp 0x308a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x30475
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x30469
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x303f5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x303e9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x303dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x303d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0xa38(%rbp), %rdi
callq 0x6828
leaq -0xa58(%rbp), %rdi
callq 0x6828
leaq -0xa78(%rbp), %rdi
callq 0x6828
leaq -0xa98(%rbp), %rdi
callq 0x6828
leaq -0xab8(%rbp), %rdi
callq 0x6828
jmp 0x30469
jmp 0x30405
movl -0xac0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac0(%rbp)
jmp 0x3017a
jmp 0x3041b
movl -0xabc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xabc(%rbp)
jmp 0x3015a
leaq -0xa18(%rbp), %rdi
callq 0x65f0
jmp 0x3043d
leaq -0xa18(%rbp), %rdi
callq 0x6620
leaq -0x758(%rbp), %rdi
callq 0x6828
movl -0x730(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x730(%rbp)
jmp 0x2fe03
leaq -0xa18(%rbp), %rdi
callq 0x6620
leaq -0x758(%rbp), %rdi
callq 0x6828
jmp 0x308a8
jmp 0x30488
movl -0x72c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x72c(%rbp)
jmp 0x2fda3
jmp 0x3049e
movl -0x728(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x728(%rbp)
jmp 0x2fd43
movl $0x0, -0xac4(%rbp)
movq -0xad8(%rbp), %rcx
movl -0xac4(%rbp), %eax
cmpl 0x4(%rcx), %eax
jge 0x307bb
movl $0x0, -0xac8(%rbp)
cmpl $0x10, -0xac8(%rbp)
jge 0x30546
movq -0xad8(%rbp), %rax
movq 0x178(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0xac8(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xc90(%rbp)
cmpq $0x0, %rax
je 0x30533
movq -0xc90(%rbp), %rdi
callq 0x13370
movq -0xc90(%rbp), %rdi
movl $0x18, %esi
callq 0x6440
jmp 0x30535
movl -0xac8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac8(%rbp)
jmp 0x304dc
movl $0x0, -0xacc(%rbp)
cmpl $0x5, -0xacc(%rbp)
jge 0x306ab
movq -0xad8(%rbp), %rax
movq 0x180(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0xacc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xc98(%rbp)
cmpq $0x0, %rax
je 0x305ab
movq -0xc98(%rbp), %rdi
callq 0xbca0
movq -0xc98(%rbp), %rdi
movl $0x18, %esi
callq 0x6440
movq -0xad8(%rbp), %rax
movq 0x188(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0xacc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xca0(%rbp)
cmpq $0x0, %rax
je 0x305f9
movq -0xca0(%rbp), %rdi
callq 0xbca0
movq -0xca0(%rbp), %rdi
movl $0x18, %esi
callq 0x6440
movq -0xad8(%rbp), %rax
movq 0x190(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0xacc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xca8(%rbp)
cmpq $0x0, %rax
je 0x30647
movq -0xca8(%rbp), %rdi
callq 0xbca0
movq -0xca8(%rbp), %rdi
movl $0x18, %esi
callq 0x6440
movq -0xad8(%rbp), %rax
movq 0x198(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movslq -0xacc(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xcb0(%rbp)
cmpq $0x0, %rax
je 0x30695
movq -0xcb0(%rbp), %rdi
callq 0xbca0
movq -0xcb0(%rbp), %rdi
movl $0x18, %esi
callq 0x6440
jmp 0x30697
movl -0xacc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xacc(%rbp)
jmp 0x30550
movq -0xad8(%rbp), %rax
movq 0x178(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xcb8(%rbp)
cmpq $0x0, %rax
je 0x306dd
movq -0xcb8(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x180(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xcc0(%rbp)
cmpq $0x0, %rax
je 0x3070f
movq -0xcc0(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x188(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xcc8(%rbp)
cmpq $0x0, %rax
je 0x30741
movq -0xcc8(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x190(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xcd0(%rbp)
cmpq $0x0, %rax
je 0x30773
movq -0xcd0(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x198(%rax), %rax
movslq -0xac4(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xcd8(%rbp)
cmpq $0x0, %rax
je 0x307a5
movq -0xcd8(%rbp), %rdi
callq 0x6570
jmp 0x307a7
movl -0xac4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xac4(%rbp)
jmp 0x304bc
movq -0xad8(%rbp), %rax
movq 0x178(%rax), %rax
movq %rax, -0xce0(%rbp)
cmpq $0x0, %rax
je 0x307e2
movq -0xce0(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x180(%rax), %rax
movq %rax, -0xce8(%rbp)
cmpq $0x0, %rax
je 0x30809
movq -0xce8(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x188(%rax), %rax
movq %rax, -0xcf0(%rbp)
cmpq $0x0, %rax
je 0x30830
movq -0xcf0(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x190(%rax), %rax
movq %rax, -0xcf8(%rbp)
cmpq $0x0, %rax
je 0x30857
movq -0xcf8(%rbp), %rdi
callq 0x6570
movq -0xad8(%rbp), %rax
movq 0x198(%rax), %rax
movq %rax, -0xd00(%rbp)
cmpq $0x0, %rax
je 0x3087e
movq -0xd00(%rbp), %rdi
callq 0x6570
leaq -0x350(%rbp), %rdi
callq 0x6828
leaq -0x2d0(%rbp), %rdi
callq 0x6620
leaq -0x58(%rbp), %rdi
callq 0x33850
addq $0xd00, %rsp            # imm = 0xD00
popq %rbp
retq
leaq -0x350(%rbp), %rdi
callq 0x6828
leaq -0x2d0(%rbp), %rdi
callq 0x6620
leaq -0x58(%rbp), %rdi
callq 0x33850
movq -0x88(%rbp), %rdi
callq 0x6750
nopw %cs:(%rax,%rax)