// File: /workspace/github_cpp_makefile_star2_O1/millanek[P]evo/evo_codingStats_from_alignment.cpp
// Function: getCodingStats(int, char**)
int getCodingStats(int argc, char** argv) {
    parseCodingStatsOptions(argc, argv);
    std::vector<string> allAligmentFiles; string statsFileName; string pcaVectorsFileName;
    
    std::vector<std::vector<std::string>> genomeWide_Dxy;
    if (opt::genomeWide_DxyMatrixFile != "") {
        std::ifstream* genomeWide_DxyMatrixFile = new std::ifstream(opt::genomeWide_DxyMatrixFile);
        string line;
        while (getline(*genomeWide_DxyMatrixFile, line)) {
            std::vector<string> thisIndDxyVec = split(line, '\t');
            genomeWide_Dxy.push_back(thisIndDxyVec);
        }
    }
    
    pNsets* sets;
    if (opt::pNgroupsFile != "") {
        std::ifstream* pNgroupsF = new std::ifstream(opt::pNgroupsFile);
        sets = new pNsets(pNgroupsF);
    } else {
        sets = new pNsets();
    }
    if (sets->initialised == true) {
        std::cerr << "Sets are initialised" << std::endl;
    }
    
    std::cerr << "Calculating gene coding statistics" << std::endl;
    
    if (opt::alignmentFile != "") {
        allAligmentFiles.push_back(opt::alignmentFile);
        // look at suffix
        size_t suffixPos = opt::alignmentFile.find_last_of('.');
        if (suffixPos !=  std::string::npos) {
            if (opt::alignmentFile.substr(suffixPos) == ".fa" || opt::alignmentFile.substr(suffixPos) == ".fasta") {
                statsFileName = stripExtension(opt::alignmentFile) + "_stats.txt";
                std::cerr << "for the gene: " << stripExtension(opt::alignmentFile) << std::endl;
            } else {
                statsFileName = opt::alignmentFile + "_stats.txt";
                std::cerr << "for the gene: " << opt::alignmentFile << std::endl;
            }
        }
    } else {
        std::ifstream* alignmentList = new std::ifstream(opt::alignmentListFile.c_str());
        statsFileName = stripExtension(opt::alignmentListFile) + "_stats.txt";
        pcaVectorsFileName = stripExtension(opt::alignmentListFile) + "_pcaVectors.txt";
        std::cerr << "for the genes in: " << opt::alignmentListFile << std::endl;
        std::string line;
        while (getline(*alignmentList, line)) {
            allAligmentFiles.push_back(line);
        }
    } 
      
    std::ofstream* statsFile = new std::ofstream(statsFileName.c_str());
    std::ofstream* pcaVectorsFile = new std::ofstream(pcaVectorsFileName.c_str());
    if (opt::ploidy == 'd') {
        if (opt::pNgroupsFile != "") {
            std::cout << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << "\t" << "withinSet1pN" << "\t" << "withinSet2pN" << "\t" << "withinSet3pN"<< "\t" << "pNset1vsSet2" << "\t" << "pNset1andSet2vsSet3" << "\t" << "pNwithinSet1andSet2" << std::endl;
            *statsFile << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << "\t" << "withinSet1pN" << "\t" << "withinSet2pN" << "\t" << "withinSet3pN"<< "\t" << "pNset1vsSet2" << "\t" << "pNset1andSet2vsSet3" << "\t" << "pNwithinSet1andSet2" << std::endl;
        } else {
            std::cout << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << std::endl;
            *statsFile << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << std::endl;
        }
    } else {
        std::cout << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << std::endl;
        *statsFile << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << std::endl;
    }
    // Loop over the mutiple alignment files:
    for (std::vector<std::string>::size_type i = 0; i != allAligmentFiles.size(); i++) {
        std::ifstream* alignment = new std::ifstream(allAligmentFiles[i].c_str());
        std::vector<string> allSeqs; std::vector<string> allSeqsH2;
        std::string line; int lineNum = 1;
        while (getline(*alignment, line)) {
            if (lineNum % 2 == 1) assert(line[0] == '>');
            lineNum++;
            if (line[0] == '>') continue;
            if (opt::ploidy == 'd' && allSeqsH2.size() == (allSeqs.size() - 1))
                allSeqsH2.push_back(line);
            else
                allSeqs.push_back(line);
        } alignment->close();
        
        //std::cerr << "loaded seqs for: " << allAligmentFiles[i] << std::endl;
        //std::cerr << "allSeqs.size(): " << allSeqs.size() << std::endl;
        if (allSeqs.size() > 0) {
            assert(allSeqs[0].length() % 3 == 0); // The gene length must be divisible by three
            if (opt::ploidy == 'd')
                assert(allSeqs[0].length() == allSeqsH2[0].length());
            
            std::vector<string> statsThisGene; statsThisGene.push_back(allAligmentFiles[i]);
            if (opt::ploidy == 'd') {
                std::vector<std::vector<double> > combinedVectorForPCA;
                getStatsBothPhasedHaps(allSeqs, allSeqsH2, statsThisGene, combinedVectorForPCA, sets, opt::tStVratio, opt::nonCodingNull);
                std::cerr << "got stats for: " << allAligmentFiles[i] << std::endl;
                if (opt::pNgroupsFile != "") {
                    int ns1 = (int)sets->set1Loci.size(); int ns2 = (int)sets->set2Loci.size(); int ns3 = (int)sets->set3Loci.size();
                    statsThisGene.push_back(numToString(sets->withinSet1pN/(2*ns1*(ns1-1))));
                    statsThisGene.push_back(numToString(sets->withinSet2pN/(2*ns2*(ns2-1))));
                    statsThisGene.push_back(numToString(sets->withinSet3pN/(2*ns3*(ns3-1))));
                    statsThisGene.push_back(numToString(sets->set1vsSet2pN/(2*ns1*ns2)));
                    statsThisGene.push_back(numToString(sets->sets1and2vsSet3pN/(2*(ns1+ns2)*ns3)));
                    statsThisGene.push_back(numToString(sets->withinSet1andSet2pN/(2*(ns1+ns2)*(ns1+ns2-1))));
                    sets->withinSet1pN = 0;
                    sets->withinSet2pN = 0;
                    sets->withinSet3pN = 0;
                    sets->set1vsSet2pN = 0;
                    sets->sets1and2vsSet3pN = 0;
                    sets->withinSet1andSet2pN = 0;
                }
                print_vector(statsThisGene, std::cout);
                print_vector(statsThisGene, *statsFile);
                for (int i = 0; i < combinedVectorForPCA.size() - 1; i++) {
                    for (int j = i+1; j < combinedVectorForPCA.size(); j++) {
                        if (j == (combinedVectorForPCA.size() - 1) && i == (combinedVectorForPCA.size() - 2))
                            *pcaVectorsFile << combinedVectorForPCA[i][j] << std::endl;
                        else
                            *pcaVectorsFile << combinedVectorForPCA[i][j] << '\t';
                    }
                }
            } else {
                getStatsHaploidSeq(allSeqs,statsThisGene, opt::tStVratio);
                print_vector(statsThisGene, std::cout);
                print_vector(statsThisGene, *statsFile);
            }
        } else{
            std::cout << allAligmentFiles[i] << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << std::endl;
            *statsFile << allAligmentFiles[i] << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << std::endl;
        }
    }
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1d8, %rsp            # imm = 0x1D8
callq 0x4550e
xorl %eax, %eax
movq %rax, 0x80(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
leaq 0x120(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x140(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movq %rax, 0x170(%rsp)
movapd %xmm0, 0x160(%rsp)
leaq 0xc8c5a(%rip), %rdi     # 0x10bf98
leaq 0x8e93a(%rip), %rsi     # 0xd1c7f
callq 0x8160
testl %eax, %eax
je 0x4340a
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %r14
leaq 0xc8c32(%rip), %rsi     # 0x10bf98
movq %rax, %rdi
movl $0x8, %edx
callq 0x8740
leaq 0x18(%rsp), %r13
movq %r13, -0x10(%r13)
movq $0x0, -0x8(%r13)
movb $0x0, (%r13)
leaq 0x8(%rsp), %rbx
leaq 0x90(%rsp), %r15
leaq 0x160(%rsp), %r12
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x433f3
movq %r15, %rdi
movq %rbx, %rsi
movl $0x9, %edx
callq 0x50624
movq %r12, %rdi
movq %r15, %rsi
callq 0x32338
movq %r15, %rdi
callq 0x3123c
jmp 0x4339e
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x4340a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xc8b67(%rip), %rdi     # 0x10bf78
leaq 0x8e867(%rip), %rsi     # 0xd1c7f
callq 0x8160
testl %eax, %eax
je 0x43466
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %r14
leaq 0xc8b43(%rip), %rsi     # 0x10bf78
movq %rax, %rdi
movl $0x8, %edx
callq 0x8740
movq %r14, 0x8(%rsp)
movl $0xe0, %edi
callq 0x8470
movq %rax, %r13
leaq 0x8(%rsp), %rsi
movq %rax, %rdi
callq 0x458b6
jmp 0x43507
movl $0xe0, %edi
callq 0x8470
movq %rax, %r13
addq $0x30, %rax
movq %rax, (%r13)
movl $0x1, %eax
movq %rax, 0x8(%r13)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%r13)
movl $0x3f800000, %ecx       # imm = 0x3F800000
movl %ecx, 0x20(%r13)
movupd %xmm0, 0x28(%r13)
leaq 0x68(%r13), %rdx
movq %rdx, 0x38(%r13)
movq %rax, 0x40(%r13)
movupd %xmm0, 0x48(%r13)
movl %ecx, 0x58(%r13)
movupd %xmm0, 0x60(%r13)
movq %r13, %rdx
addq $0xa0, %rdx
movq %rdx, 0x70(%r13)
movq %rax, 0x78(%r13)
movupd %xmm0, 0x80(%r13)
movl %ecx, 0x90(%r13)
movupd %xmm0, 0x98(%r13)
movupd %xmm0, 0xa8(%r13)
movupd %xmm0, 0xb8(%r13)
movupd %xmm0, 0xc8(%r13)
movb $0x0, 0xd8(%r13)
cmpb $0x1, 0xd8(%r13)
jne 0x43557
movq 0xc7ad0(%rip), %rbx     # 0x10afe8
leaq 0x90f11(%rip), %rsi     # 0xd4430
movl $0x14, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc7a9e(%rip), %rdi     # 0x10afe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xc7a8a(%rip), %rbx     # 0x10afe8
leaq 0x90ee0(%rip), %rsi     # 0xd4445
movl $0x22, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc7a58(%rip), %rdi     # 0x10afe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0xc8994(%rip), %rdi     # 0x10bf38
leaq 0x8e6d4(%rip), %rsi     # 0xd1c7f
callq 0x8160
testl %eax, %eax
je 0x4365d
leaq 0xc8979(%rip), %rsi     # 0x10bf38
leaq 0x70(%rsp), %rdi
callq 0x33db0
leaq 0xc8968(%rip), %rdi     # 0x10bf38
movl $0x2e, %esi
movq $-0x1, %rdx
callq 0x88f0
cmpq $-0x1, %rax
je 0x43a09
movq %rax, %rbx
leaq 0xc8943(%rip), %rsi     # 0x10bf38
leaq 0x8(%rsp), %rdi
movq %rax, %rdx
movq $-0x1, %rcx
callq 0x84a0
leaq 0x9d9aa(%rip), %rsi     # 0xe0fba
leaq 0x8(%rsp), %rdi
callq 0x8160
movl %eax, %ebp
testl %eax, %eax
je 0x436d5
leaq 0xc890d(%rip), %rsi     # 0x10bf38
leaq 0x90(%rsp), %rdi
movq %rbx, %rdx
movq $-0x1, %rcx
callq 0x84a0
leaq 0x8f4b0(%rip), %rsi     # 0xd2af9
leaq 0x90(%rsp), %rdi
callq 0x8160
testl %eax, %eax
sete %bl
jmp 0x436d7
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %r14
movq 0xc88e7(%rip), %rsi     # 0x10bf58
movq %rax, %rdi
movl $0x8, %edx
callq 0x8860
leaq 0xc88d3(%rip), %rsi     # 0x10bf58
leaq 0x90(%rsp), %rdi
callq 0x50803
leaq 0x90dcf(%rip), %rsi     # 0xd4468
leaq 0x90(%rsp), %rdi
callq 0x88c0
leaq 0x18(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x43821
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
jmp 0x4382b
movb $0x1, %bl
testl %ebp, %ebp
je 0x436fc
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x436fc
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x18(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x43717
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
testb %bl, %bl
je 0x43767
leaq 0xc8816(%rip), %rsi     # 0x10bf38
leaq 0x28(%rsp), %rdi
callq 0x50803
leaq 0x90d35(%rip), %rsi     # 0xd4468
leaq 0x28(%rsp), %rdi
callq 0x88c0
movq %r14, 0x8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4511c
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
jmp 0x45125
leaq 0x8(%rsp), %rdi
movq %r14, (%rdi)
movq 0xc87c2(%rip), %rsi     # 0x10bf38
movq 0xc87c3(%rip), %rdx     # 0x10bf40
addq %rsi, %rdx
callq 0x2e45c
leaq 0x90cdc(%rip), %rsi     # 0xd4468
leaq 0x8(%rsp), %rdi
callq 0x88c0
leaq 0x110(%rsp), %rdi
leaq 0x8(%rsp), %rbx
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x437c0
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xc7821(%rip), %rdi     # 0x10afe8
leaq 0x8e42f(%rip), %rsi     # 0xd1bfd
movl $0xe, %edx
callq 0x84e0
movq 0xc8759(%rip), %rsi     # 0x10bf38
movq 0xc875a(%rip), %rdx     # 0x10bf40
movq 0xc77fb(%rip), %rdi     # 0x10afe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x43a09
movupd (%rcx), %xmm0
movupd %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x8(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x110(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x4386c
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xa0(%rsp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0x4388d
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xc86c4(%rip), %rsi     # 0x10bf58
leaq 0x90(%rsp), %rdi
callq 0x50803
leaq 0x90bcb(%rip), %rsi     # 0xd4473
leaq 0x90(%rsp), %rdi
callq 0x88c0
movq %r12, 0x8(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x438d8
movq %rdx, 0x8(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x18(%rsp)
jmp 0x438e2
movupd (%rcx), %xmm0
movupd %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x8(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x130(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x43923
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x90(%rsp), %rdi
cmpq %r15, %rdi
je 0x43940
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xc76a1(%rip), %rdi     # 0x10afe8
leaq 0x8ab92(%rip), %rsi     # 0xce4e0
movl $0x12, %edx
callq 0x84e0
movq 0xc85f9(%rip), %rsi     # 0x10bf58
movq 0xc85fa(%rip), %rdx     # 0x10bf60
movq 0xc767b(%rip), %rdi     # 0x10afe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x8(%rsp), %rbx
movq %r12, (%rbx)
movq $0x0, 0x8(%rbx)
movb $0x0, 0x10(%rbx)
leaq 0x70(%rsp), %r15
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x439f2
movq %r15, %rdi
movq %rbx, %rsi
callq 0x33db0
jmp 0x439b5
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
je 0x43a09
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq 0x110(%rsp), %rsi
movq %rax, (%rsp)
movq %rax, %rdi
movl $0x10, %edx
callq 0x84c0
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x68(%rsp)
movq 0x130(%rsp), %rsi
movq 0x68(%rsp), %rdi
movl $0x10, %edx
callq 0x84c0
cmpb $0x64, 0xc7a87(%rip)    # 0x10b4e0
jne 0x44014
leaq 0xc8512(%rip), %rdi     # 0x10bf78
leaq 0x8e212(%rip), %rsi     # 0xd1c7f
callq 0x8160
testl %eax, %eax
je 0x44284
movq 0xc7537(%rip), %rdi     # 0x10afb8
leaq 0x909fb(%rip), %rsi     # 0xd4483
movl $0xa, %edx
callq 0x84e0
movq 0xc751f(%rip), %rdi     # 0x10afb8
leaq 0x8e1de(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7507(%rip), %rdi     # 0x10afb8
leaq 0x909d6(%rip), %rsi     # 0xd448e
movl $0x7, %edx
callq 0x84e0
movq 0xc74ef(%rip), %rdi     # 0x10afb8
leaq 0x8e1ae(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc74d7(%rip), %rdi     # 0x10afb8
leaq 0x909f2(%rip), %rsi     # 0xd44da
movl $0x2, %edx
callq 0x84e0
movq 0xc74bf(%rip), %rdi     # 0x10afb8
leaq 0x8e17e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc74a7(%rip), %rdi     # 0x10afb8
leaq 0x9097e(%rip), %rsi     # 0xd4496
movl $0x2, %edx
callq 0x84e0
movq 0xc748f(%rip), %rdi     # 0x10afb8
leaq 0x8e14e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7477(%rip), %rdi     # 0x10afb8
leaq 0x90951(%rip), %rsi     # 0xd4499
movl $0x4, %edx
callq 0x84e0
movq 0xc745f(%rip), %rdi     # 0x10afb8
leaq 0x8e11e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7447(%rip), %rdi     # 0x10afb8
leaq 0x90926(%rip), %rsi     # 0xd449e
movl $0x4, %edx
callq 0x84e0
movq 0xc742f(%rip), %rdi     # 0x10afb8
leaq 0x8e0ee(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7417(%rip), %rdi     # 0x10afb8
leaq 0x908fb(%rip), %rsi     # 0xd44a3
movl $0x8, %edx
callq 0x84e0
movq 0xc73ff(%rip), %rdi     # 0x10afb8
leaq 0x8e0be(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc73e7(%rip), %rdi     # 0x10afb8
leaq 0x908d6(%rip), %rsi     # 0xd44ae
movl $0x8, %edx
callq 0x84e0
movq 0xc73cf(%rip), %rdi     # 0x10afb8
leaq 0x8e08e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc73b7(%rip), %rdi     # 0x10afb8
leaq 0x908a4(%rip), %rsi     # 0xd44ac
movl $0xa, %edx
callq 0x84e0
movq 0xc739f(%rip), %rdi     # 0x10afb8
leaq 0x8e05e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7387(%rip), %rdi     # 0x10afb8
leaq 0x9087f(%rip), %rsi     # 0xd44b7
movl $0x18, %edx
callq 0x84e0
movq 0xc736f(%rip), %rdi     # 0x10afb8
leaq 0x8e02e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7357(%rip), %rdi     # 0x10afb8
leaq 0x90868(%rip), %rsi     # 0xd44d0
movl $0xc, %edx
callq 0x84e0
movq 0xc733f(%rip), %rdi     # 0x10afb8
leaq 0x8dffe(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7327(%rip), %rdi     # 0x10afb8
leaq 0x90845(%rip), %rsi     # 0xd44dd
movl $0xc, %edx
callq 0x84e0
movq 0xc730f(%rip), %rdi     # 0x10afb8
leaq 0x8dfce(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc72f7(%rip), %rdi     # 0x10afb8
leaq 0x90822(%rip), %rsi     # 0xd44ea
movl $0xc, %edx
callq 0x84e0
movq 0xc72df(%rip), %rdi     # 0x10afb8
leaq 0x8df9e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc72c7(%rip), %rdi     # 0x10afb8
leaq 0x907ff(%rip), %rsi     # 0xd44f7
movl $0xc, %edx
callq 0x84e0
movq 0xc72af(%rip), %rdi     # 0x10afb8
leaq 0x8df6e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7297(%rip), %rdi     # 0x10afb8
leaq 0x907dc(%rip), %rsi     # 0xd4504
movl $0x13, %edx
callq 0x84e0
movq 0xc727f(%rip), %rdi     # 0x10afb8
leaq 0x8df3e(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc7267(%rip), %r14     # 0x10afb8
leaq 0x907c0(%rip), %rbx     # 0xd4518
movl $0x13, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc7232(%rip), %rdi     # 0x10afb8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x906e9(%rip), %rsi     # 0xd4483
movl $0xa, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8decf(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x906ca(%rip), %rsi     # 0xd448e
movl $0x7, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dea5(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x906ec(%rip), %rsi     # 0xd44da
movl $0x2, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8de7b(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x9067e(%rip), %rsi     # 0xd4496
movl $0x2, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8de51(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90657(%rip), %rsi     # 0xd4499
movl $0x4, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8de27(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90632(%rip), %rsi     # 0xd449e
movl $0x4, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ddfd(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x9060d(%rip), %rsi     # 0xd44a3
movl $0x8, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ddd3(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x905ee(%rip), %rsi     # 0xd44ae
movl $0x8, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dda9(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x905c2(%rip), %rsi     # 0xd44ac
movl $0xa, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dd7f(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x905a3(%rip), %rsi     # 0xd44b7
movl $0x18, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dd55(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90592(%rip), %rsi     # 0xd44d0
movl $0xc, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dd2b(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90575(%rip), %rsi     # 0xd44dd
movl $0xc, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dd01(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90558(%rip), %rsi     # 0xd44ea
movl $0xc, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dcd7(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x9053b(%rip), %rsi     # 0xd44f7
movl $0xc, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dcad(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x9051e(%rip), %rsi     # 0xd4504
movl $0x13, %r14d
movl $0x13, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dc7d(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
jmp 0x445fd
movq 0xc6f9d(%rip), %rdi     # 0x10afb8
leaq 0x90461(%rip), %rsi     # 0xd4483
movl $0xa, %edx
callq 0x84e0
movq 0xc6f85(%rip), %rdi     # 0x10afb8
leaq 0x8dc44(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6f6d(%rip), %rdi     # 0x10afb8
leaq 0x9043c(%rip), %rsi     # 0xd448e
movl $0x7, %edx
callq 0x84e0
movq 0xc6f55(%rip), %rdi     # 0x10afb8
leaq 0x8dc14(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6f3d(%rip), %rdi     # 0x10afb8
leaq 0x90458(%rip), %rsi     # 0xd44da
movl $0x2, %edx
callq 0x84e0
movq 0xc6f25(%rip), %rdi     # 0x10afb8
leaq 0x8dbe4(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6f0d(%rip), %rdi     # 0x10afb8
leaq 0x903e4(%rip), %rsi     # 0xd4496
movl $0x2, %edx
callq 0x84e0
movq 0xc6ef5(%rip), %rdi     # 0x10afb8
leaq 0x8dbb4(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6edd(%rip), %rdi     # 0x10afb8
leaq 0x903c1(%rip), %rsi     # 0xd44a3
movl $0x8, %edx
callq 0x84e0
movq 0xc6ec5(%rip), %rdi     # 0x10afb8
leaq 0x8db84(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6ead(%rip), %rdi     # 0x10afb8
leaq 0x9039c(%rip), %rsi     # 0xd44ae
movl $0x8, %edx
callq 0x84e0
movq 0xc6e95(%rip), %rdi     # 0x10afb8
leaq 0x8db54(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6e7d(%rip), %r14     # 0x10afb8
leaq 0x9036a(%rip), %rbx     # 0xd44ac
movl $0xa, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc6e48(%rip), %rdi     # 0x10afb8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x902ff(%rip), %rsi     # 0xd4483
movl $0xa, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dae5(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x902e0(%rip), %rsi     # 0xd448e
movl $0x7, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8dabb(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90302(%rip), %rsi     # 0xd44da
movl $0x2, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8da91(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90294(%rip), %rsi     # 0xd4496
movl $0x2, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8da67(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90277(%rip), %rsi     # 0xd44a3
movl $0x8, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8da3d(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90258(%rip), %rsi     # 0xd44ae
movl $0x8, %edx
movq (%rsp), %rdi
callq 0x84e0
movl $0xa, %r14d
leaq 0x8da0d(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
jmp 0x445fd
movq 0xc6d2d(%rip), %rdi     # 0x10afb8
leaq 0x901f1(%rip), %rsi     # 0xd4483
movl $0xa, %edx
callq 0x84e0
movq 0xc6d15(%rip), %rdi     # 0x10afb8
leaq 0x8d9d4(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6cfd(%rip), %rdi     # 0x10afb8
leaq 0x901cc(%rip), %rsi     # 0xd448e
movl $0x7, %edx
callq 0x84e0
movq 0xc6ce5(%rip), %rdi     # 0x10afb8
leaq 0x8d9a4(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6ccd(%rip), %rdi     # 0x10afb8
leaq 0x901e8(%rip), %rsi     # 0xd44da
movl $0x2, %edx
callq 0x84e0
movq 0xc6cb5(%rip), %rdi     # 0x10afb8
leaq 0x8d974(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6c9d(%rip), %rdi     # 0x10afb8
leaq 0x90174(%rip), %rsi     # 0xd4496
movl $0x2, %edx
callq 0x84e0
movq 0xc6c85(%rip), %rdi     # 0x10afb8
leaq 0x8d944(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6c6d(%rip), %rdi     # 0x10afb8
leaq 0x90147(%rip), %rsi     # 0xd4499
movl $0x4, %edx
callq 0x84e0
movq 0xc6c55(%rip), %rdi     # 0x10afb8
leaq 0x8d914(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6c3d(%rip), %rdi     # 0x10afb8
leaq 0x9011c(%rip), %rsi     # 0xd449e
movl $0x4, %edx
callq 0x84e0
movq 0xc6c25(%rip), %rdi     # 0x10afb8
leaq 0x8d8e4(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6c0d(%rip), %rdi     # 0x10afb8
leaq 0x900f1(%rip), %rsi     # 0xd44a3
movl $0x8, %edx
callq 0x84e0
movq 0xc6bf5(%rip), %rdi     # 0x10afb8
leaq 0x8d8b4(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6bdd(%rip), %rdi     # 0x10afb8
leaq 0x900cc(%rip), %rsi     # 0xd44ae
movl $0x8, %edx
callq 0x84e0
movq 0xc6bc5(%rip), %rdi     # 0x10afb8
leaq 0x8d884(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6bad(%rip), %rdi     # 0x10afb8
leaq 0x9009a(%rip), %rsi     # 0xd44ac
movl $0xa, %edx
callq 0x84e0
movq 0xc6b95(%rip), %rdi     # 0x10afb8
leaq 0x8d854(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
callq 0x84e0
movq 0xc6b7d(%rip), %r14     # 0x10afb8
leaq 0x90075(%rip), %rbx     # 0xd44b7
movl $0x18, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc6b48(%rip), %rdi     # 0x10afb8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x8ffff(%rip), %rsi     # 0xd4483
movl $0xa, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d7e5(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ffe0(%rip), %rsi     # 0xd448e
movl $0x7, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d7bb(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x90002(%rip), %rsi     # 0xd44da
movl $0x2, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d791(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ff94(%rip), %rsi     # 0xd4496
movl $0x2, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d767(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ff6d(%rip), %rsi     # 0xd4499
movl $0x4, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d73d(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ff48(%rip), %rsi     # 0xd449e
movl $0x4, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d713(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ff23(%rip), %rsi     # 0xd44a3
movl $0x8, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d6e9(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8ff04(%rip), %rsi     # 0xd44ae
movl $0x8, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8d6bf(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
leaq 0x8fed8(%rip), %rsi     # 0xd44ac
movl $0xa, %edx
movq (%rsp), %rdi
callq 0x84e0
movl $0x18, %r14d
leaq 0x8d68f(%rip), %rsi     # 0xd1c7e
movl $0x1, %edx
movq (%rsp), %rdi
callq 0x84e0
movq (%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x84e0
movq (%rsp), %rcx
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq (%rsp), %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq %r13, 0x48(%rsp)
movq 0x70(%rsp), %rbx
cmpq %rbx, 0x78(%rsp)
je 0x450a7
movq 0x48(%rsp), %rax
addq $0xa8, %rax
movq %rax, 0x150(%rsp)
movabsq $-0x5555555555555555, %r13 # imm = 0xAAAAAAAAAAAAAAAB
xorl %r15d, %r15d
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %r14
movq %r15, %rbp
shlq $0x5, %rbp
movq (%rbx,%rbp), %rsi
movq %rax, %rdi
movl $0x8, %edx
callq 0x8860
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
xorl %ecx, %ecx
movq %rcx, 0xe0(%rsp)
movq %rcx, 0x100(%rsp)
movapd %xmm0, 0xf0(%rsp)
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq %rcx, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
movl $0x1, %ebx
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x4477c
testb $0x1, %bl
je 0x44718
movq 0x8(%rsp), %rax
cmpb $0x3e, (%rax)
jne 0x451fd
movq 0x8(%rsp), %rax
cmpb $0x3e, (%rax)
je 0x44775
cmpb $0x64, 0xc6db7(%rip)    # 0x10b4e0
jne 0x44763
movq 0xf8(%rsp), %rax
subq 0xf0(%rsp), %rax
sarq $0x5, %rax
movq 0xd8(%rsp), %rcx
subq 0xd0(%rsp), %rcx
sarq $0x5, %rcx
decq %rcx
leaq 0xf0(%rsp), %rdi
cmpq %rcx, %rax
je 0x4476b
leaq 0xd0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x33db0
incl %ebx
jmp 0x446d3
movq %r14, %rdi
callq 0x80f0
leaq 0x8d4f3(%rip), %rbx     # 0xd1c7e
movq 0xd0(%rsp), %rax
cmpq %rax, 0xd8(%rsp)
je 0x44cab
movq 0x8(%rax), %rax
movq %rax, %rcx
imulq %r13, %rcx
movabsq $0x5555555555555556, %rdx # imm = 0x5555555555555556
cmpq %rdx, %rcx
jae 0x4521c
cmpb $0x64, 0xc6d1a(%rip)    # 0x10b4e0
leaq 0x1c0(%rsp), %rbx
jne 0x447e2
movq 0xf0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x4523b
xorpd %xmm0, %xmm0
movapd %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
movq 0x70(%rsp), %rsi
addq %rbp, %rsi
leaq 0x50(%rsp), %rdi
callq 0x33db0
cmpb $0x64, 0xc6cd2(%rip)    # 0x10b4e0
jne 0x44fbd
movq %r15, 0x158(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xb0(%rsp)
movq $0x0, 0xc0(%rsp)
movsd 0xc6cab(%rip), %xmm0    # 0x10b4e8
movzbl 0xc7773(%rip), %r9d     # 0x10bfb8
leaq 0xd0(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0xb0(%rsp), %rcx
movq 0x48(%rsp), %r8
callq 0x72f39
movl $0xf, %edx
movq 0xc6770(%rip), %rdi     # 0x10afe8
leaq 0x8fd3b(%rip), %rsi     # 0xd45ba
callq 0x84e0
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x8(%rax,%rbp), %rdx
movq 0xc674f(%rip), %rdi     # 0x10afe8
callq 0x84e0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r14, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0xc76a9(%rip), %rdi     # 0x10bf78
leaq 0x8d3a9(%rip), %rsi     # 0xd1c7f
callq 0x8160
testl %eax, %eax
je 0x44b16
movq 0x48(%rsp), %rax
movl 0x18(%rax), %ecx
movl 0x50(%rax), %r14d
movl 0x88(%rax), %ebp
movsd 0xa8(%rax), %xmm0
leal (%rcx,%rcx), %ebx
movq %rcx, %r12
leal -0x1(%rcx), %eax
imull %ebx, %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq 0x28(%rsp), %r15
movq %r15, %rdi
callq 0x45e1c
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x416a6
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x44947
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xb0(%rax), %xmm0
leal -0x1(%r14), %eax
imull %r14d, %eax
addl %eax, %eax
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq 0x28(%rsp), %r15
movq %r15, %rdi
callq 0x45e1c
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x416a6
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x4499f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xb8(%rax), %xmm0
leal -0x1(%rbp), %eax
imull %ebp, %eax
addl %eax, %eax
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq 0x28(%rsp), %r15
movq %r15, %rdi
callq 0x45e1c
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x416a6
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x449f5
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xc8(%rax), %xmm0
imull %r14d, %ebx
xorps %xmm1, %xmm1
cvtsi2sd %ebx, %xmm1
divsd %xmm1, %xmm0
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
callq 0x45e1c
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x416a6
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x44a47
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xd0(%rax), %xmm0
addl %r12d, %r14d
leal (%r14,%r14), %ebx
imull %ebx, %ebp
xorps %xmm1, %xmm1
cvtsi2sd %ebp, %xmm1
divsd %xmm1, %xmm0
leaq 0x28(%rsp), %r15
movq %r15, %rdi
callq 0x45e1c
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x416a6
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x44a9f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xc0(%rax), %xmm0
decl %r14d
imull %r14d, %ebx
xorps %xmm1, %xmm1
cvtsi2sd %ebx, %xmm1
divsd %xmm1, %xmm0
leaq 0x28(%rsp), %rbx
movq %rbx, %rdi
callq 0x45e1c
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x416a6
leaq 0x1c0(%rsp), %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x44afc
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x150(%rsp), %rax
xorpd %xmm0, %xmm0
movupd %xmm0, 0x20(%rax)
movupd %xmm0, 0x10(%rax)
movupd %xmm0, (%rax)
movq %rbx, %rdi
leaq 0x50(%rsp), %rsi
callq 0x3273a
movq %rbx, %rdi
movq 0xc648b(%rip), %rsi     # 0x10afb8
movl $0x9, %edx
movl $0x1, %ecx
callq 0x39979
movq %rbx, %rdi
callq 0x3123c
leaq 0x1a8(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x3273a
leaq 0x1a8(%rsp), %rbx
movq %rbx, %rdi
movq (%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x39979
movq %rbx, %rdi
callq 0x3123c
movq 0xb8(%rsp), %rax
subq 0xb0(%rsp), %rax
cmpq $0x18, %rax
je 0x44c91
movl $0x1, %r15d
xorl %r12d, %r12d
movq %r12, %rbx
incq %r12
movq 0xb0(%rsp), %rcx
movq 0xb8(%rsp), %rax
subq %rcx, %rax
sarq $0x3, %rax
imulq %r13, %rax
cmpq %r12, %rax
jbe 0x44c6a
movq %r15, %rbp
leaq -0x1(%rax), %rdx
xorq %rbp, %rdx
addq $-0x2, %rax
xorq %rbx, %rax
leaq (%rbx,%rbx,2), %rsi
movq (%rcx,%rsi,8), %rcx
movsd (%rcx,%rbp,8), %xmm0
orq %rdx, %rax
jne 0x44c22
movq 0x68(%rsp), %rdi
callq 0x8730
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r14, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x44c43
movq 0x68(%rsp), %rdi
callq 0x8730
movb $0x9, 0x28(%rsp)
movl $0x1, %edx
movq %rax, %rdi
leaq 0x28(%rsp), %rsi
callq 0x84e0
incq %rbp
movq 0xb0(%rsp), %rcx
movq 0xb8(%rsp), %rax
subq %rcx, %rax
sarq $0x3, %rax
imulq %r13, %rax
cmpq %rbp, %rax
ja 0x44bcc
movq 0xb8(%rsp), %rax
subq 0xb0(%rsp), %rax
sarq $0x3, %rax
imulq %r13, %rax
decq %rax
incq %r15
cmpq %r12, %rax
ja 0x44b9f
leaq 0xb0(%rsp), %rdi
callq 0x45f06
movq 0x158(%rsp), %r15
jmp 0x4504a
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x8(%rax,%rbp), %rdx
movq 0xc62f8(%rip), %rdi     # 0x10afb8
callq 0x84e0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x8678d(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86769(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86745(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86721(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x866fd(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x866d9(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x866b5(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86691(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x8666d(%rip), %rsi     # 0xcb474
callq 0x84e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r14, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x8(%rax,%rbp), %rdx
movq (%rsp), %rdi
callq 0x84e0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86608(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x865e4(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x865c0(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x8659c(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86578(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86554(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x86530(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x8650c(%rip), %rsi     # 0xcb474
callq 0x84e0
movl $0x1, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movl $0x2, %edx
movq %r14, %rdi
leaq 0x864e8(%rip), %rsi     # 0xcb474
callq 0x84e0
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r14, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x45054
movsd 0xc6523(%rip), %xmm0    # 0x10b4e8
leaq 0xd0(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x723d8
leaq 0x190(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x3273a
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
movq 0xc5fbd(%rip), %rsi     # 0x10afb8
movl $0x9, %edx
movl $0x1, %ecx
callq 0x39979
movq %rbx, %rdi
callq 0x3123c
leaq 0x178(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x3273a
leaq 0x178(%rsp), %rbx
movq %rbx, %rdi
movq (%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x39979
movq %rbx, %rdi
callq 0x3123c
leaq 0x50(%rsp), %rdi
callq 0x3123c
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x45070
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xf0(%rsp), %rdi
callq 0x3123c
leaq 0xd0(%rsp), %rdi
callq 0x3123c
incq %r15
movq 0x70(%rsp), %rbx
movq 0x78(%rsp), %rax
subq %rbx, %rax
sarq $0x5, %rax
cmpq %rax, %r15
jne 0x4466d
leaq 0x160(%rsp), %rdi
callq 0x31aa2
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x450d9
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x450fe
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x70(%rsp), %rdi
callq 0x3123c
xorl %eax, %eax
addq $0x1d8, %rsp            # imm = 0x1D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movupd (%rcx), %xmm0
movupd %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq 0x8(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x110(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x45166
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x45181
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xc5e60(%rip), %rdi     # 0x10afe8
leaq 0x8ca6e(%rip), %rsi     # 0xd1bfd
movl $0xe, %edx
callq 0x84e0
leaq 0xc6d98(%rip), %rsi     # 0x10bf38
leaq 0x8(%rsp), %rdi
callq 0x50803
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq 0xc5e2d(%rip), %rdi     # 0x10afe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
jne 0x439fc
jmp 0x43a09
leaq 0x892ef(%rip), %rdi     # 0xce4f3
leaq 0x8f321(%rip), %rsi     # 0xd452c
leaq 0x8f33d(%rip), %rcx     # 0xd454f
movl $0x87, %edx
callq 0x82c0
leaq 0x8f34d(%rip), %rdi     # 0xd4570
leaq 0x8f302(%rip), %rsi     # 0xd452c
leaq 0x8f31e(%rip), %rcx     # 0xd454f
movl $0x93, %edx
callq 0x82c0
leaq 0x8f34b(%rip), %rdi     # 0xd458d
leaq 0x8f2e3(%rip), %rsi     # 0xd452c
leaq 0x8f2ff(%rip), %rcx     # 0xd454f
movl $0x95, %edx
callq 0x82c0
jmp 0x45447
jmp 0x45314
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x454a5
movq 0x38(%rsp), %rsi
jmp 0x4543d
jmp 0x45447
jmp 0x45447
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x45438
jmp 0x454a5
movq %rax, %rbx
movq 0x90(%rsp), %rdi
cmpq %r15, %rdi
jne 0x452d9
jmp 0x454a5
jmp 0x45447
movq %rax, %rbx
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x454a5
movq 0xa0(%rsp), %rsi
jmp 0x4543d
jmp 0x45447
jmp 0x4540a
jmp 0x45447
movq %rax, %rbx
movl $0xe0, %esi
movq %r13, %rdi
jmp 0x45440
jmp 0x4540a
jmp 0x4540a
jmp 0x45447
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r14, %rdi
jne 0x45438
jmp 0x454a5
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x68(%rsp), %rdi
jmp 0x45440
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq (%rsp), %rdi
jmp 0x45440
jmp 0x45447
jmp 0x45447
jmp 0x45447
jmp 0x45447
jmp 0x45455
jmp 0x45389
jmp 0x45455
jmp 0x45389
jmp 0x45455
jmp 0x45389
jmp 0x45455
jmp 0x45389
jmp 0x45455
jmp 0x45389
jmp 0x45455
movq %rax, %rbx
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x45458
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x45458
movq %rax, %rbx
leaq 0x1c0(%rsp), %rdi
jmp 0x453c9
movq %rax, %rbx
leaq 0x1a8(%rsp), %rdi
callq 0x3123c
jmp 0x45458
movq %rax, %rbx
leaq 0x178(%rsp), %rdi
jmp 0x453eb
movq %rax, %rbx
leaq 0x190(%rsp), %rdi
callq 0x3123c
jmp 0x45465
jmp 0x45447
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x3123c
jmp 0x4542e
jmp 0x4542b
jmp 0x45447
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
jmp 0x45440
movq %rax, %rbx
jmp 0x45465
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r12, %rdi
jne 0x45438
jmp 0x454a5
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
je 0x454a5
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x454a5
movq %rax, %rbx
jmp 0x454a5
jmp 0x45455
jmp 0x45450
movq %rax, %rbx
jmp 0x4546f
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
callq 0x45f06
leaq 0x50(%rsp), %rdi
callq 0x3123c
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x4548b
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xf0(%rsp), %rdi
callq 0x3123c
leaq 0xd0(%rsp), %rdi
callq 0x3123c
leaq 0x160(%rsp), %rdi
callq 0x31aa2
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x454d7
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x454fc
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x70(%rsp), %rdi
callq 0x3123c
movq %rbx, %rdi
callq 0x8840