// File: /workspace/github_cpp_makefile_star2_O2/millanek[P]evo/evo_combineVCFs.cpp
// Function: VCFcombMain(int, char**)
int VCFcombMain(int argc, char** argv) {
    parseVCFcombOptions(argc, argv);
    const string refAllele = "0/0"; const string altAllele = "1/1";
    string line; // for reading the input files
    
    std::istream* vcfFile1 = createReader(opt::vcfFile1.c_str());
    std::istream* vcfFile2 = createReader(opt::vcfFile2.c_str());
    std::ifstream* refFile1 = new std::ifstream(opt::refFile1.c_str());
    std::ifstream* refFile2 = new std::ifstream(opt::refFile2.c_str());
    
    string extraMaskFileName = opt::out + "_extraMask.bed";
    std::ofstream* extraMaskFile = new std::ofstream(extraMaskFileName.c_str());
    
    
    // Read in the whole reference sequences
    string refSeq1; string refSeq2; refSeq1.reserve(50000000); refSeq2.reserve(50000000);
    getline(*refFile1, line); string chrRef1 = line.substr(1,string::npos);
    getline(*refFile2, line); string chrRef2 = line.substr(1,string::npos);
    assert(chrRef1 == chrRef2);
    
    while (getline(*refFile1, line)) { refSeq1.append(line); }
    while (getline(*refFile2, line)) { refSeq2.append(line); }
    assert(chrRef1.length() == chrRef2.length());
    std::transform(refSeq1.begin(), refSeq1.end(),refSeq1.begin(), ::toupper);
    std::transform(refSeq2.begin(), refSeq2.end(),refSeq2.begin(), ::toupper);
    
    std::map<int,string> VCF1; std::map<int,string> VCF2;
    std::vector<string> header1; std::vector<string> header2;
    std::vector<string> samples1; std::vector<string> samples2;
    std::vector<std::string> fields;
    // Now go through the vcf and add the AA fields
    while (getline(*vcfFile1, line)) {
        if (line[0] == '#' && line[1] == '#') { header1.push_back(line); }
        else if (line[0] == '#' && line[1] == 'C') {
            header1.push_back(line);
            fields = split(line, '\t');
            for (std::vector<std::string>::size_type i = NUM_NON_GENOTYPE_COLUMNS; i != fields.size(); i++) {
                samples1.push_back(fields[i]);
            }
        } else {
            fields = split(line, '\t');
            VCF1[atoi(fields[1].c_str())] = line;
        }
    }
    while (getline(*vcfFile2, line)) {
        if (line[0] == '#' && line[1] == '#') { header2.push_back(line); }
        else if (line[0] == '#' && line[1] == 'C') {
            header2.push_back(line); fields = split(line, '\t');
            for (std::vector<std::string>::size_type i = NUM_NON_GENOTYPE_COLUMNS; i != fields.size(); i++) {
                samples2.push_back(fields[i]);
            }
        } else {
            fields = split(line, '\t');
            VCF2[atoi(fields[1].c_str())] = line;
        }
    }
    
    std::ifstream* accessibleGenomeBed = new std::ifstream(opt::mappabilityFile.c_str());
    std::cerr << "Loading the accessible genome annotation:" << std::endl;
    AccessibleGenome* ag = new AccessibleGenome(accessibleGenomeBed);
    std::vector<bool> acc(refSeq1.length(),false);
    std::vector<std::vector<int>> thisChrMask = ag->BedFeatureMap.at(chrRef1);
    for (int i = 0; i < thisChrMask[0].size(); i++) {
        for (int j = thisChrMask[0][i]; j < thisChrMask[1][i]; j++) { acc[j] = true; }
    }
    std::cerr << "Done" << std::endl;
    
    
    std::cout << header1[0] << std::endl;
    std::cout << header1[1] << std::endl;
    std::cout << header1[2] << std::endl;
    std::cout << header1.back() << "\t"; print_vector(samples2, std::cout);
    int inMask = 0; int noAlignment = 0; int notVariable = 0; int becomesMultiallelic = 0;
    int vcf1Var = 0; int vcf2Var = 0; int sharedVar = 0; int refDifVar = 0;
    std::cerr << "Length of the chromosome/scaffold: " <<  refSeq1.length() << std::endl;
    
    for (int i = 0; i < refSeq1.length(); i++) {
        int pos = i+1;
       /* if (pos == 7801 || pos == 20205) {
            std::cerr << "VCF1.count("<< pos<<"): " <<  VCF1.count(pos) << "VCF2.count("<< pos<<"): " <<  VCF2.count(pos) << std::endl;
            std::cerr << "refSeq1[i] " <<  refSeq1[i] << "refSeq2[i] " << refSeq2[i] << std::endl;
        }*/
        // if (ag->findIfBPaccessible(chrRef1, i+1) == true) continue; // This assumes a mask file is given
        if (acc[i] == true) { inMask++; continue; }
        if (refSeq1[i] == 'N' || refSeq2[i] == 'N') {
            *extraMaskFile << chrRef1 << "\t" << i << "\t" << i+1 << std::endl;
            noAlignment++; continue;
        }
        if (refSeq1[i] == refSeq2[i]) {
            if (VCF1.count(pos) == 0 && VCF2.count(pos) == 0) { notVariable++; continue; }
            else if (VCF1.count(pos) == 1) {
                if (VCF2.count(pos) == 0) {
                    std::cout << VCF1[pos]; for (int j = 0; j < samples2.size(); j++) { std::cout << "\t" << refAllele; }
                    std::cout << std::endl; vcf1Var++;
                }
                if (VCF2.count(pos) == 1) {
                    fields = split(VCF1[pos], '\t'); char altAllele1 = fields[4][0];
                    fields = split(VCF2[pos], '\t'); char refAllele2 = fields[3][0]; char altAllele2 = fields[4][0];
                    if (refAllele2 != refSeq2[i] && complementIUPAC(refAllele2) == refSeq2[i]) { altAllele2 = complementIUPAC(altAllele2);}
                    if (altAllele1 == altAllele2) {
                        std::vector<string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
                        std::cout << VCF1[pos] << "\t"; print_vector(genotypes, std::cout); sharedVar++;
                    } else {
                        becomesMultiallelic++;
                    } // else this would be multiallelic
                }
            }
            else if (VCF2.count(pos) == 1) {
                fields = split(VCF2[pos], '\t');
                if (fields[3][0] != refSeq2[i] && complementIUPAC(fields[3][0]) == refSeq2[i]) { fields[3][0] = complementIUPAC(fields[3][0]);}
                std::vector<string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
                for (int j = 0; j < NUM_NON_GENOTYPE_COLUMNS; j++) { std::cout << fields[j] << "\t"; }
                for (int j = 0; j < samples1.size(); j++) { std::cout << refAllele << "\t"; }
                print_vector(genotypes,std::cout); vcf2Var++;
            }
        } else // refSeq1[i] != refSeq2[i]
        {
            if (VCF1.count(pos) == 0 && VCF2.count(pos) == 0) {
                std::cout << chrRef1 << "\t" << pos << "\t.\t" << refSeq1[i] << "\t" << refSeq2[i] << "\t1000\tPASS\tAC=" << samples2.size()*2 << "\tGT";
                for (int j = 0; j < samples1.size(); j++) { std::cout << "\t" << refAllele; }
                for (int j = 0; j < samples2.size(); j++) { std::cout << "\t" << altAllele; }
                std::cout << std::endl; refDifVar++;
            }
            else if (VCF1.count(pos) == 1) {
                fields = split(VCF1[pos], '\t'); char altAllele1 = fields[4][0];
                /*if (pos == 7801 || pos == 20205) {
                    std::cerr << "altAllele1 " <<  altAllele1 << "refSeq2[i] " << refSeq2[i] << std::endl;
                }*/
                if (altAllele1 != refSeq2[i]) { becomesMultiallelic++; continue; } // This would be multiallelic
                
                if (VCF2.count(pos) == 0) {
                    std::cout << VCF1[pos]; for (int j = 0; j < samples2.size(); j++) { std::cout << "\t" << refAllele; }
                    std::cout << std::endl; vcf1Var++;
                }
                if (VCF2.count(pos) == 1) {
                    fields = split(VCF2[pos], '\t'); char refAllele2 = fields[3][0]; char altAllele2 = fields[4][0];
                    if (refAllele2 != refSeq2[i] && complementIUPAC(refAllele2) == refSeq2[i]) { altAllele2 = complementIUPAC(altAllele2);}
                    /*if (pos == 7801 || pos == 20205) {
                        std::cerr << "altAllele2 " <<  altAllele1 << "refSeq1[i] " << refSeq2[i] << std::endl;
                    }*/
                    if (altAllele2  == refSeq1[i]) { // The alternative allele in the simDia called VCF needs to match the AstCal allele
                        std::vector<string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
                        std::cout << VCF1[pos] << "\t"; print_vector(genotypes, std::cout); sharedVar++;
                    } else {
                        becomesMultiallelic++;
                    } // else this would be multiallelic
                }
            }
            else if (VCF2.count(pos) == 1) {
                fields = split(VCF2[pos], '\t'); char refAllele2 = fields[3][0]; char altAllele2 = fields[4][0];
                if (refAllele2 != refSeq2[i] && complementIUPAC(refAllele2) == refSeq2[i]) { altAllele2 = complementIUPAC(altAllele2);}
                if (altAllele2  == refSeq1[i]) { // The alternative allele in the simDia called VCF needs to match the AstCal allele
                    std::vector<string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
                    for (int j = 0; j < NUM_NON_GENOTYPE_COLUMNS; j++) { std::cout << fields[j] << "\t"; }
                    for (int j = 0; j < samples1.size(); j++) { std::cout << refAllele << "\t"; }
                    print_vector(genotypes,std::cout); vcf2Var++;
                } else {
                    becomesMultiallelic++;
                }
            }
        }
    }
    std::cerr << "Base categories not resulting in a variant:" << std::endl;
    std::cerr << "inMask\t" << inMask << std::endl;
    std::cerr << "noAlignment\t" << noAlignment << std::endl;
    std::cerr << "notVariable\t" << notVariable << std::endl;
    std::cerr << "becomesMultiallelic\t" << becomesMultiallelic << std::endl;
    std::cerr << "Total non-variant sites:\t" << inMask+noAlignment+notVariable+becomesMultiallelic << std::endl;
    std::cout << std::endl;
    std::cerr << "Base categories resulting in a variant:" << std::endl;
    std::cerr << "Difference between reference sequences:\t" << refDifVar << std::endl;
    std::cerr << "Variant in vcf1:\t" << vcf1Var << std::endl;
    std::cerr << "Variant in vcf2:\t" << vcf2Var << std::endl;
    std::cerr << "Shared vcf1 and vcf2 variant:\t" << sharedVar << std::endl;
    std::cerr << "Total variant sites:\t" << refDifVar+vcf1Var+vcf2Var+sharedVar << std::endl;
    std::cout << std::endl;
    std::cerr << "Total sites:\t" << inMask+noAlignment+notVariable+becomesMultiallelic+refDifVar+vcf1Var+vcf2Var+sharedVar << std::endl;
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x318, %rsp            # imm = 0x318
callq 0x86579
leaq 0x19cc9(%rip), %rsi     # 0x9eb76
leaq 0x1f8(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
callq 0x21904
leaq 0x19cb1(%rip), %rsi     # 0x9eb7a
leaq 0x2c8(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
callq 0x21904
leaq 0x110(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq 0x5a0d7(%rip), %rsi     # 0xdefd0
leaq 0xb0(%rsp), %rdi
leaq 0x160(%rsp), %rdx
callq 0x21904
leaq 0xb0(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x42587
movq %rax, 0x68(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x8978
movq 0x5a0b9(%rip), %rsi     # 0xdeff0
leaq 0xb0(%rsp), %rdi
leaq 0x160(%rsp), %rdx
callq 0x21904
leaq 0xb0(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x42587
movq %rax, 0x30(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x8978
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r12
movq 0x5a08e(%rip), %rsi     # 0xdf010
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r15
movq 0x5a08f(%rip), %rsi     # 0xdf030
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
leaq 0x5a0bd(%rip), %rsi     # 0xdf070
leaq 0x2b706(%rip), %rdx     # 0xb06c0
leaq 0x2a8(%rsp), %rdi
callq 0x28806
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %rbp
movq 0x2a8(%rsp), %rsi
pushq $0x10
popq %rdx
movq %rax, %rdi
callq 0x84e0
leaq 0xf0(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0xa0(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
leaq 0xe0(%rsp), %rdi
movl $0x2faf080, %esi        # imm = 0x2FAF080
callq 0x8700
leaq 0x90(%rsp), %rdi
movl $0x2faf080, %esi        # imm = 0x2FAF080
callq 0x8700
leaq 0x100(%rsp), %rsi
movq %r12, %rdi
callq 0x80a0
leaq 0x1d8(%rsp), %rdi
leaq 0x100(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $-0x1
popq %rcx
callq 0x84b0
leaq 0x100(%rsp), %rsi
movq %r15, %rdi
callq 0x80a0
leaq 0x258(%rsp), %rdi
leaq 0x100(%rsp), %rsi
pushq $0x1
popq %rdx
pushq $-0x1
popq %rcx
callq 0x84b0
leaq 0x1d8(%rsp), %rdi
leaq 0x258(%rsp), %rsi
callq 0x26b06
testb %al, %al
je 0x862d0
leaq 0x100(%rsp), %rbx
leaq 0xe0(%rsp), %r13
movq %r12, %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x850dc
movq %r13, %rdi
movq %rbx, %rsi
callq 0x8920
jmp 0x850b6
leaq 0x100(%rsp), %rbx
leaq 0x90(%rsp), %r12
movq %r15, %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x85112
movq %r12, %rdi
movq %rbx, %rsi
callq 0x8920
jmp 0x850ec
movq 0x1e0(%rsp), %rax
cmpq 0x260(%rsp), %rax
jne 0x862e9
movq 0xe0(%rsp), %rbx
movq 0xe8(%rsp), %r14
xorl %r15d, %r15d
cmpq %r15, %r14
je 0x85153
movsbl (%rbx,%r15), %edi
callq 0x88b0
movb %al, (%rbx,%r15)
incq %r15
jmp 0x8513b
movq 0x90(%rsp), %rbx
movq 0x98(%rsp), %r14
xorl %r15d, %r15d
cmpq %r15, %r14
je 0x8517e
movsbl (%rbx,%r15), %edi
callq 0x88b0
movb %al, (%rbx,%r15)
incq %r15
jmp 0x85166
movq %rbp, 0x1b0(%rsp)
leaq 0xb8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x168(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
xorps %xmm0, %xmm0
leaq 0x140(%rsp), %rax
andq $0x0, 0x10(%rax)
movaps %xmm0, (%rax)
andq $0x0, 0x1a0(%rsp)
leaq 0x120(%rsp), %r12
andq $0x0, 0x10(%r12)
movaps %xmm0, 0x190(%rsp)
andq $0x0, 0x80(%rsp)
movaps %xmm0, (%r12)
movaps %xmm0, 0x70(%rsp)
leaq 0x10(%rsp), %r13
movaps %xmm0, (%r13)
andq $0x0, 0x10(%r13)
leaq 0x100(%rsp), %rbp
leaq 0x218(%rsp), %r15
movq 0x68(%rsp), %rdi
movq %rbp, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x8532e
movq 0x100(%rsp), %rax
cmpb $0x23, (%rax)
jne 0x85270
movzbl 0x1(%rax), %eax
cmpl $0x43, %eax
je 0x852c6
cmpl $0x23, %eax
jne 0x85270
leaq 0x140(%rsp), %rdi
movq %rbp, %rsi
callq 0x2b0a4
jmp 0x85224
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r13, %rdi
movq %r15, %rsi
callq 0x2f6c0
movq %r15, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x86f0
movl %eax, 0x218(%rsp)
leaq 0xb0(%rsp), %rdi
movq %r15, %rsi
callq 0x2952e
movq %rax, %rdi
movq %rbp, %rsi
callq 0x82a0
jmp 0x85224
leaq 0x140(%rsp), %rdi
movq %rbp, %rsi
callq 0x2b0a4
movq %r15, %rdi
movq %rbp, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r13, %rdi
movq %r15, %rsi
callq 0x2f6c0
movq %r15, %rdi
callq 0x28a08
movl $0x120, %r14d           # imm = 0x120
pushq $0x9
popq %rbx
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
subq %rsi, %rax
sarq $0x5, %rax
cmpq %rax, %rbx
je 0x85224
addq %r14, %rsi
movq %r12, %rdi
callq 0x2b0a4
incq %rbx
addq $0x20, %r14
jmp 0x85300
leaq 0x100(%rsp), %r14
leaq 0x218(%rsp), %r12
leaq 0x10(%rsp), %r13
leaq 0x70(%rsp), %r15
movq 0x30(%rsp), %rdi
movq %r14, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x85451
movq 0x100(%rsp), %rax
cmpb $0x23, (%rax)
jne 0x85394
movzbl 0x1(%rax), %eax
cmpl $0x43, %eax
je 0x853ea
cmpl $0x23, %eax
jne 0x85394
leaq 0x190(%rsp), %rdi
movq %r14, %rsi
callq 0x2b0a4
jmp 0x85348
movq %r12, %rdi
movq %r14, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r13, %rdi
movq %r12, %rsi
callq 0x2f6c0
movq %r12, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x86f0
movl %eax, 0x218(%rsp)
leaq 0x160(%rsp), %rdi
movq %r12, %rsi
callq 0x2952e
movq %rax, %rdi
movq %r14, %rsi
callq 0x82a0
jmp 0x85348
leaq 0x190(%rsp), %rdi
movq %r14, %rsi
callq 0x2b0a4
movq %r12, %rdi
movq %r14, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r13, %rdi
movq %r12, %rsi
callq 0x2f6c0
movq %r12, %rdi
callq 0x28a08
movl $0x120, %ebx            # imm = 0x120
pushq $0x9
popq %rbp
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
subq %rsi, %rax
sarq $0x5, %rax
cmpq %rax, %rbp
je 0x85348
addq %rbx, %rsi
movq %r15, %rdi
callq 0x2b0a4
incq %rbp
addq $0x20, %rbx
jmp 0x85423
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
movq 0x59beb(%rip), %rsi     # 0xdf050
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
movq %r14, 0x1d0(%rsp)
movq 0x57b69(%rip), %rdi     # 0xdcfe8
leaq 0x2b2b3(%rip), %rsi     # 0xb0739
callq 0x8480
movq %rax, %rdi
callq 0x8230
pushq $0x38
popq %rdi
callq 0x8490
movq %rax, %r14
leaq 0x1d0(%rsp), %rsi
movq %rax, %rdi
callq 0x3a63a
movq 0xe8(%rsp), %rsi
leaq 0x1b8(%rsp), %rdx
movb $0x0, (%rdx)
leaq 0x218(%rsp), %rdi
leaq 0x48(%rsp), %rcx
callq 0x43d00
addq $0x8, %r14
leaq 0x1d8(%rsp), %rsi
movq %r14, %rdi
callq 0x3c2be
leaq 0x1b8(%rsp), %rdi
movq %rax, %rsi
callq 0x3c304
movq 0x1b8(%rsp), %rax
xorl %r15d, %r15d
leaq 0x218(%rsp), %rbx
movq (%rax), %rcx
movq 0x8(%rax), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %r15, %rdx
jbe 0x8554e
movslq (%rcx,%r15,4), %r14
movq 0x18(%rax), %rcx
movslq (%rcx,%r15,4), %rcx
cmpq %rcx, %r14
jge 0x85549
movq %rbx, %rdi
movq %r14, %rsi
callq 0x439c0
orq %rdx, (%rax)
incq %r14
movq 0x1b8(%rsp), %rax
jmp 0x85521
incq %r15
jmp 0x8550a
movq 0x57a93(%rip), %rdi     # 0xdcfe8
leaq 0x10c8b(%rip), %rsi     # 0x961e7
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x140(%rsp), %rsi
movq 0x57a40(%rip), %rdi     # 0xdcfb8
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x140(%rsp), %rsi
addq $0x20, %rsi
movq 0x57a20(%rip), %rdi     # 0xdcfb8
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x140(%rsp), %rsi
addq $0x40, %rsi
movq 0x57a00(%rip), %rdi     # 0xdcfb8
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x148(%rsp), %rsi
addq $-0x20, %rsi
movq 0x579e0(%rip), %rdi     # 0xdcfb8
callq 0x8430
leaq 0x1483a(%rip), %rsi     # 0x99e1e
movq %rax, %rdi
callq 0x8480
leaq 0x240(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x297dc
movq 0x579b3(%rip), %rsi     # 0xdcfb8
leaq 0x240(%rsp), %rdi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
leaq 0x240(%rsp), %rdi
callq 0x28a08
movq 0x579bc(%rip), %rdi     # 0xdcfe8
leaq 0x2b130(%rip), %rsi     # 0xb0763
callq 0x8480
movq 0xe8(%rsp), %rsi
movq %rax, %rdi
callq 0x8320
movq %rax, %rdi
callq 0x8230
xorl %r15d, %r15d
leaq 0x147c4(%rip), %r12     # 0x99e1e
movq 0x57957(%rip), %rbp     # 0xdcfb8
movl $0x0, 0x38(%rsp)
movl $0x0, 0x64(%rsp)
movl $0x0, 0x40(%rsp)
movl $0x0, 0x3c(%rsp)
movl $0x0, 0x30(%rsp)
movl $0x0, 0x44(%rsp)
movl $0x0, 0x68(%rsp)
xorl %r13d, %r13d
cmpq %r15, 0xe8(%rsp)
jbe 0x85fc9
movq %r15, %rbx
incq %r15
movl %r15d, 0x8(%rsp)
leaq 0x218(%rsp), %rdi
movq %rbx, %rsi
callq 0x439c0
testq %rdx, (%rax)
je 0x856cf
incl %r13d
jmp 0x8569c
movq 0xe0(%rsp), %rax
movb (%rax,%rbx), %al
cmpb $0x4e, %al
je 0x856ee
movq 0x90(%rsp), %rcx
movb (%rcx,%rbx), %cl
cmpb $0x4e, %cl
jne 0x8573f
movq 0x1b0(%rsp), %rdi
leaq 0x1d8(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
movq %rax, %rdi
movl %r15d, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
incl 0x68(%rsp)
jmp 0x8569c
cmpb %cl, %al
jne 0x85807
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
testq %rax, %rax
jne 0x85779
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
testq %rax, %rax
je 0x85ce1
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
cmpq $0x1, %rax
jne 0x85920
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
testq %rax, %rax
jne 0x85b7d
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
movq %rbp, %rdi
movq %rax, %rsi
callq 0x8430
xorl %r14d, %r14d
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
sarq $0x5, %rax
cmpq %r14, %rax
jbe 0x85b71
movq %rbp, %rdi
movq %r12, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x8430
incq %r14
jmp 0x857d0
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
testq %rax, %rax
jne 0x85839
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
testq %rax, %rax
je 0x85cea
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
cmpq $0x1, %rax
jne 0x85a0f
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x2f6c0
movq %r14, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x80(%rax), %rax
movb (%rax), %al
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
jne 0x85fc0
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
testq %rax, %rax
jne 0x85e86
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
movq %rbp, %rdi
movq %rax, %rsi
callq 0x8430
xorl %r14d, %r14d
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
sarq $0x5, %rax
cmpq %r14, %rax
jbe 0x85e7a
movq %rbp, %rdi
movq %r12, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x8430
incq %r14
jmp 0x858e9
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
cmpq $0x1, %rax
jne 0x8569c
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x2f6c0
movq %r14, %rdi
callq 0x28a08
movq 0x10(%rsp), %rsi
movq 0x60(%rsi), %rax
movb (%rax), %al
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
je 0x859c4
movsbl %al, %edi
callq 0x46619
movq 0x90(%rsp), %rcx
movq 0x10(%rsp), %rsi
cmpb (%rcx,%rbx), %al
jne 0x859c4
movq 0x60(%rsi), %rax
movsbl (%rax), %edi
callq 0x46619
movq 0x10(%rsp), %rcx
movq 0x60(%rcx), %rcx
movb %al, (%rcx)
movq 0x10(%rsp), %rsi
addq $0x120, %rsi            # imm = 0x120
movq 0x18(%rsp), %rdx
leaq 0x48(%rsp), %rdi
leaq 0xe(%rsp), %rcx
callq 0x613fe
xorl %ebx, %ebx
cmpq $0x120, %rbx            # imm = 0x120
je 0x85b0b
movq 0x10(%rsp), %rsi
addq %rbx, %rsi
movq %rbp, %rdi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
addq $0x20, %rbx
jmp 0x859e1
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
cmpq $0x1, %rax
jne 0x8569c
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x2f6c0
movq %r14, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rcx
movq 0x80(%rax), %rdx
movb (%rcx), %al
movb (%rdx), %r14b
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
je 0x85aa8
movsbl %al, %edi
callq 0x46619
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
jne 0x85aa8
movsbl %r14b, %edi
callq 0x46619
movl %eax, %r14d
movq 0xe0(%rsp), %rax
cmpb (%rax,%rbx), %r14b
jne 0x85fc0
movq 0x10(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x18(%rsp), %rdx
leaq 0x48(%rsp), %rdi
leaq 0xe(%rsp), %rcx
callq 0x613fe
xorl %ebx, %ebx
cmpq $0x120, %rbx            # imm = 0x120
je 0x85e08
movq 0x10(%rsp), %rsi
addq %rbx, %rsi
movq %rbp, %rdi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
addq $0x20, %rbx
jmp 0x85add
xorl %ebx, %ebx
movq 0x128(%rsp), %rax
subq 0x120(%rsp), %rax
sarq $0x5, %rax
cmpq %rbx, %rax
jbe 0x85b46
movq %rbp, %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
incq %rbx
jmp 0x85b0d
leaq 0x300(%rsp), %rbx
movq %rbx, %rdi
leaq 0x48(%rsp), %rsi
callq 0x297dc
movq %rbx, %rdi
movq %rbp, %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
jmp 0x85e69
movq %rbp, %rdi
callq 0x8230
incl 0x3c(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
cmpq $0x1, %rax
jne 0x8569c
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x2f6c0
movq %r14, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x80(%rax), %rax
movb (%rax), %al
movb %al, 0xf(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
movq %r14, %rdi
movq %rax, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x2f6c0
movq %r14, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rcx
movq 0x80(%rax), %rdx
movb (%rcx), %al
movb (%rdx), %r14b
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
je 0x85c5d
movsbl %al, %edi
callq 0x46619
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
jne 0x85c5d
movsbl %r14b, %edi
callq 0x46619
movl %eax, %r14d
cmpb %r14b, 0xf(%rsp)
jne 0x85fc0
movq 0x10(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x18(%rsp), %rdx
leaq 0x48(%rsp), %rdi
leaq 0xe(%rsp), %rcx
callq 0x613fe
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
movq %rbp, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
leaq 0x290(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x297dc
leaq 0x290(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
jmp 0x85fa5
incl 0x44(%rsp)
jmp 0x8569c
movq %rbp, %rdi
leaq 0x1d8(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
movl 0x8(%rsp), %esi
movq %rax, %rdi
callq 0x8840
movq %rax, %rdi
leaq 0x2aa6c(%rip), %rsi     # 0xb0787
callq 0x8480
movq 0xe0(%rsp), %rcx
movsbl (%rcx,%rbx), %esi
movq %rax, %rdi
callq 0x8510
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
movq 0x90(%rsp), %rcx
movsbl (%rcx,%rbx), %esi
movq %rax, %rdi
callq 0x8510
movq %rax, %rdi
leaq 0x2aa2e(%rip), %rsi     # 0xb078b
callq 0x8480
movq 0x78(%rsp), %rsi
subq 0x70(%rsp), %rsi
sarq $0x4, %rsi
movq %rax, %rdi
callq 0x8320
movq %rax, %rdi
leaq 0x24818(%rip), %rsi     # 0xaa59a
callq 0x8480
xorl %ebx, %ebx
movq 0x128(%rsp), %rax
subq 0x120(%rsp), %rax
sarq $0x5, %rax
cmpq %rbx, %rax
jbe 0x85dc2
movq %rbp, %rdi
movq %r12, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x8430
incq %rbx
jmp 0x85d89
xorl %ebx, %ebx
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
sarq $0x5, %rax
cmpq %rbx, %rax
jbe 0x85df7
movq %rbp, %rdi
movq %r12, %rsi
callq 0x8480
movq %rax, %rdi
leaq 0x2c8(%rsp), %rsi
callq 0x8430
incq %rbx
jmp 0x85dc4
movq %rbp, %rdi
callq 0x8230
incl 0x64(%rsp)
jmp 0x8569c
xorl %ebx, %ebx
movq 0x128(%rsp), %rax
subq 0x120(%rsp), %rax
sarq $0x5, %rax
cmpq %rbx, %rax
jbe 0x85e43
movq %rbp, %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
incq %rbx
jmp 0x85e0a
leaq 0x2e8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x48(%rsp), %rsi
callq 0x297dc
movq %rbx, %rdi
movq %rbp, %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %rbx, %rdi
callq 0x28a08
incl 0x40(%rsp)
jmp 0x85fb1
movq %rbp, %rdi
callq 0x8230
incl 0x3c(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x86786
cmpq $0x1, %rax
jne 0x8569c
leaq 0x160(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
leaq 0x48(%rsp), %r14
movq %r14, %rdi
movq %rax, %rsi
pushq $0x9
popq %rdx
callq 0x40349
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0x2f6c0
movq %r14, %rdi
callq 0x28a08
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rcx
movq 0x80(%rax), %rdx
movb (%rcx), %al
movb (%rdx), %r14b
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
je 0x85f1f
movsbl %al, %edi
callq 0x46619
movq 0x90(%rsp), %rcx
cmpb (%rcx,%rbx), %al
jne 0x85f1f
movsbl %r14b, %edi
callq 0x46619
movl %eax, %r14d
movq 0xe0(%rsp), %rax
cmpb (%rax,%rbx), %r14b
jne 0x85fc0
movq 0x10(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x18(%rsp), %rdx
leaq 0x48(%rsp), %rdi
leaq 0xe(%rsp), %rcx
callq 0x613fe
leaq 0xb0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x28bfa
movq %rbp, %rdi
movq %rax, %rsi
callq 0x8430
movq %rax, %rdi
movq %r12, %rsi
callq 0x8480
leaq 0x278(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x297dc
leaq 0x278(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
pushq $0x9
popq %rdx
pushq $0x1
popq %rcx
callq 0x2ea24
movq %rbx, %rdi
callq 0x28a08
incl 0x38(%rsp)
leaq 0x48(%rsp), %rdi
callq 0x28a08
jmp 0x8569c
incl 0x30(%rsp)
jmp 0x8569c
movq 0x57018(%rip), %rdi     # 0xdcfe8
leaq 0x2a7c3(%rip), %rsi     # 0xb079a
callq 0x8480
movl 0x40(%rsp), %ebx
movl 0x68(%rsp), %ebp
movl 0x64(%rsp), %r14d
movl 0x38(%rsp), %r15d
movl 0x3c(%rsp), %r12d
movq %rax, %rdi
callq 0x8230
movq 0x56fe6(%rip), %rdi     # 0xdcfe8
leaq 0x2a7bd(%rip), %rsi     # 0xb07c6
callq 0x8480
movq %rax, %rdi
movl %r13d, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56fc0(%rip), %rdi     # 0xdcfe8
leaq 0x2a79f(%rip), %rsi     # 0xb07ce
callq 0x8480
movq %rax, %rdi
movl %ebp, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56f9b(%rip), %rdi     # 0xdcfe8
leaq 0x2a787(%rip), %rsi     # 0xb07db
callq 0x8480
movq %rax, %rdi
movl 0x44(%rsp), %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56f74(%rip), %rdi     # 0xdcfe8
leaq 0x2a76d(%rip), %rsi     # 0xb07e8
callq 0x8480
movq %rax, %rdi
movl 0x30(%rsp), %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56f4d(%rip), %rdi     # 0xdcfe8
leaq 0x2a75b(%rip), %rsi     # 0xb07fd
callq 0x8480
movl 0x44(%rsp), %ecx
addl 0x30(%rsp), %ecx
addl %r13d, %ebp
addl %ecx, %ebp
movq %rax, %rdi
movl %ebp, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56eeb(%rip), %rdi     # 0xdcfb8
callq 0x8230
movq 0x56f0f(%rip), %rdi     # 0xdcfe8
leaq 0x2a737(%rip), %rsi     # 0xb0817
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x56ef4(%rip), %rdi     # 0xdcfe8
leaq 0x2a744(%rip), %rsi     # 0xb083f
callq 0x8480
movq %rax, %rdi
movl %r14d, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56ece(%rip), %rdi     # 0xdcfe8
leaq 0x2a747(%rip), %rsi     # 0xb0868
callq 0x8480
movq %rax, %rdi
movl %r12d, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56ea8(%rip), %rdi     # 0xdcfe8
leaq 0x2a733(%rip), %rsi     # 0xb087a
callq 0x8480
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56e83(%rip), %rdi     # 0xdcfe8
leaq 0x2a720(%rip), %rsi     # 0xb088c
callq 0x8480
movq %rax, %rdi
movl %r15d, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56e5d(%rip), %rdi     # 0xdcfe8
leaq 0x2a719(%rip), %rsi     # 0xb08ab
callq 0x8480
addl %r15d, %r14d
addl %r12d, %ebx
addl %r14d, %ebx
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x56dff(%rip), %rdi     # 0xdcfb8
callq 0x8230
movq 0x56e23(%rip), %rdi     # 0xdcfe8
leaq 0x2a6f5(%rip), %rsi     # 0xb08c1
callq 0x8480
addl %ebp, %ebx
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
leaq 0x1b8(%rsp), %rdi
callq 0x3b73c
leaq 0x218(%rsp), %rdi
callq 0x2aee2
leaq 0x10(%rsp), %rdi
callq 0x28a08
leaq 0x70(%rsp), %rdi
callq 0x28a08
leaq 0x120(%rsp), %rdi
callq 0x28a08
leaq 0x190(%rsp), %rdi
callq 0x28a08
leaq 0x140(%rsp), %rdi
callq 0x28a08
leaq 0x160(%rsp), %rdi
callq 0x2b344
leaq 0xb0(%rsp), %rdi
callq 0x2b344
leaq 0x258(%rsp), %rdi
callq 0x8978
leaq 0x1d8(%rsp), %rdi
callq 0x8978
leaq 0x90(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0x2a8(%rsp), %rdi
callq 0x8978
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x2c8(%rsp), %rdi
callq 0x8978
leaq 0x1f8(%rsp), %rdi
callq 0x8978
xorl %eax, %eax
addq $0x318, %rsp            # imm = 0x318
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x2a3f8(%rip), %rdi     # 0xb06cf
leaq 0x2a404(%rip), %rsi     # 0xb06e2
leaq 0x2a411(%rip), %rcx     # 0xb06f6
pushq $0x3f
jmp 0x86300
leaq 0x2a424(%rip), %rdi     # 0xb0714
leaq 0x2a3eb(%rip), %rsi     # 0xb06e2
leaq 0x2a3f8(%rip), %rcx     # 0xb06f6
pushq $0x43
popq %rdx
callq 0x82f0
movq %rax, %rbx
leaq 0x278(%rsp), %rdi
jmp 0x86365
jmp 0x86497
jmp 0x86497
movq %rax, %rbx
leaq 0x2e8(%rsp), %rdi
jmp 0x86365
jmp 0x86468
movq %rax, %rbx
leaq 0x290(%rsp), %rdi
jmp 0x86365
jmp 0x86497
jmp 0x86497
jmp 0x86497
jmp 0x86497
jmp 0x86497
jmp 0x86468
movq %rax, %rbx
leaq 0x300(%rsp), %rdi
callq 0x28a08
jmp 0x8646b
jmp 0x86468
jmp 0x86497
jmp 0x86497
jmp 0x86468
jmp 0x86497
jmp 0x86497
jmp 0x86497
jmp 0x86497
movq %rax, %rbx
leaq 0x240(%rsp), %rdi
jmp 0x86470
jmp 0x86492
movq %rax, %rbx
pushq $0x38
popq %rsi
jmp 0x863c1
jmp 0x86492
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
callq 0x84a0
jmp 0x864b4
jmp 0x863d0
movq %rax, %rbx
jmp 0x86516
jmp 0x8644c
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq %rbp, %rdi
callq 0x84a0
jmp 0x8653d
movq %rax, %rbx
jmp 0x8653d
jmp 0x86433
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r15, %rdi
jmp 0x86413
jmp 0x86433
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r12, %rdi
callq 0x84a0
jmp 0x8654a
jmp 0x86433
jmp 0x86423
jmp 0x86433
movq %rax, %rbx
leaq 0xb0(%rsp), %rdi
jmp 0x86545
movq %rax, %rbx
jmp 0x8654a
movq %rax, %rbx
jmp 0x86564
jmp 0x86497
movq %rax, %rbx
jmp 0x864a7
jmp 0x86492
movq %rax, %rbx
jmp 0x86523
jmp 0x86492
jmp 0x86492
jmp 0x86497
jmp 0x86468
jmp 0x86468
jmp 0x86497
jmp 0x86497
jmp 0x86497
jmp 0x86497
jmp 0x86468
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x28a08
jmp 0x8649a
jmp 0x86492
jmp 0x86492
jmp 0x86497
jmp 0x86492
jmp 0x86492
jmp 0x86497
jmp 0x86492
jmp 0x86492
jmp 0x86489
movq %rax, %rbx
jmp 0x86509
jmp 0x86497
jmp 0x86492
movq %rax, %rbx
jmp 0x864b4
movq %rax, %rbx
leaq 0x1b8(%rsp), %rdi
callq 0x3b73c
leaq 0x218(%rsp), %rdi
callq 0x2aee2
leaq 0x10(%rsp), %rdi
callq 0x28a08
leaq 0x70(%rsp), %rdi
callq 0x28a08
leaq 0x120(%rsp), %rdi
callq 0x28a08
leaq 0x190(%rsp), %rdi
callq 0x28a08
leaq 0x140(%rsp), %rdi
callq 0x28a08
leaq 0x160(%rsp), %rdi
callq 0x2b344
leaq 0xb0(%rsp), %rdi
callq 0x2b344
leaq 0x258(%rsp), %rdi
callq 0x8978
leaq 0x1d8(%rsp), %rdi
callq 0x8978
leaq 0x90(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0x2a8(%rsp), %rdi
callq 0x8978
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x2c8(%rsp), %rdi
callq 0x8978
leaq 0x1f8(%rsp), %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8870