// File: /workspace/github_cpp_makefile_star2_O2/millanek[P]evo/evo_Dmin_combine.cpp
// Function: DminCombineMain(int, char**)
int DminCombineMain(int argc, char** argv) {
    parseDminCombineOptions(argc, argv);
    string line; // for reading the input files
    
    
    std::vector<std::istream*> dminstdErrFiles; std::vector<std::istream*> dminBBAAscoreFiles;
    for (int i = 0; i < opt::dminFiles.size(); i++) {
        std::istream* dminBBAAscoreFile;
        if (file_exists(opt::dminFiles[i] + "_combine.txt")) {
            dminBBAAscoreFile = createReader((opt::dminFiles[i] + "_combine.txt").c_str());
        } else if(file_exists(opt::dminFiles[i] + "_combine.txt.gz")) {
            dminBBAAscoreFile = createReader((opt::dminFiles[i] + "_combine.txt.gz").c_str());
        } else {
            std::cerr << "Can't fine the file: " << opt::dminFiles[i] + "_combine.txt" << " or " << opt::dminFiles[i] + "_combine.txt.gz" << std::endl;
        }
        dminBBAAscoreFiles.push_back(dminBBAAscoreFile);
        std::istream* dminstdErrFile;
        if (file_exists(opt::dminFiles[i] + "_combine_stderr.txt")) {
            dminstdErrFile = createReader((opt::dminFiles[i] + "_combine_stderr.txt").c_str());
        } else if(file_exists(opt::dminFiles[i] + "_combine_stderr.txt.gz")) {
            dminstdErrFile = createReader((opt::dminFiles[i] + "_combine_stderr.txt.gz").c_str());
        } else {
            std::cerr << "Can't fine the file: " << opt::dminFiles[i] + "_combine_stderr.txt" << " or " << opt::dminFiles[i] + "_combine_stderr.txt.gz" << std::endl;
        }
        dminstdErrFiles.push_back(dminstdErrFile);
        std::cerr << "Reading file " << opt::dminFiles[i] << std::endl;
    }
    
    
    // Now get the standard error values
    std::ofstream* outFileBBAA = new std::ofstream(opt::runName + "_BBAA.txt"); std::ofstream* outFileDmin = new std::ofstream(opt::runName + "_Dmin.txt");
    std::vector<double> BBAA_local_Ds; std::vector<double> ABBA_local_Ds; std::vector<double> BABA_local_Ds;
    string s1; string s2; string s3;
    double BBAAtotal = 0; double ABBAtotal = 0; double BABAtotal = 0;
    bool allDone = false;
    int processedTriosNumber = 0;
    do {
        processedTriosNumber++;
        if (processedTriosNumber % 10000 == 0) {
            //durationOverall = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
            std::cerr << "Processed " << processedTriosNumber << " trios" << std::endl;
            //std::cerr << "GettingCounts " << durationGettingCounts << " calculation " << durationCalculation << "secs" << std::endl;
        }
        if (opt::subsetStart != -1) {
            if (processedTriosNumber < opt::subsetStart) {
                for (int i = 0; i < dminBBAAscoreFiles.size(); i++) { getline(*dminBBAAscoreFiles[i], line); }
                for (int i = 0; i < dminstdErrFiles.size(); i++) { getline(*dminstdErrFiles[i], line); }
                continue;
            }
            if (processedTriosNumber > (opt::subsetStart+opt::subsetLength)) {
                std::cerr << "DONE" << std::endl; break;
            }
        }
        for (int i = 0; i < dminBBAAscoreFiles.size(); i++) {
            if (getline(*dminBBAAscoreFiles[i], line)) {
                std::vector<string> patternCounts = split(line, '\t');
                assert(patternCounts.size() == 6);
                if (i == 0) {
                    s1 = patternCounts[0];
                    s2 = patternCounts[1];
                    s3 = patternCounts[2];
                } else {
                    assert(s1 == patternCounts[0]); assert(s2 == patternCounts[1]); assert(s3 == patternCounts[2]);
                }
                double BBAA = stringToDouble(patternCounts[3]);
                double BABA = stringToDouble(patternCounts[4]);
                double ABBA = stringToDouble(patternCounts[5]);
                BBAAtotal += BBAA; ABBAtotal += ABBA; BABAtotal += BABA;
            }
        }
        //std::cerr << "ABBAtotal = " << ABBAtotal << std::endl;
        //std::cerr << "BABAtotal = " << BABAtotal << std::endl;
        double Dnum1 = ABBAtotal - BABAtotal; // assert(Dnum1 == Dnums[i][0]);
        double Dnum2 = ABBAtotal - BBAAtotal; // assert(Dnum2 == Dnums[i][1]);
        double Dnum3 = BBAAtotal - BABAtotal; // assert(Dnum3 == Dnums[i][2]);
        double Ddenom1 = ABBAtotal + BABAtotal; // assert(Ddenom1 == Ddenoms[i][0]);
        double Ddenom2 = ABBAtotal + BBAAtotal; // assert(Ddenom2 == Ddenoms[i][1]);
        double Ddenom3 = BBAAtotal + BABAtotal; // assert(Ddenom3 == Ddenoms[i][2]);
        //std::cerr << "Dnum1 = " << Dnum1 << std::endl;
        //std::cerr << "Ddenom1 = " << Ddenom1 << std::endl;
        double D1 = Dnum1/Ddenom1; double D2 = Dnum2/Ddenom2; double D3 = Dnum3/Ddenom3;
        //std::cerr << "D1 = " << D1 << std::endl;
        for (int i = 0; i < dminstdErrFiles.size(); i++) {
            if (getline(*dminstdErrFiles[i], line)) {
                std::vector<string> localDs = split(line, '\t');
                //assert(localDs.size() == 3 || localDs.size() == 0);
                if (localDs.size() == 3) {
                    std::vector<string> BBAA_D_strings = split(localDs[0], ',');
                    std::vector<string> BABA_D_strings = split(localDs[1], ',');
                    std::vector<string> ABBA_D_strings = split(localDs[2], ',');
                    for (int j = 0; j < BBAA_D_strings.size(); j++) {
                        //std::cerr << "BBAA_D_strings[j] = " << BBAA_D_strings[j] << std::endl;
                        double thisBBAA_localD = stringToDouble(BBAA_D_strings[j]);
                        if (!std::isnan(thisBBAA_localD)) BBAA_local_Ds.push_back(thisBBAA_localD);
                       // std::cerr << "BABA_D_strings[j] = " << BABA_D_strings[j] << std::endl;
                        double thisBABA_localD = stringToDouble(BABA_D_strings[j]);
                        if (!std::isnan(thisBABA_localD)) BABA_local_Ds.push_back(thisBABA_localD);
                        //std::cerr << "ABBA_D_strings[j] = " << ABBA_D_strings[j] << std::endl;
                        double thisABBA_localD = stringToDouble(ABBA_D_strings[j]);
                        if (!std::isnan(thisABBA_localD)) ABBA_local_Ds.push_back(thisABBA_localD);
                    }
                } else {
                    print_vector(localDs,std::cerr);
                }
            }
        }
        if (BBAA_local_Ds.size() == 0 || BABA_local_Ds.size() == 0 || ABBA_local_Ds.size() == 0) { // no info to estimate the standard error; probably all lines have been processed
            allDone = true; break;
        }
       // std::cerr << "D1 = " << D1 << std::endl;
        //print_vector(BBAA_local_Ds, std::cerr);
        double BBAAstdErr = jackknive_std_err(BBAA_local_Ds);
        //print_vector(BABA_local_Ds, std::cerr);
        double BABAstdErr = jackknive_std_err(BABA_local_Ds);
        //print_vector(ABBA_local_Ds, std::cerr);
        //std::cerr << "D1 = " << D1 << std::endl;
        double ABBAstdErr = jackknive_std_err(ABBA_local_Ds);
        //std::cerr << "D1 = " << D1 << std::endl;
        //std::cerr << "BBAAstdErr" << BBAAstdErr << std::endl;
        double D1_Z = fabs(D1)/BBAAstdErr; double D2_Z = fabs(D2)/BABAstdErr;
        double D3_Z = fabs(D3)/ABBAstdErr;
        //std::cerr << "D1_Z = " << D1_Z << std::endl;
        if (s1 == "Altcal" && s2 == "Altshe" && s3 == "Asplep") {
            std::cerr << "D1_Z = " << D1_Z << std::endl;
            std::cerr << "BBAAstdErr = " << BBAAstdErr << std::endl;
            print_vector(BBAA_local_Ds, std::cerr);
            std::cerr << "ABBAstdErr = " << ABBAstdErr << std::endl;
            std::cerr << "BABAstdErr = " << BABAstdErr << std::endl;
            std::cerr << "ABBAtotal = " << ABBAtotal << std::endl;
            std::cerr << "BABAtotal = " << BABAtotal << std::endl;
            std::cerr << "BBAAtotal = " << BBAAtotal << std::endl;
        }

        
        // Find which topology is in agreement with the counts of the BBAA, BABA, and ABBA patterns
        if (BBAAtotal >= BABAtotal && BBAAtotal >= ABBAtotal) {
            if (D1 >= 0)
                *outFileBBAA << s1 << "\t" << s2 << "\t" << s3;
            else
                *outFileBBAA << s2 << "\t" << s1 << "\t" << s3;
            *outFileBBAA << "\t" << fabs(D1) << "\t" << D1_Z << "\t";
            *outFileBBAA << BBAAtotal << "\t" << BABAtotal << "\t" << ABBAtotal << std::endl;
        } else if (BABAtotal >= BBAAtotal && BABAtotal >= ABBAtotal) {
            if (D2 >= 0)
                *outFileBBAA << s1 << "\t" << s3 << "\t" << s2;
            else
                *outFileBBAA << s3 << "\t" << s1 << "\t" << s2;
            *outFileBBAA << "\t" << fabs(D2) << "\t" << D2_Z << "\t";
            *outFileBBAA << BABAtotal << "\t" << BBAAtotal << "\t" << ABBAtotal << std::endl;
        } else if (ABBAtotal >= BBAAtotal && ABBAtotal >= BABAtotal) {
            if (D3 >= 0)
                *outFileBBAA << s3 << "\t" << s2 << "\t" << s1;
            else
                *outFileBBAA << s2 << "\t" << s3 << "\t" << s1;
            *outFileBBAA << "\t" << fabs(D3) << "\t" << D3_Z << "\t";
            *outFileBBAA << ABBAtotal << "\t" << BABAtotal << "\t" << BBAAtotal << std::endl;
        }
        
        // Find Dmin:
        if (fabs(D1) <= fabs(D2) && fabs(D1) <= fabs(D3)) { // (P3 == S3)
            if (D1 >= 0)
                *outFileDmin << s1 << "\t" << s2 << "\t" << s3 << "\t" << D1 << "\t" << D1_Z << "\t" << std::endl;
            else
                *outFileDmin << s1 << "\t" << s2 << "\t" << s3 << "\t" << fabs(D1) << "\t" << D1_Z << "\t"<< std::endl;
        } else if (fabs(D2) <= fabs(D1) && fabs(D2) <= fabs(D3)) { // (P3 == S2)
            if (D2 >= 0)
                *outFileDmin << s1 << "\t" << s3 << "\t" << s2 << "\t" << D2 << "\t" << D2_Z << "\t"<< std::endl;
            else
                *outFileDmin << s3 << "\t" << s1 << "\t" << s2 << "\t" << fabs(D2) << "\t" << D2_Z << "\t"<< std::endl;
        } else if (fabs(D3) <= fabs(D1) && fabs(D3) <= fabs(D2)) { // (P3 == S1)
            if (D3 >= 0)
                *outFileDmin << s3 << "\t" << s2 << "\t" << s1 << "\t" << D3 << "\t" << D3_Z << "\t"<< std::endl;
            else
                *outFileDmin << s2 << "\t" << s3 << "\t" << s1 << "\t" << fabs(D3) << "\t" << D3_Z << "\t" << std::endl;;
        }
        
        BBAA_local_Ds.clear(); ABBA_local_Ds.clear(); BABA_local_Ds.clear();
        BBAAtotal = 0; ABBAtotal = 0; BABAtotal = 0;
    } while(!allDone);
  
    
    
    /*
    for (int i = 0; i != trios.size(); i++) { //
        // Get the standard error values:
        double D1stdErr = jackknive_std_err(regionDs[i][0]); double D2stdErr = jackknive_std_err(regionDs[i][1]);
        double D3stdErr = jackknive_std_err(regionDs[i][2]);
        // Get the D values
        //Dnums[i][0] = ABBAtotals[i] - BABAtotals[i]; Dnums[i][1] = ABBAtotals[i] - BBAAtotals[i]; Dnums[i][2] = BBAAtotals[i] - BABAtotals[i];
        double Dnum1 = ABBAtotals[i] - BABAtotals[i]; // assert(Dnum1 == Dnums[i][0]);
        double Dnum2 = ABBAtotals[i] - BBAAtotals[i]; // assert(Dnum2 == Dnums[i][1]);
        double Dnum3 = BBAAtotals[i] - BABAtotals[i]; // assert(Dnum3 == Dnums[i][2]);
        // Ddenoms[i][0] = ABBAtotals[i] + BABAtotals[i]; Ddenoms[i][1] = ABBAtotals[i] + BBAAtotals[i]; Ddenoms[i][2] = BBAAtotals[i] + BABAtotals[i];
        double Ddenom1 = ABBAtotals[i] + BABAtotals[i]; // assert(Ddenom1 == Ddenoms[i][0]);
        double Ddenom2 = ABBAtotals[i] + BBAAtotals[i]; // assert(Ddenom2 == Ddenoms[i][1]);
        double Ddenom3 = BBAAtotals[i] + BABAtotals[i]; // assert(Ddenom3 == Ddenoms[i][2]);
        double D1 = Dnum1/Ddenom1; double D2 = Dnum2/Ddenom2; double D3 = Dnum3/Ddenom3;
        // Get the Z-scores
        double D1_Z = abs(D1)/D1stdErr; double D2_Z = abs(D2)/D2stdErr;
        double D3_Z = abs(D3)/D3stdErr;
        
        
        // Find which topology is in agreement with the counts of the BBAA, BABA, and ABBA patterns
        if (BBAAtotals[i] >= BABAtotals[i] && BBAAtotals[i] >= ABBAtotals[i]) {
            if (D1 >= 0)
                *outFileBBAA << trios[i][0] << "\t" << trios[i][1] << "\t" << trios[i][2];
            else
                *outFileBBAA << trios[i][1] << "\t" << trios[i][0] << "\t" << trios[i][2];
            *outFileBBAA << "\t" << abs(D1) << "\t" << D1_Z << "\t";
            *outFileBBAA << BBAAtotals[i] << "\t" << BABAtotals[i] << "\t" << ABBAtotals[i] << std::endl;
        } else if (BABAtotals[i] >= BBAAtotals[i] && BABAtotals[i] >= ABBAtotals[i]) {
            if (D2 >= 0)
                *outFileBBAA << trios[i][0] << "\t" << trios[i][2] << "\t" << trios[i][1];
            else
                *outFileBBAA << trios[i][2] << "\t" << trios[i][0] << "\t" << trios[i][1];
            *outFileBBAA << "\t" << abs(D2) << "\t" << D2_Z << "\t";
            *outFileBBAA << BABAtotals[i] << "\t" << BBAAtotals[i] << "\t" << ABBAtotals[i] << std::endl;
        } else if (ABBAtotals[i] >= BBAAtotals[i] && ABBAtotals[i] >= BABAtotals[i]) {
            if (D3 >= 0)
                *outFileBBAA << trios[i][2] << "\t" << trios[i][1] << "\t" << trios[i][0];
            else
                *outFileBBAA << trios[i][1] << "\t" << trios[i][2] << "\t" << trios[i][0];
            *outFileBBAA << "\t" << abs(D3) << "\t" << D3_Z << "\t";
            *outFileBBAA << ABBAtotals[i] << "\t" << BABAtotals[i] << "\t" << BBAAtotals[i] << std::endl;
        }
        
        // Find Dmin:
        if (abs(D1) <= abs(D2) && abs(D1) <= abs(D3)) { // (P3 == S3)
            if (D1 >= 0)
                *outFileDmin << trios[i][0] << "\t" << trios[i][1] << "\t" << trios[i][2] << "\t" << D1 << "\t" << D1_Z << "\t" << std::endl;
            else
                *outFileDmin << trios[i][1] << "\t" << trios[i][0] << "\t" << trios[i][2] << "\t" << abs(D1) << "\t" << D1_Z << "\t"<< std::endl;
            // if (BBAAtotals[i] < BABAtotals[i] || BBAAtotals[i] < ABBAtotals[i])
            //     std::cerr << "\t" << "WARNING: Dmin tree different from DAF tree" << std::endl;
        } else if (abs(D2) <= abs(D1) && abs(D2) <= abs(D3)) { // (P3 == S2)
            if (D2 >= 0)
                *outFileDmin << trios[i][0] << "\t" << trios[i][2] << "\t" << trios[i][1] << "\t" << D2 << "\t" << D2_Z << "\t"<< std::endl;
            else
                *outFileDmin << trios[i][2] << "\t" << trios[i][0] << "\t" << trios[i][1] << "\t" << abs(D2) << "\t" << D2_Z << "\t"<< std::endl;
            // if (BABAtotals[i] < BBAAtotals[i] || BABAtotals[i] < ABBAtotals[i])
            //     std::cerr << "\t" << "WARNING: Dmin tree different from DAF tree" << std::endl;
        } else if (abs(D3) <= abs(D1) && abs(D3) <= abs(D2)) { // (P3 == S1)
            if (D3 >= 0)
                *outFileDmin << trios[i][2] << "\t" << trios[i][1] << "\t" << trios[i][0] << "\t" << D3 << "\t" << D3_Z << "\t"<< std::endl;
            else
                *outFileDmin << trios[i][1] << "\t" << trios[i][2] << "\t" << trios[i][0] << "\t" << abs(D3) << "\t" << D3_Z << "\t" << std::endl;;
            // if (ABBAtotals[i] < BBAAtotals[i] || ABBAtotals[i] < BABAtotals[i])
            //     std::cerr << "\t" << "WARNING: Dmin tree different from DAF tree" << std::endl;
        }
        
        // Output a simple file that can be used for combining multiple local runs:
        *outFileCombine << trios[i][0] << "\t" << trios[i][1] << "\t" << trios[i][2] << "\t" << BBAAtotals[i] << "\t" << BABAtotals[i] << "\t" << ABBAtotals[i] << std::endl;
        print_vector(regionDs[i][0], *outFileCombineStdErr, ',', false); *outFileCombineStdErr << "\t"; print_vector(regionDs[i][1], *outFileCombineStdErr, ',', false); *outFileCombineStdErr << "\t";
        print_vector(regionDs[i][2], *outFileCombineStdErr, ',',false); *outFileCombineStdErr << std::endl;
        
        //std::cerr << trios[i][0] << "\t" << trios[i][1] << "\t" << trios[i][2] << "\t" << D1 << "\t" << D2 << "\t" << D3 << "\t" << BBAAtotals[i] << "\t" << BABAtotals[i] << "\t" << ABBAtotals[i] << std::endl;
    }
     */
    return 0;
    
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x378, %rsp            # imm = 0x378
callq 0x7b625
leaq 0x1e0(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
xorpd %xmm0, %xmm0
leaq 0x1a0(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
leaq 0x180(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
xorl %r14d, %r14d
leaq 0x20(%rsp), %r12
leaq 0x337ad(%rip), %rbx     # 0xad600
xorl %r15d, %r15d
movq 0x64f3b(%rip), %rax     # 0xded98
movq 0x64f2c(%rip), %rsi     # 0xded90
subq %rsi, %rax
sarq $0x5, %rax
cmpq %r15, %rax
jbe 0x7a1c6
addq %r14, %rsi
movq %r12, %rdi
leaq 0x33772(%rip), %rdx     # 0xad5f3
callq 0x28806
movq %r12, %rdi
callq 0x7b91a
movl %eax, %ebp
movq %r12, %rdi
callq 0x8978
testb %bpl, %bpl
je 0x79eda
movq 0x64eec(%rip), %rsi     # 0xded90
addq %r14, %rsi
leaq 0x58(%rsp), %rdi
leaq 0x33740(%rip), %rdx     # 0xad5f3
callq 0x28806
movq 0x58(%rsp), %rsi
movq %r12, %rdi
leaq 0xa0(%rsp), %rdx
callq 0x21904
movq %r12, %rdi
pushq $0x8
popq %rsi
callq 0x42587
jmp 0x79f45
movq 0x64eaf(%rip), %rsi     # 0xded90
addq %r14, %rsi
movq %r12, %rdi
leaq 0x3469b(%rip), %rdx     # 0xae589
callq 0x28806
movq %r12, %rdi
callq 0x7b91a
movl %eax, %ebp
movq %r12, %rdi
callq 0x8978
testb %bpl, %bpl
je 0x79f5f
movq 0x64e7f(%rip), %rsi     # 0xded90
addq %r14, %rsi
leaq 0x58(%rsp), %rdi
leaq 0x34669(%rip), %rdx     # 0xae589
callq 0x28806
movq 0x58(%rsp), %rsi
movq %r12, %rdi
leaq 0xa0(%rsp), %rdx
callq 0x21904
movq %r12, %rdi
pushq $0x8
popq %rsi
callq 0x42587
movq %rax, 0xe0(%rsp)
movq %r12, %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
jmp 0x79fe9
movq 0x63082(%rip), %rdi     # 0xdcfe8
leaq 0x3462c(%rip), %rsi     # 0xae599
callq 0x8480
movq %rax, %rbp
movq 0x64e14(%rip), %rsi     # 0xded90
addq %r14, %rsi
movq %r12, %rdi
leaq 0x3366a(%rip), %rdx     # 0xad5f3
callq 0x28806
movq %rbp, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x3460c(%rip), %rsi     # 0xae5af
callq 0x8480
movq %rax, %rbp
movq 0x64dde(%rip), %rsi     # 0xded90
addq %r14, %rsi
leaq 0x58(%rsp), %r13
movq %r13, %rdi
leaq 0x345c5(%rip), %rdx     # 0xae589
callq 0x28806
movq %rbp, %rdi
movq %r13, %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
leaq 0x58(%rsp), %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
leaq 0x180(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x7b958
movq 0x64d86(%rip), %rsi     # 0xded90
addq %r14, %rsi
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28806
movq %r12, %rdi
callq 0x7b91a
movl %eax, %ebp
movq %r12, %rdi
callq 0x8978
testb %bpl, %bpl
je 0x7a068
movq 0x64d5a(%rip), %rsi     # 0xded90
addq %r14, %rsi
leaq 0x58(%rsp), %rdi
movq %rbx, %rdx
callq 0x28806
movq 0x58(%rsp), %rsi
movq %r12, %rdi
leaq 0x120(%rsp), %rdx
callq 0x21904
movq %r12, %rdi
pushq $0x8
popq %rsi
callq 0x42587
jmp 0x7a0d3
movq 0x64d21(%rip), %rsi     # 0xded90
addq %r14, %rsi
movq %r12, %rdi
leaq 0x34538(%rip), %rdx     # 0xae5b4
callq 0x28806
movq %r12, %rdi
callq 0x7b91a
movl %eax, %ebp
movq %r12, %rdi
callq 0x8978
testb %bpl, %bpl
je 0x7a0ed
movq 0x64cf1(%rip), %rsi     # 0xded90
addq %r14, %rsi
leaq 0x58(%rsp), %rdi
leaq 0x34506(%rip), %rdx     # 0xae5b4
callq 0x28806
movq 0x58(%rsp), %rsi
movq %r12, %rdi
leaq 0x120(%rsp), %rdx
callq 0x21904
movq %r12, %rdi
pushq $0x8
popq %rsi
callq 0x42587
movq %rax, 0xa0(%rsp)
movq %r12, %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
jmp 0x7a173
movq 0x62ef4(%rip), %rdi     # 0xdcfe8
leaq 0x3449e(%rip), %rsi     # 0xae599
callq 0x8480
movq %rax, %rbp
movq 0x64c86(%rip), %rsi     # 0xded90
addq %r14, %rsi
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28806
movq %rbp, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x34482(%rip), %rsi     # 0xae5af
callq 0x8480
movq %rax, %rbp
movq 0x64c54(%rip), %rsi     # 0xded90
addq %r14, %rsi
leaq 0x58(%rsp), %r13
movq %r13, %rdi
leaq 0x34466(%rip), %rdx     # 0xae5b4
callq 0x28806
movq %rbp, %rdi
movq %r13, %rsi
callq 0x8430
movq %rax, %rdi
callq 0x8230
leaq 0x58(%rsp), %rdi
callq 0x8978
movq %r12, %rdi
callq 0x8978
leaq 0x1a0(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x7b958
movq 0x62e54(%rip), %rdi     # 0xdcfe8
leaq 0x34430(%rip), %rsi     # 0xae5cb
callq 0x8480
movq 0x64be9(%rip), %rsi     # 0xded90
addq %r14, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
callq 0x8230
incq %r15
addq $0x20, %r14
jmp 0x79e56
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %rbx
leaq 0x64bce(%rip), %rsi     # 0xdeda8
leaq 0x333fe(%rip), %rdx     # 0xad5df
leaq 0x20(%rsp), %rdi
movq %rax, 0x8(%rsp)
callq 0x28806
leaq 0x58(%rsp), %r12
leaq 0x20(%rsp), %rsi
pushq $0x10
popq %rdx
movq %rbx, %rdi
callq 0x8900
leaq 0x20(%rsp), %rdi
callq 0x8978
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, 0x18(%rsp)
leaq 0x64b83(%rip), %rsi     # 0xdeda8
leaq 0x333bd(%rip), %rdx     # 0xad5e9
leaq 0x20(%rsp), %rdi
callq 0x28806
leaq 0x20(%rsp), %rbx
pushq $0x10
popq %rdx
movq 0x18(%rsp), %rdi
movq %rbx, %rsi
callq 0x8900
movq %rbx, %rdi
callq 0x8978
leaq 0xa0(%rsp), %rax
andq $0x0, 0x10(%rax)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rax)
leaq 0x120(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
leaq 0x150(%rsp), %rcx
andq $0x0, 0x10(%rcx)
leaq 0x30(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movapd %xmm0, (%rcx)
xorl %ebp, %ebp
leaq 0x68(%rsp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq 0xf0(%rsp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %bpl, (%rax)
movb %bpl, (%rcx)
movb %bpl, (%rdx)
leaq 0x2f8(%rsp), %rbx
leaq 0x2d8(%rsp), %r13
leaq 0x2b8(%rsp), %r14
leal 0x1(%rbp), %eax
movl %eax, 0x14(%rsp)
xorl %edx, %edx
movl $0x2710, %ecx           # imm = 0x2710
divl %ecx
testl %edx, %edx
jne 0x7a324
movq 0x62cf3(%rip), %rdi     # 0xdcfe8
leaq 0x263aa(%rip), %rsi     # 0xa06a6
callq 0x8480
movq %rax, %rdi
movl 0x14(%rsp), %esi
callq 0x8840
movq %rax, %rdi
leaq 0x342c2(%rip), %rsi     # 0xae5d9
callq 0x8480
movq %rax, %rdi
callq 0x8230
movl 0x632c6(%rip), %eax     # 0xdd5f0
cmpl $-0x1, %eax
je 0x7a37c
cmpl %eax, 0x14(%rsp)
jge 0x7a36e
xorl %r15d, %r15d
movq 0x180(%rsp), %rax
movq 0x188(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
jbe 0x7ab57
movq (%rax,%r15,8), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x80a0
incq %r15
jmp 0x7a338
addl 0x63280(%rip), %eax     # 0xdd5f4
cmpl %eax, %ebp
jge 0x7b2ed
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x90(%rsp)
xorl %ebp, %ebp
movq 0x180(%rsp), %rax
movq 0x188(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbp, %rcx
jbe 0x7a575
movq (%rax,%rbp,8), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7a56d
leaq 0x78(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x78(%rsp), %rsi
movq 0x80(%rsp), %rax
subq %rsi, %rax
cmpq $0xc0, %rax
jne 0x7b38b
testq %rbp, %rbp
je 0x7a45b
leaq 0x20(%rsp), %rdi
callq 0x26b06
testb %al, %al
je 0x7b3a4
movq 0x78(%rsp), %rsi
addq $0x20, %rsi
movq %r12, %rdi
callq 0x26b06
testb %al, %al
je 0x7b3b6
movq 0x78(%rsp), %rsi
addq $0x40, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x26b06
testb %al, %al
jne 0x7a48c
jmp 0x7b3ad
leaq 0x20(%rsp), %rdi
callq 0x82a0
movq 0x78(%rsp), %rsi
addq $0x20, %rsi
movq %r12, %rdi
callq 0x82a0
movq 0x78(%rsp), %rsi
addq $0x40, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x82a0
movq 0x78(%rsp), %rsi
addq $0x60, %rsi
leaq 0x358(%rsp), %r15
movq %r15, %rdi
callq 0x8600
movq %r15, %rdi
callq 0x402aa
movapd %xmm0, 0x40(%rsp)
movq %r15, %rdi
callq 0x8978
movq 0x78(%rsp), %rsi
subq $-0x80, %rsi
leaq 0x338(%rsp), %r15
movq %r15, %rdi
callq 0x8600
movq %r15, %rdi
callq 0x402aa
movapd %xmm0, 0xc0(%rsp)
movq %r15, %rdi
callq 0x8978
movq 0x78(%rsp), %rsi
movl $0xa0, %eax
addq %rax, %rsi
leaq 0x318(%rsp), %r15
movq %r15, %rdi
callq 0x8600
movq %r15, %rdi
callq 0x402aa
movsd %xmm0, 0x110(%rsp)
movq %r15, %rdi
callq 0x8978
movapd 0x90(%rsp), %xmm0
addsd 0x110(%rsp), %xmm0
movapd %xmm0, 0x90(%rsp)
movapd 0x40(%rsp), %xmm1
unpcklpd 0xc0(%rsp), %xmm1       # xmm1 = xmm1[0],mem[0]
movapd 0xd0(%rsp), %xmm0
addpd %xmm1, %xmm0
movapd %xmm0, 0xd0(%rsp)
leaq 0x78(%rsp), %rdi
callq 0x28a08
incq %rbp
jmp 0x7a398
movapd 0x90(%rsp), %xmm3
movapd %xmm3, %xmm5
unpcklpd %xmm3, %xmm5            # xmm5 = xmm5[0],xmm3[0]
movapd 0xd0(%rsp), %xmm2
subpd %xmm2, %xmm5
movapd %xmm2, %xmm1
unpckhpd %xmm2, %xmm1            # xmm1 = xmm1[1],xmm2[1]
movapd %xmm2, %xmm4
subsd %xmm1, %xmm4
movapd %xmm2, %xmm0
movsd %xmm3, %xmm0            # xmm0 = xmm3[0],xmm0[1]
movapd %xmm1, 0xc0(%rsp)
addsd %xmm2, %xmm1
unpcklpd %xmm3, %xmm2            # xmm2 = xmm2[0],xmm3[0]
addpd %xmm0, %xmm2
divpd %xmm2, %xmm5
movapd %xmm5, 0x110(%rsp)
divsd %xmm1, %xmm4
movapd %xmm4, 0x1c0(%rsp)
xorl %ebp, %ebp
movq 0x1a0(%rsp), %rax
movq 0x1a8(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbp, %rcx
jbe 0x7a829
movq (%rax,%rbp,8), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7a821
leaq 0x78(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x78(%rsp), %rsi
movq 0x80(%rsp), %rax
subq %rsi, %rax
cmpq $0x60, %rax
jne 0x7a7b7
leaq 0x228(%rsp), %rdi
pushq $0x2c
popq %r15
movl %r15d, %edx
callq 0x40349
movq 0x78(%rsp), %rsi
addq $0x20, %rsi
leaq 0x270(%rsp), %rdi
movl %r15d, %edx
callq 0x40349
movq 0x78(%rsp), %rsi
addq $0x40, %rsi
leaq 0x258(%rsp), %rdi
movl %r15d, %edx
callq 0x40349
xorl %r12d, %r12d
xorl %r15d, %r15d
movq 0x228(%rsp), %rsi
movq 0x230(%rsp), %rax
subq %rsi, %rax
sarq $0x5, %rax
cmpq %r15, %rax
jbe 0x7a7eb
addq %r12, %rsi
movq %rbx, %rdi
callq 0x8600
movq %rbx, %rdi
callq 0x402aa
movq %rbx, %rdi
movsd %xmm0, 0x40(%rsp)
callq 0x8978
movsd 0x40(%rsp), %xmm0
movsd %xmm0, 0x220(%rsp)
ucomisd %xmm0, %xmm0
jp 0x7a705
leaq 0xa0(%rsp), %rdi
leaq 0x220(%rsp), %rsi
callq 0x5a406
movq 0x270(%rsp), %rsi
addq %r12, %rsi
movq %r13, %rdi
callq 0x8600
movq %r13, %rdi
callq 0x402aa
movq %r13, %rdi
movsd %xmm0, 0x40(%rsp)
callq 0x8978
movsd 0x40(%rsp), %xmm0
movsd %xmm0, 0x218(%rsp)
ucomisd %xmm0, %xmm0
jp 0x7a758
leaq 0x150(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x5a406
movq 0x258(%rsp), %rsi
addq %r12, %rsi
movq %r14, %rdi
callq 0x8600
movq %r14, %rdi
callq 0x402aa
movq %r14, %rdi
movsd %xmm0, 0x40(%rsp)
callq 0x8978
movsd 0x40(%rsp), %xmm0
movsd %xmm0, 0x210(%rsp)
ucomisd %xmm0, %xmm0
jp 0x7a7ab
leaq 0x120(%rsp), %rdi
leaq 0x210(%rsp), %rsi
callq 0x5a406
incq %r15
addq $0x20, %r12
jmp 0x7a69a
leaq 0x2a0(%rsp), %r15
movq %r15, %rdi
leaq 0x78(%rsp), %rsi
callq 0x297dc
movq %r15, %rdi
movq 0x62812(%rip), %rsi     # 0xdcfe8
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %r15, %rdi
callq 0x28a08
jmp 0x7a817
leaq 0x258(%rsp), %rdi
callq 0x28a08
leaq 0x270(%rsp), %rdi
callq 0x28a08
leaq 0x228(%rsp), %rdi
callq 0x28a08
leaq 0x58(%rsp), %r12
leaq 0x78(%rsp), %rdi
callq 0x28a08
incq %rbp
jmp 0x7a5dc
movq 0xa8(%rsp), %rax
cmpq 0xa0(%rsp), %rax
je 0x7b308
movq 0x158(%rsp), %rax
cmpq 0x150(%rsp), %rax
je 0x7b308
movq 0x128(%rsp), %rax
cmpq 0x120(%rsp), %rax
je 0x7b308
leaq 0xa0(%rsp), %rdi
callq 0x2f3e3
movsd %xmm0, 0x100(%rsp)
leaq 0x150(%rsp), %rdi
callq 0x2f3e3
movsd %xmm0, 0x140(%rsp)
leaq 0x120(%rsp), %rdi
callq 0x2f3e3
movsd %xmm0, 0x170(%rsp)
movdqa 0x110(%rsp), %xmm0
pand 0x26c32(%rip), %xmm0    # 0xa14f0
movdqa %xmm0, 0x40(%rsp)
pshufd $0xee, %xmm0, %xmm0     # xmm0 = xmm0[2,3,2,3]
movdqa %xmm0, 0x200(%rsp)
divsd 0x100(%rsp), %xmm0
movapd %xmm0, 0x1f0(%rsp)
leaq 0x20(%rsp), %rdi
leaq 0x33d86(%rip), %rsi     # 0xae676
callq 0x2193f
testb %al, %al
je 0x7aa9d
movq %r12, %rdi
leaq 0x33d76(%rip), %rsi     # 0xae67d
callq 0x2193f
testb %al, %al
je 0x7aa9d
leaq 0xe0(%rsp), %rdi
leaq 0x33d61(%rip), %rsi     # 0xae684
callq 0x2193f
testb %al, %al
je 0x7aa9d
movq 0x626b1(%rip), %rdi     # 0xdcfe8
leaq 0x33d4d(%rip), %rsi     # 0xae68b
callq 0x8480
movq %rax, %rdi
movapd 0x1f0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movq 0x62685(%rip), %rdi     # 0xdcfe8
leaq 0x33d29(%rip), %rsi     # 0xae693
callq 0x8480
movq %rax, %rdi
movsd 0x100(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
leaq 0x288(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x2f816
leaq 0x288(%rsp), %r15
movq %r15, %rdi
movq 0x62639(%rip), %rbp     # 0xdcfe8
movq %rbp, %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x488bf
movq %r15, %rdi
callq 0x2b43c
movq %rbp, %rdi
leaq 0x33cd2(%rip), %rsi     # 0xae6a1
callq 0x8480
movq %rax, %rdi
movsd 0x170(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movq 0x625f4(%rip), %rdi     # 0xdcfe8
leaq 0x33cb4(%rip), %rsi     # 0xae6af
callq 0x8480
movq %rax, %rdi
movsd 0x140(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movq 0x625c8(%rip), %rdi     # 0xdcfe8
leaq 0x33c96(%rip), %rsi     # 0xae6bd
callq 0x8480
movq %rax, %rdi
movapd 0x90(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movq 0x6259c(%rip), %rdi     # 0xdcfe8
leaq 0x33c77(%rip), %rsi     # 0xae6ca
callq 0x8480
movq %rax, %rdi
movapd 0xc0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movq 0x62570(%rip), %rdi     # 0xdcfe8
leaq 0x33c58(%rip), %rsi     # 0xae6d7
callq 0x8480
movq %rax, %rdi
movapd 0xd0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movapd 0x40(%rsp), %xmm0
divsd 0x140(%rsp), %xmm0
movapd %xmm0, 0x240(%rsp)
movapd 0x1c0(%rsp), %xmm0
andpd 0x26a2a(%rip), %xmm0    # 0xa14f0
movapd %xmm0, 0x100(%rsp)
divsd 0x170(%rsp), %xmm0
movapd %xmm0, 0x170(%rsp)
movapd 0xd0(%rsp), %xmm0
ucomisd 0xc0(%rsp), %xmm0
movapd 0x110(%rsp), %xmm1
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
movapd %xmm1, 0x140(%rsp)
jb 0x7ab97
ucomisd 0x90(%rsp), %xmm0
jb 0x7ab97
movapd 0x140(%rsp), %xmm0
ucomisd 0x1b66d(%rip), %xmm0    # 0x96198
jae 0x7ac63
movq 0x8(%rsp), %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1f2d6(%rip), %rsi     # 0x99e1e
callq 0x8480
leaq 0x20(%rsp), %rsi
jmp 0x7ac84
xorl %r15d, %r15d
movq 0x1a0(%rsp), %rax
movq 0x1a8(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
jbe 0x7ab8c
movq (%rax,%r15,8), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x80a0
incq %r15
jmp 0x7ab5a
movl 0x14(%rsp), %eax
movl %eax, %ebp
jmp 0x7a2da
movapd 0xc0(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x7abf3
ucomisd 0x90(%rsp), %xmm1
jb 0x7abf3
movapd 0x110(%rsp), %xmm0
ucomisd 0x1b5d6(%rip), %xmm0    # 0x96198
jae 0x7ad2c
movq 0x8(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1f23a(%rip), %rsi     # 0x99e1e
callq 0x8480
leaq 0x20(%rsp), %rsi
jmp 0x7ad52
movapd 0x90(%rsp), %xmm0
ucomisd 0xd0(%rsp), %xmm0
jb 0x7ae1d
movapd 0x90(%rsp), %xmm0
ucomisd 0xc0(%rsp), %xmm0
jb 0x7ae1d
movapd 0x1c0(%rsp), %xmm0
ucomisd 0x1b564(%rip), %xmm0    # 0x96198
jae 0x7b0fd
movq 0x8(%rsp), %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1f1cd(%rip), %rsi     # 0x99e1e
callq 0x8480
leaq 0xe0(%rsp), %rsi
jmp 0x7b121
movq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1f1a2(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %r12, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1f188(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq 0x8(%rsp), %rdi
leaq 0x1f167(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x200(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1f147(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x1f0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1f127(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x8(%rsp), %rdi
movapd 0xd0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1f105(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0xc0(%rsp), %xmm0
jmp 0x7aded
movq 0x8(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1f0d9(%rip), %rsi     # 0x99e1e
callq 0x8480
leaq 0xe0(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1f0ba(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movq %r12, %rsi
callq 0x8430
movq 0x8(%rsp), %rdi
leaq 0x1f09e(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x40(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1f081(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x240(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1f061(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x8(%rsp), %rdi
movapd 0xc0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1f03f(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0xd0(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1f01f(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x90(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movapd 0x40(%rsp), %xmm0
movapd 0x200(%rsp), %xmm2
ucomisd %xmm2, %xmm0
jb 0x7aec1
movapd 0x100(%rsp), %xmm0
ucomisd %xmm2, %xmm0
jb 0x7aec1
movapd 0x140(%rsp), %xmm0
ucomisd 0x1b342(%rip), %xmm0    # 0x96198
jae 0x7aff3
movq 0x18(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1efa9(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ef8f(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ef70(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x200(%rsp), %xmm0
jmp 0x7b053
movapd 0x40(%rsp), %xmm1
ucomisd %xmm1, %xmm2
jb 0x7af59
movapd 0x100(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jb 0x7af59
movapd 0x110(%rsp), %xmm0
ucomisd 0x1b2a7(%rip), %xmm0    # 0x96198
jae 0x7b078
movq 0x18(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ef0b(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1eeef(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1eed5(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x40(%rsp), %xmm0
jmp 0x7b0d8
movapd 0x100(%rsp), %xmm0
unpcklpd %xmm0, %xmm0            # xmm0 = xmm0[0,0]
cmpnlepd %xmm1, %xmm0
movmskpd %xmm0, %eax
testl %eax, %eax
jne 0x7b28e
movapd 0x1c0(%rsp), %xmm0
ucomisd 0x1b210(%rip), %xmm0    # 0x96198
jae 0x7b1ef
movq 0x18(%rsp), %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ee79(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ee5a(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ee3e(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x100(%rsp), %xmm0
jmp 0x7b24f
movq 0x18(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ee12(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1edf8(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1edd9(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x140(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1edb9(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x1f0(%rsp), %xmm0
jmp 0x7b26f
movq 0x18(%rsp), %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ed8d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ed6e(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ed54(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x110(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1ed34(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x240(%rsp), %xmm0
jmp 0x7b26f
movq 0x8(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ed05(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %r12, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1eceb(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq 0x8(%rsp), %rdi
leaq 0x1eccd(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x100(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1ecad(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0x170(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1ec8d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x8(%rsp), %rdi
movapd 0x90(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1ec6b(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movapd 0xc0(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1ec4b(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x90(%rsp)
jmp 0x7ae04
movq 0x18(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ec13(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movq %r12, %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ebf9(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x20(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1ebdd(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x1c0(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1ebbd(%rip), %rsi     # 0x99e1e
callq 0x8480
movapd 0x170(%rsp), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1eb9d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0xa0(%rsp), %rax
cmpq %rax, 0xa8(%rsp)
je 0x7b2a8
movq %rax, 0xa8(%rsp)
movq 0x120(%rsp), %rax
cmpq %rax, 0x128(%rsp)
je 0x7b2c2
movq %rax, 0x128(%rsp)
movq 0x150(%rsp), %rax
movl 0x14(%rsp), %ecx
movl %ecx, %ebp
cmpq %rax, 0x158(%rsp)
je 0x7a2da
movq %rax, 0x158(%rsp)
movl %ecx, %ebp
jmp 0x7a2da
movq 0x61cf4(%rip), %rdi     # 0xdcfe8
leaq 0x3239f(%rip), %rsi     # 0xad69a
callq 0x8480
movq %rax, %rdi
callq 0x8230
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
callq 0x8978
leaq 0x20(%rsp), %rdi
callq 0x8978
leaq 0x150(%rsp), %rdi
callq 0x2b43c
leaq 0x120(%rsp), %rdi
callq 0x2b43c
leaq 0xa0(%rsp), %rdi
callq 0x2b43c
leaq 0x180(%rsp), %rdi
callq 0x7b976
leaq 0x1a0(%rsp), %rdi
callq 0x7b976
leaq 0x1d0(%rsp), %rdi
callq 0x8978
xorl %eax, %eax
addq $0x378, %rsp            # imm = 0x378
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x3324e(%rip), %rdi     # 0xae5e0
leaq 0x33261(%rip), %rsi     # 0xae5fa
leaq 0x3326f(%rip), %rcx     # 0xae60f
pushq $0x68
jmp 0x7b3cd
leaq 0x33286(%rip), %rdi     # 0xae631
jmp 0x7b3bd
leaq 0x332ab(%rip), %rdi     # 0xae65f
jmp 0x7b3bd
leaq 0x3328b(%rip), %rdi     # 0xae648
leaq 0x33236(%rip), %rsi     # 0xae5fa
leaq 0x33244(%rip), %rcx     # 0xae60f
pushq $0x6e
popq %rdx
callq 0x82f0
jmp 0x7b545
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x8978
jmp 0x7b3ea
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x18(%rsp), %rdi
jmp 0x7b417
jmp 0x7b535
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x8978
jmp 0x7b40d
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x8(%rsp), %rdi
callq 0x84a0
jmp 0x7b5f6
jmp 0x7b535
movq %rax, %rbx
leaq 0x288(%rsp), %rdi
callq 0x2b43c
jmp 0x7b5ae
jmp 0x7b4c2
jmp 0x7b490
jmp 0x7b4c2
jmp 0x7b481
jmp 0x7b490
jmp 0x7b535
jmp 0x7b481
jmp 0x7b535
jmp 0x7b535
jmp 0x7b535
jmp 0x7b545
jmp 0x7b545
jmp 0x7b545
jmp 0x7b4c2
jmp 0x7b535
jmp 0x7b481
jmp 0x7b490
jmp 0x7b535
jmp 0x7b49f
jmp 0x7b4c2
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x8978
jmp 0x7b493
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
jmp 0x7b4ca
jmp 0x7b535
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x8978
jmp 0x7b4c5
jmp 0x7b4c2
jmp 0x7b535
jmp 0x7b4c2
jmp 0x7b545
jmp 0x7b535
jmp 0x7b4c2
jmp 0x7b535
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x8978
jmp 0x7b5f6
jmp 0x7b535
jmp 0x7b530
jmp 0x7b530
movq %rax, %rbx
jmp 0x7b597
movq %rax, %rbx
jmp 0x7b58a
movq %rax, %rbx
leaq 0x2a0(%rsp), %rdi
jmp 0x7b59f
jmp 0x7b545
jmp 0x7b530
jmp 0x7b545
movq %rax, %rbx
leaq 0x358(%rsp), %rdi
jmp 0x7b529
jmp 0x7b530
jmp 0x7b530
movq %rax, %rbx
leaq 0x318(%rsp), %rdi
jmp 0x7b529
movq %rax, %rbx
leaq 0x338(%rsp), %rdi
callq 0x8978
jmp 0x7b5a4
movq %rax, %rbx
jmp 0x7b5a4
movq %rax, %rbx
jmp 0x7b5f6
jmp 0x7b545
jmp 0x7b545
jmp 0x7b545
jmp 0x7b545
movq %rax, %rbx
jmp 0x7b5ae
movq %rax, %rbx
leaq 0x2d8(%rsp), %rdi
jmp 0x7b56f
movq %rax, %rbx
leaq 0x2b8(%rsp), %rdi
jmp 0x7b56f
movq %rax, %rbx
leaq 0x2f8(%rsp), %rdi
callq 0x8978
jmp 0x7b57d
jmp 0x7b57a
jmp 0x7b57a
movq %rax, %rbx
leaq 0x258(%rsp), %rdi
callq 0x28a08
leaq 0x270(%rsp), %rdi
callq 0x28a08
leaq 0x228(%rsp), %rdi
callq 0x28a08
leaq 0x78(%rsp), %rdi
callq 0x28a08
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0x58(%rsp), %rdi
callq 0x8978
leaq 0x20(%rsp), %rdi
callq 0x8978
leaq 0x150(%rsp), %rdi
callq 0x2b43c
leaq 0x120(%rsp), %rdi
callq 0x2b43c
leaq 0xa0(%rsp), %rdi
callq 0x2b43c
leaq 0x180(%rsp), %rdi
callq 0x7b976
leaq 0x1a0(%rsp), %rdi
callq 0x7b976
leaq 0x1d0(%rsp), %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8870