// File: /workspace/github_cpp_makefile_star2_O1/schneebergerlab[P]DrLink/analyze_molecule.cpp
// Function: write_chr_alignment(ogzstream&, std::multimap<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, ALIGNINFO, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, ALIGNINFO>>>*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, unsigned long, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<int, unsigned long, std::less<int>, std::allocator<std::pair<int const, unsigned long>>>*, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, unsigned long, int)
bool write_chr_alignment(ogzstream& moutfp,
                         multimap<string, ALIGNINFO>* bcPosQueue, 
                         map<string, unsigned long>* molecule_cov,
                         map<int,    unsigned long>* molecule_len,
                         map<int,    unsigned long>* molecule_len_sum, 
                         map<int,    unsigned long>* molecule_read_num,
                         map<int,    unsigned long>* molecule_read_num_sum,
                         map<int,    unsigned long>* molecule_read_interval,
                         map<string, int>*           barcode_molecule_cnt,
                         string lastChr,
                         unsigned long winsize,
                         int minMoleSize)
{
    // bcPosQueue: multimap<chr#barcode, <read.align.start, read.align.end> >
    multimap<string, ALIGNINFO>::iterator mitr; 
    multimap<string, ALIGNINFO>::iterator mitr_end;
    mitr     = (*bcPosQueue).begin();
    mitr_end = (*bcPosQueue).end();
    long moleNum  = 0;
    long alignNum = 0;
    while(mitr != mitr_end)
    {
        string key = (*mitr).first;
        vector<string> chrbc = split_string(key, '#'); // get [0]:chr, [1]:barcode/partition
        std::pair <multimap<string, ALIGNINFO>::iterator, 
                   multimap<string, ALIGNINFO>::iterator> clitr_region;
        clitr_region = (*bcPosQueue).equal_range(key);
        multimap<string, ALIGNINFO>::iterator clitr;
        unsigned long firstAlignSta  = 0; // for calculating molecule length; molecule first alignment       
        unsigned long firstAlignEnd  = 0; // not really used
        unsigned long lastAlignSta   = 0; // molecule last alignment       
        unsigned long lastAlignEnd   = 0; // for calculating molecule length; for breaking molecule
        unsigned long lastR1AlignSta = 0; // for calculating R1 distance
        unsigned long lastR1AlignEnd = 0; // ..
        unsigned long lastR2AlignSta = 0; // for calculating R2 distance
        unsigned long lastR2AlignEnd = 0; // ..     
        int     readNum = 0;
        int     covleng = 0;
        int moleculeLen = 0;
        std::stringstream alignedPos;     // aligned positions of reads of a molecule
        alignedPos.str("");
        //
        std::stringstream readids; // id of reads
        readids.str("");
        std::stringstream rcigars; // cigar of reads
        rcigars.str("");
        std::stringstream rpairids;// id of R1/R2
        rpairids.str("");
        //
        map<int, unsigned long> im_read_interval;
        for (clitr=clitr_region.first; clitr!=clitr_region.second; ++clitr) // span of reads within chr#barcode
        {
            ALIGNINFO span         = (*clitr).second;       
            if(clitr==clitr_region.first || (span.first>lastAlignEnd && span.first-lastAlignEnd+1>winsize)) // new molecule
            {
                // summary last cluster with the same barcode
                if(firstAlignSta != 0)
                {
                   assert(lastAlignEnd>firstAlignSta);
                   moleculeLen = lastAlignEnd-firstAlignSta+1; // in bp
                   if(moleculeLen==0) moleculeLen = 1; // caution: avoid potential dividing 0
                   moutfp << lastAlignSta     << "\t" 
                          << moleculeLen      << "\t" 
                          << setprecision(2)  << fixed << (float)covleng/moleculeLen << "\t" 
                          << readNum          << "\tR\t" 
                          << lastAlignEnd << "\t"
                          << alignedPos.str() << "\t" 
                          << rpairids.str()   << "\t" 
                          << readids.str()    << "\t"
                          << rcigars.str()    << endl;                          
                   if(moleculeLen >= minMoleSize)
                   {
                       // molecule cov
                       std::stringstream mckey;
                       mckey.str("");
                       mckey << setprecision(2) << fixed << (float)covleng/moleculeLen;
                       map<string, unsigned long>::iterator mcitr = (*molecule_cov).find(mckey.str());
                       if(mcitr == (*molecule_cov).end())
                       {
                           (*molecule_cov).insert(std::pair<string, unsigned long>(mckey.str(), 1));
                       }
                       else
                       {
                           (*mcitr).second += 1;
                       }
                       // molecule len
                       int mlkey = (int)round((double)moleculeLen/1000); 
                       map<int, unsigned long>::iterator mlitr = (*molecule_len).find(mlkey);
                       if(mlitr == (*molecule_len).end())
                       {
                           (*molecule_len).insert(std::pair<int, unsigned long>(mlkey, 1));
                           (*molecule_len_sum).insert(std::pair<int, unsigned long>(mlkey, moleculeLen));
                       }
                       else
                       {
                           (*mlitr).second += 1;
                           (*molecule_len_sum)[mlkey] += moleculeLen;
                       }
                       // molecules per barcode
                       map<string, int>::iterator bcitr;
                       bcitr = (*barcode_molecule_cnt).find(chrbc[1]);
                       if(bcitr == (*barcode_molecule_cnt).end())
                       {
                           (*barcode_molecule_cnt).insert(std::pair<string, int>(chrbc[1], 1));
                       }
                       else
                       {
                           (*barcode_molecule_cnt)[chrbc[1]] +=1;
                       }
                       // molecule read number
                       map<int,    unsigned long>::iterator readitr;
                       readitr = (*molecule_read_num).find(readNum);
                       if(readitr == (*molecule_read_num).end())
                       {
                           (*molecule_read_num).insert(std::pair<int, unsigned long>(readNum, 1));
                           (*molecule_read_num_sum).insert(std::pair<int, unsigned long>(readNum, span.second - span.first + 1));
                       }
                       else
                       {
                           (*molecule_read_num)[readNum] += 1;
                           (*molecule_read_num_sum)[readNum] += span.second - span.first + 1;
                       }
                       // molecule read distances:
                       map<int, unsigned long>::iterator imrditr;
                       map<int, unsigned long>::iterator imrditr_end;
                       map<int, unsigned long>::iterator imrditr_final;
                       imrditr     = im_read_interval.begin();
                       imrditr_end = im_read_interval.end();
                       while(imrditr != imrditr_end)
                       {
                           //if(abs((*imrditr).first) > 500) // note: with 0.1x of 50kb molecule, dist between 18 readpairs is 2777bp
                           if(true)
                           {
                               imrditr_final = (*molecule_read_interval).find((*imrditr).first);
                               if(imrditr_final == (*molecule_read_interval).end())
                               {
                                   (*molecule_read_interval).insert(std::pair<int, unsigned long>((*imrditr).first, (*imrditr).second));
                               }
                               else
                               {
                                   (*imrditr_final).second += (*imrditr).second;
                               }
                           }
                           imrditr ++;
                       }        
                   }
                   //
                   readNum = 0;
                   // aligned positions of reads of a molecule
                   alignedPos.str("");
                   // read id and order of pair info
                   readids.str("");
                   rcigars.str("");
                   rpairids.str("");                   
                   covleng = 0;
                }
                // start new/next cluster
                moleNum ++;
                firstAlignSta = span.first;
                firstAlignEnd = span.second;
                moutfp << (*clitr).first << "\t" << firstAlignSta << "\t";
                // read dist info: if do following, then distance of reads between inter-molecules is ignored.
                lastR1AlignSta = 0; // initializing
                lastR1AlignEnd = 0;  
                lastR2AlignSta = 0; // initializing
                lastR2AlignEnd = 0;    
                im_read_interval.clear();             
            }
            // get covered length and read number
            covleng += span.second - span.first + 1;        
            readNum ++;
            // aligned positions of reads of a molecule: each item is a spanning range of a read
            if(alignedPos.str().size()>0)
            {
                alignedPos  << ";" << span.first << "," << span.second;
            }
            else
            {
                alignedPos  << span.first << "," << span.second;
            }
            // read id and order of pair info
            if(readids.str().size()>0)
            {
                readids  << "," << span.readid;
                rcigars  << "," << span.rcigar;
                rpairids << "," << span.rorder; 
            }
            else
            {
                readids  << span.readid;
                rcigars  << span.rcigar;
                rpairids << span.rorder; 
            }            
            alignNum ++;
            // get R1.vs.R1-/R2.vs.R2-read distances within the chr#barcode
            if(span.rorder.compare("1")==0)
            {
                if(lastR1AlignEnd != 0)// if there is one R1-read before current R1-read
                {
                    map<int, unsigned long>::iterator mritr;
                    int distSize = 0;
                    if(span.first>=lastR1AlignEnd)
                    {
                        distSize = span.first-lastR1AlignEnd+1;
                    }
                    else
                    {
                        distSize = -1*(lastR1AlignEnd - span.first+1); // in case overlapping
                    }
                    mritr = im_read_interval.find(distSize);
                    if(mritr == im_read_interval.end())
                    {
                        im_read_interval.insert(std::pair<int, unsigned long>(distSize, 1));
                    }
                    else
                    {
                        (*mritr).second += 1;
                    }
                    //cout << "   check: " << (*clitr).first << ": span.first-lastR1AlignEnd=abs(" << span.first << "-" << lastR1AlignEnd << ")=" << distSize << endl;
                }
                lastR1AlignSta = span.first; // updating
                lastR1AlignEnd = span.second;
            }
            else
            if(span.rorder.compare("2")==0)
            {
                if(lastR2AlignEnd != 0) // if there is one R2-read before current R2-read
                {
                    map<int, unsigned long>::iterator mritr;
                    int distSize = 0;
                    if(span.first>=lastR2AlignEnd)
                    {
                        distSize = span.first-lastR2AlignEnd+1;
                    }
                    else
                    {
                        distSize = -1*(lastR2AlignEnd - span.first+1); // in case overlapping
                    }
                    mritr = im_read_interval.find(distSize);
                    if(mritr == im_read_interval.end())
                    {
                        im_read_interval.insert(std::pair<int, unsigned long>(distSize, 1));
                    }
                    else
                    {
                        (*mritr).second += 1;
                    }
                    //cout << "   check: " << (*clitr).first << ": span.first-lastR2AlignEnd=abs(" << span.first << "-" << lastR2AlignEnd << ")=" << distSize << endl;
                }
                lastR2AlignSta = span.first; // updating
                lastR2AlignEnd = span.second;                 
            }
            else ;            
            // update current as last
            lastAlignSta = span.first;
            lastAlignEnd = span.second;
        }
        // summary last cluster: first_alignment_start all_alignment_cov_len	base_cov	read_num
        assert(lastAlignEnd>firstAlignSta);
        moleculeLen = lastAlignEnd-firstAlignSta+1;
        if(moleculeLen==0) moleculeLen = 1; // caution: avoid potential dividing 0
        moutfp << lastAlignSta     << "\t" 
               << moleculeLen      << "\t" 
               << setprecision(2)  << fixed << (float)covleng/moleculeLen << "\t" 
               << readNum          << "\tU\t" 
               << lastAlignEnd     << "\t"
               << alignedPos.str() << "\t"
               << rpairids.str()   << "\t" 
               << readids.str()    << "\t"
               << rcigars.str()    << endl;
        if(moleculeLen >= minMoleSize)
        {
            // molecule cov
            std::stringstream mckey;
            mckey.str("");
            mckey << setprecision(2) << fixed << (float)covleng/moleculeLen;
            map<string, unsigned long>::iterator mcitr = (*molecule_cov).find(mckey.str());
            if(mcitr == (*molecule_cov).end())
            {
                (*molecule_cov).insert(std::pair<string, unsigned long>(mckey.str(), 1));
            }
            else
            {
                (*mcitr).second += 1;
            }
            // molecule len
            int mlkey = (int)round((double)moleculeLen/1000); 
            map<int, unsigned long>::iterator mlitr = (*molecule_len).find(mlkey);
            if(mlitr == (*molecule_len).end())
            {
                (*molecule_len).insert(std::pair<int, unsigned long>(mlkey, 1));
                (*molecule_len_sum).insert(std::pair<int, unsigned long>(mlkey, moleculeLen));            
            }
            else
            {
                (*mlitr).second += 1;
                (*molecule_len_sum)[mlkey] += moleculeLen;            
            }
            // molecules per barcode
            map<string, int>::iterator bcitr;
            bcitr = (*barcode_molecule_cnt).find(chrbc[1]);
            if(bcitr == (*barcode_molecule_cnt).end())
            {
                (*barcode_molecule_cnt).insert(std::pair<string, int>(chrbc[1], 1));
            }
            else
            {
                (*barcode_molecule_cnt)[chrbc[1]] +=1;
            } 
            // molecule read number
            map<int,    unsigned long>::iterator readitr;
            readitr = (*molecule_read_num).find(readNum);
            if(readitr == (*molecule_read_num).end())
            {
                (*molecule_read_num).insert(std::pair<int, unsigned long>(readNum, 1));
                (*molecule_read_num_sum).insert(std::pair<int, unsigned long>(readNum, lastAlignEnd-lastAlignSta+1));                
            }
            else
            {
                (*molecule_read_num)[readNum] += 1;
                (*molecule_read_num_sum)[readNum] += lastAlignEnd-lastAlignSta+1;
            }
            // molecule read distances:
            map<int, unsigned long>::iterator imrditr;
            map<int, unsigned long>::iterator imrditr_end;
            map<int, unsigned long>::iterator imrditr_final;
            imrditr     = im_read_interval.begin();
            imrditr_end = im_read_interval.end();
            while(imrditr != imrditr_end)
            {
                //if(abs((*imrditr).first) > 500) // note: with 0.1x of 50kb molecule, dist between 18 readpairs is 2777bp
                if(true)
                {
                    imrditr_final = (*molecule_read_interval).find((*imrditr).first);
                    if(imrditr_final == (*molecule_read_interval).end())
                    {
                        (*molecule_read_interval).insert(std::pair<int, unsigned long>((*imrditr).first, (*imrditr).second));
                    }
                    else
                    {
                        (*imrditr_final).second += (*imrditr).second;
                    }
                }
                imrditr ++;
            }
        }
        //
        im_read_interval.clear();    
        readNum = 0;
        //
        alignedPos.str("");
        // read id and order of pair info
        readids.str("");
        rcigars.str("");
        rpairids.str("");        
        mitr = clitr;     
    }
    cout << "   Info: " << lastChr << " has " << alignNum << " alignments analyzed." << endl;
    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x9a8, %rsp            # imm = 0x9A8
movq %r8, 0xe8(%rsp)
movq 0x18(%rsi), %r12
movq %rsi, 0x380(%rsp)
leaq 0x8(%rsi), %rax
movq %rax, 0x378(%rsp)
cmpq %rax, %r12
je 0xab06
movq 0x9f0(%rsp), %rax
movq 0x9e8(%rsp), %rsi
addq $0x188, %rdi            # imm = 0x188
movq %rdi, %r13
movl $0x80, %edi
leaq 0x190(%rsp), %r8
addq %rdi, %r8
movq %r8, 0x140(%rsp)
leaq 0x698(%rsp), %r8
addq %rdi, %r8
movq %r8, 0x368(%rsp)
leaq 0x510(%rsp), %r8
addq %rdi, %r8
movq %r8, 0x360(%rsp)
leaq 0x388(%rsp), %r8
addq %rdi, %r8
movq %r8, 0x358(%rsp)
leaq 0x820(%rsp), %r8
addq %r8, %rdi
movq %rdi, 0x370(%rsp)
movq %rdx, 0xf0(%rsp)
addq $0x8, %rdx
movq %rdx, 0x160(%rsp)
movq %rcx, 0x158(%rsp)
leaq 0x8(%rcx), %rcx
movq %rcx, 0x150(%rsp)
addq $0x8, %rax
movq %rax, 0x148(%rsp)
movq %r9, 0xe0(%rsp)
leaq 0x8(%r9), %rax
movq %rax, 0xd8(%rsp)
leaq 0x8(%rsi), %rbp
leaq 0x318(%rsp), %rbx
movq $0x0, 0x130(%rsp)
movq %r13, 0x128(%rsp)
leaq 0x328(%rsp), %rax
movq %rax, 0x318(%rsp)
movq 0x20(%r12), %rsi
movq 0x28(%r12), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xda32
movb $0x23, 0x820(%rsp)
leaq 0x178(%rsp), %rdi
movq %rbx, %rsi
leaq 0x820(%rsp), %rdx
callq 0x36b7c
movq 0x380(%rsp), %rdi
movq %rbx, %rsi
callq 0xdd3e
movq %rax, 0x170(%rsp)
movq %rdx, 0x168(%rsp)
movl $0x0, 0x4(%rsp)
leaq 0x820(%rsp), %rdi
callq 0x4240
leaq 0x398(%rsp), %rax
movq %rax, 0x388(%rsp)
leaq 0x388(%rsp), %rbx
movq %rbx, %rdi
leaq 0x35a0a(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x838(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x388(%rsp), %rdi
leaq 0x398(%rsp), %rax
cmpq %rax, %rdi
je 0x9155
movq 0x398(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x388(%rsp), %rdi
callq 0x4240
leaq 0x520(%rsp), %rax
movq %rax, 0x510(%rsp)
leaq 0x510(%rsp), %rbx
movq %rbx, %rdi
leaq 0x3599e(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x3a0(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x510(%rsp), %rdi
leaq 0x520(%rsp), %rax
cmpq %rax, %rdi
je 0x91c1
movq 0x520(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x510(%rsp), %rdi
callq 0x4240
leaq 0x6a8(%rsp), %rax
movq %rax, 0x698(%rsp)
leaq 0x698(%rsp), %rbx
movq %rbx, %rdi
leaq 0x35932(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x528(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x698(%rsp), %rdi
leaq 0x6a8(%rsp), %rax
cmpq %rax, %rdi
je 0x922d
movq 0x6a8(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x698(%rsp), %rdi
callq 0x4240
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
leaq 0x358c6(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x6b0(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9299
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
movl $0x0, 0x100(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x108(%rsp)
leaq 0x100(%rsp), %rax
movq %rax, 0x110(%rsp)
movq %rax, 0x118(%rsp)
movq %rcx, 0x120(%rsp)
movq 0x170(%rsp), %r15
cmpq 0x168(%rsp), %r15
je 0xa13f
xorl %ebx, %ebx
movq $0x0, 0x38(%rsp)
xorl %r14d, %r14d
movq $0x0, 0x30(%rsp)
movq $0x0, 0x138(%rsp)
xorl %r13d, %r13d
movups 0x40(%r15), %xmm0
movaps %xmm0, 0x40(%rsp)
leaq 0x60(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x50(%r15), %rsi
movq 0x58(%r15), %rdx
addq %rsi, %rdx
leaq 0x50(%rsp), %rdi
callq 0xda32
leaq 0x80(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x70(%r15), %rsi
movq 0x78(%r15), %rdx
addq %rsi, %rdx
leaq 0x70(%rsp), %rdi
callq 0xda32
leaq 0xa0(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x90(%r15), %rsi
movq 0x98(%r15), %rdx
addq %rsi, %rdx
leaq 0x90(%rsp), %rdi
callq 0xda32
cmpq 0x170(%rsp), %r15
je 0x93ac
movq 0x40(%rsp), %rax
subq %r14, %rax
jbe 0x9d22
incq %rax
cmpq 0xa00(%rsp), %rax
jbe 0x9d22
testq %rbx, %rbx
je 0x9cb0
cmpq %rbx, %r14
jbe 0xabbd
movl %r14d, %r12d
subl %ebx, %r12d
leal 0x1(%r12), %eax
cmpl $0x1, %eax
adcl $0x1, %r12d
movq 0x128(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x4210
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x3572d(%rip), %rsi     # 0x3eb21
callq 0x43a0
movq %rbx, %rdi
movl %r12d, %esi
callq 0x4580
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x3570b(%rip), %rsi     # 0x3eb21
callq 0x43a0
movq (%rbx), %rax
movq -0x18(%rax), %rcx
movq $0x2, 0x8(%rbx,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%rbx,%rax), %ecx
cvtsi2ss %r13d, %xmm0
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl %edx, %ecx
cvtsi2ss %r12d, %xmm1
orl $0x4, %ecx
movl %ecx, 0x18(%rbx,%rax)
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movq %rbx, %rdi
movsd %xmm0, 0x38(%rsp)
callq 0x4510
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x356ae(%rip), %rsi     # 0x3eb21
callq 0x43a0
movl 0x4(%rsp), %esi
movq %rbx, %rdi
callq 0x4580
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0x31a1e(%rip), %rsi     # 0x3aeb4
callq 0x43a0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4210
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x35669(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0x190(%rsp), %r13
movq %r13, %rdi
leaq 0x838(%rsp), %rsi
callq 0x44f0
movq 0x190(%rsp), %rsi
movq 0x198(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x35622(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0x8(%rsp), %rdi
leaq 0x6b0(%rsp), %rsi
callq 0x44f0
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x355e7(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0xb8(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x44f0
movq 0xb8(%rsp), %rsi
movq 0xc0(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x355a3(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0x338(%rsp), %rdi
leaq 0x528(%rsp), %rsi
callq 0x44f0
movq 0x338(%rsp), %rsi
movq 0x340(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4310
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4220
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0x95ff
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x9624
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x9640
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9665
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
cmpl 0xa08(%rsp), %r12d
jl 0x9b49
movq %r13, %rdi
callq 0x4240
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x3548e(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x1a8(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x96c8
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x1a0(%rsp), %rax
movq -0x18(%rax), %rcx
movq $0x2, 0x1a8(%rsp,%rcx)
movq -0x18(%rax), %rax
movl 0x1b8(%rsp,%rax), %ecx
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl %edx, %ecx
orl $0x4, %ecx
movl %ecx, 0x1b8(%rsp,%rax)
leaq 0x1a0(%rsp), %rdi
movsd 0x38(%rsp), %xmm0
callq 0x4510
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x44f0
movq 0xf0(%rsp), %rdi
movq %rbx, %rsi
callq 0xde70
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x9753
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
cmpq 0x160(%rsp), %rbx
je 0x9766
incq 0x40(%rbx)
jmp 0x9839
leaq 0xb8(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x44f0
leaq 0x18(%rsp), %rcx
movq %rcx, 0x8(%rsp)
movq 0xb8(%rsp), %rax
leaq 0xc8(%rsp), %rdx
cmpq %rdx, %rax
je 0x97ae
movq %rax, 0x8(%rsp)
movq 0xc8(%rsp), %rax
movq %rax, 0x18(%rsp)
jmp 0x97b4
movups (%rdx), %xmm0
movups %xmm0, (%rcx)
movq 0xc0(%rsp), %rax
movq %rax, 0x10(%rsp)
movq %rdx, 0xb8(%rsp)
movq $0x0, 0xc0(%rsp)
movb $0x0, 0xc8(%rsp)
movq $0x1, 0x28(%rsp)
movq 0xf0(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xdefa
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x9814
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x9839
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x4340
xorps %xmm0, %xmm0
cvtsi2sd %r12d, %xmm0
divsd 0x31087(%rip), %xmm0    # 0x3a8d0
callq 0x4170
cvttsd2si %xmm0, %eax
movl %eax, 0xb8(%rsp)
movq 0x158(%rsp), %rdi
movq 0x10(%rdi), %rdx
movq 0x150(%rsp), %r8
movq %r8, %rcx
testq %rdx, %rdx
je 0x988f
movq %r8, %rcx
xorl %esi, %esi
cmpl %eax, 0x20(%rdx)
setl %sil
cmovgeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
testq %rdx, %rdx
jne 0x9878
movq %r8, %rdx
cmpq %r8, %rcx
je 0x98a1
cmpl %eax, 0x20(%rcx)
cmovgq %r8, %rcx
movq %rcx, %rdx
cmpq %r8, %rdx
je 0x98c7
incq 0x28(%rdx)
movq 0xe8(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0xcf10
movslq %r12d, %rcx
addq %rcx, (%rax)
jmp 0x9904
movl %eax, 0x8(%rsp)
movq $0x1, 0x10(%rsp)
leaq 0x8(%rsp), %rbx
movq %rbx, %rsi
callq 0xe0c6
movl 0xb8(%rsp), %eax
movl %eax, 0x8(%rsp)
movslq %r12d, %rax
movq %rax, 0x10(%rsp)
movq 0xe8(%rsp), %rdi
movq %rbx, %rsi
callq 0xe0c6
movq 0x178(%rsp), %rsi
addq $0x20, %rsi
movq 0x9f0(%rsp), %rdi
callq 0xe368
cmpq 0x148(%rsp), %rax
je 0x9944
movq 0x178(%rsp), %rsi
addq $0x20, %rsi
movq 0x9f0(%rsp), %rdi
callq 0xcf74
incl (%rax)
jmp 0x99a2
movq 0x178(%rsp), %rax
leaq 0x18(%rsp), %rcx
movq %rcx, 0x8(%rsp)
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
addq %rsi, %rdx
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0xda32
movl $0x1, 0x28(%rsp)
movq 0x9f0(%rsp), %rdi
movq %rbx, %rsi
callq 0xe3f2
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x99a2
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0xe0(%rsp), %rdi
leaq 0x4(%rsp), %rsi
movq 0x10(%rdi), %rcx
movq 0xd8(%rsp), %rax
testq %rcx, %rcx
je 0x99e4
movl 0x4(%rsp), %edx
movq 0xd8(%rsp), %rax
xorl %r8d, %r8d
cmpl %edx, 0x20(%rcx)
setl %r8b
cmovgeq %rcx, %rax
movq 0x10(%rcx,%r8,8), %rcx
testq %rcx, %rcx
jne 0x99cc
movq 0xd8(%rsp), %rdx
movq %rdx, %rcx
cmpq %rdx, %rax
je 0x9a02
movl 0x4(%rsp), %ecx
cmpl 0x20(%rax), %ecx
cmovlq %rdx, %rax
movq %rax, %rcx
cmpq %rdx, %rcx
je 0x9a3d
movq %rsi, %r12
callq 0xcf10
incq (%rax)
movq 0x40(%rsp), %rbx
movq 0x48(%rsp), %r14
movq 0x9e0(%rsp), %rdi
movq %r12, %rsi
callq 0xcf10
movq (%rax), %rcx
subq %rbx, %r14
addq %r14, %rcx
incq %rcx
movq %rcx, (%rax)
jmp 0x9a85
movl 0x4(%rsp), %eax
movl %eax, 0x8(%rsp)
movq $0x1, 0x10(%rsp)
leaq 0x8(%rsp), %rbx
movq %rbx, %rsi
callq 0xe0c6
movq 0x48(%rsp), %rax
subq 0x40(%rsp), %rax
incq %rax
movl 0x4(%rsp), %ecx
movl %ecx, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movq 0x9e0(%rsp), %rdi
movq %rbx, %rsi
callq 0xe0c6
leaq 0x100(%rsp), %rax
movq 0x110(%rsp), %rbx
cmpq %rax, %rbx
je 0x9b2d
movq 0x9e8(%rsp), %rax
movq 0x10(%rax), %rcx
movq %rbp, %rax
testq %rcx, %rcx
je 0x9acf
movl 0x20(%rbx), %edx
movq %rbp, %rax
xorl %esi, %esi
cmpl %edx, 0x20(%rcx)
setl %sil
cmovgeq %rcx, %rax
movq 0x10(%rcx,%rsi,8), %rcx
testq %rcx, %rcx
jne 0x9ab8
movq %rbp, %rcx
cmpq %rbp, %rax
je 0x9ae4
movl 0x20(%rbx), %ecx
cmpl 0x20(%rax), %ecx
cmovlq %rbp, %rax
movq %rax, %rcx
cmpq %rbp, %rcx
je 0x9af3
movq 0x28(%rbx), %rax
addq %rax, 0x28(%rcx)
jmp 0x9b15
movl 0x20(%rbx), %eax
movl %eax, 0x8(%rsp)
movq 0x28(%rbx), %rax
movq %rax, 0x10(%rsp)
movq 0x9e8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xe0c6
movq %rbx, %rdi
callq 0x4230
movq %rax, %rbx
leaq 0x100(%rsp), %rax
jmp 0x9a95
movq %r13, %rdi
movq 0x42461(%rip), %rsi     # 0x4bf98
callq 0x4260
movq 0x140(%rsp), %rdi
callq 0x4140
movl $0x0, 0x4(%rsp)
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
movq %r13, %rdi
leaq 0x34fb7(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x838(%rsp), %rdi
movq %r13, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9ba8
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
movq %r13, %rdi
leaq 0x34f60(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x3a0(%rsp), %rdi
movq %r13, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9bff
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
movq %r13, %rdi
leaq 0x34f09(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x528(%rsp), %rdi
movq %r13, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9c56
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
movq %r13, %rdi
leaq 0x34eb2(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x6b0(%rsp), %rdi
movq %r13, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9cad
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
xorl %r13d, %r13d
movq 0x40(%rsp), %rbx
movq 0x20(%r15), %rsi
movq 0x28(%r15), %rdx
movq 0x128(%rsp), %rdi
callq 0x43a0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
leaq 0x34e45(%rip), %rsi     # 0x3eb21
callq 0x43a0
movq %r14, %rdi
movq %rbx, %rsi
callq 0x4210
movl $0x1, %edx
movq %rax, %rdi
leaq 0x34e26(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0xf8(%rsp), %rdi
callq 0xe7da
movq $0x0, 0x138(%rsp)
movq $0x0, 0x30(%rsp)
movl 0x48(%rsp), %r12d
subl 0x40(%rsp), %r12d
incl 0x4(%rsp)
leaq 0x190(%rsp), %rdi
leaq 0x838(%rsp), %rsi
callq 0x44f0
movq 0x190(%rsp), %rdi
movq 0x198(%rsp), %r14
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9d72
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
testq %r14, %r14
je 0x9dbb
movl $0x1, %edx
leaq 0x830(%rsp), %rdi
leaq 0x3264f(%rip), %rsi     # 0x3c3da
callq 0x43a0
movq 0x40(%rsp), %rsi
leaq 0x830(%rsp), %rdi
callq 0x4210
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
leaq 0x31104(%rip), %rsi     # 0x3aeb8
callq 0x43a0
jmp 0x9de4
movq 0x40(%rsp), %rsi
leaq 0x830(%rsp), %rdi
callq 0x4210
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
leaq 0x310d9(%rip), %rsi     # 0x3aeb8
callq 0x43a0
movq 0x48(%rsp), %rsi
movq %r14, %rdi
callq 0x4210
leaq 0x190(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x44f0
movq 0x190(%rsp), %rdi
movq 0x198(%rsp), %r14
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0x9e33
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
testq %r14, %r14
je 0x9ebd
movl $0x1, %edx
leaq 0x398(%rsp), %rdi
leaq 0x31068(%rip), %rsi     # 0x3aeb8
callq 0x43a0
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
leaq 0x398(%rsp), %rdi
callq 0x43a0
movl $0x1, %edx
leaq 0x520(%rsp), %rdi
leaq 0x31038(%rip), %rsi     # 0x3aeb8
callq 0x43a0
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
leaq 0x520(%rsp), %rdi
callq 0x43a0
movl $0x1, %edx
leaq 0x6a8(%rsp), %rdi
leaq 0x31002(%rip), %rsi     # 0x3aeb8
callq 0x43a0
jmp 0x9ef1
movq 0x70(%rsp), %rsi
movq 0x78(%rsp), %rdx
leaq 0x398(%rsp), %rdi
callq 0x43a0
movq 0x90(%rsp), %rsi
movq 0x98(%rsp), %rdx
leaq 0x520(%rsp), %rdi
callq 0x43a0
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
leaq 0x6a8(%rsp), %rdi
callq 0x43a0
leaq 0x50(%rsp), %r14
movq %r14, %rdi
leaq 0x3072a(%rip), %rsi     # 0x3a641
callq 0x4100
testl %eax, %eax
je 0x9f8e
movq %r14, %rdi
leaq 0x33d9f(%rip), %rsi     # 0x3dcc9
callq 0x4100
testl %eax, %eax
jne 0xa091
movq 0x138(%rsp), %rsi
testq %rsi, %rsi
je 0xa084
movq 0x40(%rsp), %rcx
movq %rcx, %rax
subq %rsi, %rax
movl %esi, %edx
notl %edx
addl %ecx, %edx
incl %eax
cmpq %rsi, %rcx
cmovbl %edx, %eax
movq 0x108(%rsp), %rdx
leaq 0x100(%rsp), %rcx
testq %rdx, %rdx
je 0xa003
xorl %esi, %esi
cmpl %eax, 0x20(%rdx)
setl %sil
cmovgeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
jmp 0x9f71
movq 0x30(%rsp), %rsi
testq %rsi, %rsi
je 0xa050
movq 0x40(%rsp), %rcx
movq %rcx, %rax
subq %rsi, %rax
movl %esi, %edx
notl %edx
addl %ecx, %edx
incl %eax
cmpq %rsi, %rcx
cmovbl %edx, %eax
movq 0x108(%rsp), %rdx
leaq 0x100(%rsp), %rcx
testq %rdx, %rdx
je 0x9fde
xorl %esi, %esi
cmpl %eax, 0x20(%rdx)
setl %sil
cmovgeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
jmp 0x9fc5
leaq 0x100(%rsp), %rsi
movq %rsi, %rdx
cmpq %rsi, %rcx
je 0x9ff8
cmpl %eax, 0x20(%rcx)
cmovgq %rsi, %rcx
movq %rcx, %rdx
cmpq %rsi, %rdx
je 0xa028
incq 0x28(%rdx)
jmp 0xa050
leaq 0x100(%rsp), %rsi
movq %rsi, %rdx
cmpq %rsi, %rcx
je 0xa01d
cmpl %eax, 0x20(%rcx)
cmovgq %rsi, %rcx
movq %rcx, %rdx
cmpq %rsi, %rdx
je 0xa05c
incq 0x28(%rdx)
jmp 0xa084
movl %eax, 0x190(%rsp)
movq $0x1, 0x198(%rsp)
leaq 0xf8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0xe0c6
movq 0x48(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0xa091
movl %eax, 0x190(%rsp)
movq $0x1, 0x198(%rsp)
leaq 0xf8(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0xe0c6
movq 0x48(%rsp), %rax
movq %rax, 0x138(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x48(%rsp), %r14
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0xa0c5
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0xa0e7
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0xa103
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x4340
addl %r12d, %r13d
incl %r13d
incq 0x130(%rsp)
movq %r15, %rdi
callq 0x4230
movq %rax, %r15
cmpq 0x168(%rsp), %rax
jne 0x930a
cvtsi2ss %r13d, %xmm0
movss %xmm0, 0x30(%rsp)
movq 0x128(%rsp), %rdi
jmp 0xa159
xorps %xmm0, %xmm0
movss %xmm0, 0x30(%rsp)
movq $0x0, 0x38(%rsp)
xorl %r14d, %r14d
xorl %ebx, %ebx
movq %r13, %rdi
cmpq %rbx, %r14
jbe 0xabdc
movq %r15, %r12
movl %r14d, %r15d
subl %ebx, %r15d
leal 0x1(%r15), %eax
cmpl $0x1, %eax
adcl $0x1, %r15d
movq %rdi, %r13
movq 0x38(%rsp), %rsi
callq 0x4210
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x3498c(%rip), %rsi     # 0x3eb21
callq 0x43a0
movq %rbx, %rdi
movl %r15d, %esi
callq 0x4580
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x3496a(%rip), %rsi     # 0x3eb21
callq 0x43a0
movq (%rbx), %rax
movq -0x18(%rax), %rcx
movq $0x2, 0x8(%rbx,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%rbx,%rax), %ecx
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl %edx, %ecx
xorps %xmm0, %xmm0
cvtsi2ss %r15d, %xmm0
orl $0x4, %ecx
movl %ecx, 0x18(%rbx,%rax)
movss 0x30(%rsp), %xmm1
divss %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
movq %rbx, %rdi
movsd %xmm0, 0x30(%rsp)
callq 0x4510
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x34906(%rip), %rsi     # 0x3eb21
callq 0x43a0
movl 0x4(%rsp), %esi
movq %rbx, %rdi
callq 0x4580
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0x30c7c(%rip), %rsi     # 0x3aeba
callq 0x43a0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x4210
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x348c1(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0x190(%rsp), %rdi
leaq 0x838(%rsp), %rsi
callq 0x44f0
movq 0x190(%rsp), %rsi
movq 0x198(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x3487d(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0x40(%rsp), %rdi
leaq 0x6b0(%rsp), %rsi
callq 0x44f0
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x34842(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0x8(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x44f0
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x34807(%rip), %rsi     # 0x3eb21
callq 0x43a0
leaq 0xb8(%rsp), %rdi
leaq 0x528(%rsp), %rsi
callq 0x44f0
movq 0xb8(%rsp), %rsi
movq 0xc0(%rsp), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4310
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4220
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0xa39b
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xa3b7
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xa3d3
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xa3f8
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
cmpl 0xa08(%rsp), %r15d
jl 0xa8a3
leaq 0x190(%rsp), %rdi
callq 0x4240
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
leaq 0x346f6(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x1a8(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xa460
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x1a0(%rsp), %rax
movq -0x18(%rax), %rcx
movq $0x2, 0x1a8(%rsp,%rcx)
movq -0x18(%rax), %rax
movl 0x1b8(%rsp,%rax), %ecx
movl $0xfffffefb, %edx       # imm = 0xFFFFFEFB
andl %edx, %ecx
orl $0x4, %ecx
movl %ecx, 0x1b8(%rsp,%rax)
leaq 0x1a0(%rsp), %rdi
movsd 0x30(%rsp), %xmm0
callq 0x4510
movq %rbx, %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x44f0
movq 0xf0(%rsp), %rdi
movq %rbx, %rsi
callq 0xde70
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xa4e6
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
cmpq 0x160(%rsp), %rbx
je 0xa4fe
incq 0x40(%rbx)
leaq 0x40(%rsp), %rbx
jmp 0xa5b3
leaq 0x8(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x44f0
leaq 0x50(%rsp), %rdx
movq %rdx, 0x40(%rsp)
movq 0x8(%rsp), %rax
leaq 0x18(%rsp), %rcx
cmpq %rcx, %rax
leaq 0x40(%rsp), %rbx
je 0xa53f
movq %rax, 0x40(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x50(%rsp)
jmp 0xa545
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq 0x10(%rsp), %rax
movq %rax, 0x48(%rsp)
movq %rcx, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
movq $0x1, 0x60(%rsp)
movq 0xf0(%rsp), %rdi
movq %rbx, %rsi
callq 0xdefa
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xa597
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xa5b3
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
xorps %xmm0, %xmm0
cvtsi2sd %r15d, %xmm0
divsd 0x3030d(%rip), %xmm0    # 0x3a8d0
callq 0x4170
cvttsd2si %xmm0, %eax
movl %eax, 0x8(%rsp)
movq 0x158(%rsp), %rdi
movq 0x10(%rdi), %rdx
movq 0x150(%rsp), %r8
movq %r8, %rcx
testq %rdx, %rdx
je 0xa606
movq %r8, %rcx
xorl %esi, %esi
cmpl %eax, 0x20(%rdx)
setl %sil
cmovgeq %rdx, %rcx
movq 0x10(%rdx,%rsi,8), %rdx
testq %rdx, %rdx
jne 0xa5ef
movq %r8, %rdx
cmpq %r8, %rcx
je 0xa618
cmpl %eax, 0x20(%rcx)
cmovgq %r8, %rcx
movq %rcx, %rdx
cmpq %r8, %rdx
je 0xa63b
incq 0x28(%rdx)
movq 0xe8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0xcf10
movslq %r15d, %rcx
addq %rcx, (%rax)
jmp 0xa670
movl %eax, 0x40(%rsp)
movq $0x1, 0x48(%rsp)
movq %rbx, %rsi
callq 0xe0c6
movl 0x8(%rsp), %eax
movl %eax, 0x40(%rsp)
movslq %r15d, %rax
movq %rax, 0x48(%rsp)
movq 0xe8(%rsp), %rdi
movq %rbx, %rsi
callq 0xe0c6
movq 0x178(%rsp), %rsi
addq $0x20, %rsi
movq 0x9f0(%rsp), %rdi
callq 0xe368
cmpq 0x148(%rsp), %rax
je 0xa6b0
movq 0x178(%rsp), %rsi
addq $0x20, %rsi
movq 0x9f0(%rsp), %rdi
callq 0xcf74
incl (%rax)
jmp 0xa709
movq 0x178(%rsp), %rax
leaq 0x50(%rsp), %rcx
movq %rcx, 0x40(%rsp)
movq 0x20(%rax), %rsi
movq 0x28(%rax), %rdx
addq %rsi, %rdx
movq %rbx, %rdi
callq 0xda32
movl $0x1, 0x60(%rsp)
movq 0x9f0(%rsp), %rdi
movq %rbx, %rsi
callq 0xe3f2
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xa709
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0xe0(%rsp), %rdi
leaq 0x4(%rsp), %rsi
movq 0x10(%rdi), %rcx
movq 0xd8(%rsp), %rax
testq %rcx, %rcx
je 0xa74b
movl 0x4(%rsp), %edx
movq 0xd8(%rsp), %rax
xorl %r8d, %r8d
cmpl %edx, 0x20(%rcx)
setl %r8b
cmovgeq %rcx, %rax
movq 0x10(%rcx,%r8,8), %rcx
testq %rcx, %rcx
jne 0xa733
movq 0xd8(%rsp), %rdx
movq %rdx, %rcx
cmpq %rdx, %rax
je 0xa769
movl 0x4(%rsp), %ecx
cmpl 0x20(%rax), %ecx
cmovlq %rdx, %rax
movq %rax, %rcx
cmpq %rdx, %rcx
je 0xa79c
movq %rsi, %rbx
callq 0xcf10
incq (%rax)
movq 0x9e0(%rsp), %rdi
movq %rbx, %rsi
callq 0xcf10
movq (%rax), %rcx
subq 0x38(%rsp), %r14
addq %r14, %rcx
incq %rcx
movq %rcx, (%rax)
jmp 0xa7da
movl 0x4(%rsp), %eax
movl %eax, 0x40(%rsp)
movq $0x1, 0x48(%rsp)
movq %rbx, %rsi
callq 0xe0c6
subq 0x38(%rsp), %r14
incq %r14
movl 0x4(%rsp), %eax
movl %eax, 0x40(%rsp)
movq %r14, 0x48(%rsp)
movq 0x9e0(%rsp), %rdi
movq %rbx, %rsi
callq 0xe0c6
leaq 0x100(%rsp), %rax
movq 0x110(%rsp), %rbx
cmpq %rax, %rbx
je 0xa882
movq 0x9e8(%rsp), %rax
movq 0x10(%rax), %rcx
movq %rbp, %rax
testq %rcx, %rcx
je 0xa824
movl 0x20(%rbx), %edx
movq %rbp, %rax
xorl %esi, %esi
cmpl %edx, 0x20(%rcx)
setl %sil
cmovgeq %rcx, %rax
movq 0x10(%rcx,%rsi,8), %rcx
testq %rcx, %rcx
jne 0xa80d
movq %rbp, %rcx
cmpq %rbp, %rax
je 0xa839
movl 0x20(%rbx), %ecx
cmpl 0x20(%rax), %ecx
cmovlq %rbp, %rax
movq %rax, %rcx
cmpq %rbp, %rcx
je 0xa848
movq 0x28(%rbx), %rax
addq %rax, 0x28(%rcx)
jmp 0xa86a
movl 0x20(%rbx), %eax
movl %eax, 0x40(%rsp)
movq 0x28(%rbx), %rax
movq %rax, 0x48(%rsp)
movq 0x9e8(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0xe0c6
movq %rbx, %rdi
callq 0x4230
movq %rax, %rbx
leaq 0x100(%rsp), %rax
jmp 0xa7ea
leaq 0x190(%rsp), %rdi
movq 0x41707(%rip), %rsi     # 0x4bf98
callq 0x4260
movq 0x140(%rsp), %rdi
callq 0x4140
leaq 0xf8(%rsp), %rdi
callq 0xe7da
movl $0x0, 0x4(%rsp)
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
leaq 0x34248(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x838(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xa917
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
leaq 0x341e9(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x3a0(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xa976
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
leaq 0x3418a(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x528(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xa9d5
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x1a0(%rsp), %rax
movq %rax, 0x190(%rsp)
leaq 0x190(%rsp), %rbx
movq %rbx, %rdi
leaq 0x3412b(%rip), %rdx     # 0x3eb22
movq %rdx, %rsi
callq 0x5384
leaq 0x6b0(%rsp), %rdi
movq %rbx, %rsi
callq 0x4490
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xaa34
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0xf8(%rsp), %rdi
callq 0xd8f4
leaq 0x698(%rsp), %rdi
movq 0x41548(%rip), %rbx     # 0x4bf98
movq %rbx, %rsi
callq 0x4260
movq 0x368(%rsp), %rdi
callq 0x4140
leaq 0x510(%rsp), %rdi
movq %rbx, %rsi
callq 0x4260
movq 0x360(%rsp), %rdi
callq 0x4140
leaq 0x388(%rsp), %rdi
movq %rbx, %rsi
callq 0x4260
movq 0x358(%rsp), %rdi
callq 0x4140
leaq 0x820(%rsp), %rdi
movq %rbx, %rsi
callq 0x4260
movq 0x370(%rsp), %rdi
callq 0x4140
leaq 0x178(%rsp), %rdi
callq 0x6aa2
movq 0x318(%rsp), %rdi
leaq 0x328(%rsp), %rax
cmpq %rax, %rdi
je 0xaaee
movq 0x328(%rsp), %rsi
incq %rsi
callq 0x4340
cmpq 0x378(%rsp), %r12
leaq 0x318(%rsp), %rbx
jne 0x907c
jmp 0xab12
movq $0x0, 0x130(%rsp)
movq 0x9f8(%rsp), %r14
movq 0x414a7(%rip), %rbx     # 0x4bfc8
leaq 0x30396(%rip), %rsi     # 0x3aebe
movl $0x9, %edx
movq %rbx, %rdi
callq 0x43a0
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq %rbx, %rdi
callq 0x43a0
movq %rax, %rbx
leaq 0x3037a(%rip), %rsi     # 0x3aec8
movl $0x5, %edx
movq %rax, %rdi
callq 0x43a0
movq %rbx, %rdi
movq 0x130(%rsp), %rsi
callq 0x42f0
movq %rax, %rbx
leaq 0x30359(%rip), %rsi     # 0x3aece
movl $0x15, %edx
movq %rax, %rdi
callq 0x43a0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4310
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x4220
movb $0x1, %al
addq $0x9a8, %rsp            # imm = 0x9A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x301a6(%rip), %rdi     # 0x3ad6a
leaq 0x301ba(%rip), %rsi     # 0x3ad85
leaq 0x301c8(%rip), %rcx     # 0x3ad9a
movl $0x137, %edx            # imm = 0x137
callq 0x41f0
leaq 0x30187(%rip), %rdi     # 0x3ad6a
leaq 0x3019b(%rip), %rsi     # 0x3ad85
leaq 0x301a9(%rip), %rcx     # 0x3ad9a
movl $0x1ff, %edx            # imm = 0x1FF
callq 0x41f0
jmp 0xaeb7
jmp 0xaeb7
jmp 0xaeb7
jmp 0xaeb7
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xac2e
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xaeba
movq 0x18(%rsp), %rsi
jmp 0xac94
jmp 0xaeb7
jmp 0xac79
jmp 0xaeb7
jmp 0xaeb7
jmp 0xaeb7
jmp 0xac79
jmp 0xaeb7
jmp 0xaeb7
jmp 0xaeb7
jmp 0xafb0
jmp 0xaeb7
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0xaeba
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xaeba
jmp 0xaeb7
jmp 0xae55
jmp 0xafb0
jmp 0xae55
jmp 0xae5d
jmp 0xae4d
jmp 0xafb0
jmp 0xae55
jmp 0xafb0
jmp 0xae55
jmp 0xafb0
jmp 0xae55
jmp 0xafb0
jmp 0xad15
movq %rax, %rbx
movq 0x388(%rsp), %rdi
leaq 0x398(%rsp), %rax
cmpq %rax, %rdi
je 0xb157
movq 0x398(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xb157
movq %rax, %rbx
jmp 0xb157
jmp 0xad50
movq %rax, %rbx
movq 0x510(%rsp), %rdi
leaq 0x520(%rsp), %rax
cmpq %rax, %rdi
je 0xb136
movq 0x520(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xb136
movq %rax, %rbx
jmp 0xb136
jmp 0xad8b
movq %rax, %rbx
movq 0x698(%rsp), %rdi
leaq 0x6a8(%rsp), %rax
cmpq %rax, %rdi
je 0xb115
movq 0x6a8(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xb115
movq %rax, %rbx
jmp 0xb115
movq %rax, %rbx
jmp 0xb0f4
movq %rax, %rbx
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xb0f4
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xb0f4
movq %rax, %rbx
jmp 0xb185
jmp 0xadd6
movq %rax, %rbx
jmp 0xb178
jmp 0xb081
jmp 0xafc8
jmp 0xafc8
jmp 0xafc8
jmp 0xae85
jmp 0xafc8
jmp 0xafc8
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xae20
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0xafcb
movq 0xc8(%rsp), %rsi
jmp 0xaea0
jmp 0xafc8
jmp 0xb081
movq %rax, %rbx
jmp 0xaf08
movq %rax, %rbx
jmp 0xaf40
movq %rax, %rbx
leaq 0x50(%rsp), %r13
jmp 0xaf29
jmp 0xafc8
jmp 0xafc8
jmp 0xafc8
jmp 0xae85
jmp 0xafc8
jmp 0xafc8
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xafcb
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xafcb
jmp 0xafc8
jmp 0xb081
movq %rax, %rbx
movq 0x410d7(%rip), %rsi     # 0x4bf98
leaq 0x190(%rsp), %rdi
callq 0x4260
leaq 0x210(%rsp), %rdi
callq 0x4140
jmp 0xb0e7
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0xaf08
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0x50(%rsp), %r13
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xaf29
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x40(%rsp), %rdi
cmpq %r13, %rdi
je 0xaf40
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xb0e7
movq 0x1a0(%rsp), %rsi
jmp 0xb0df
jmp 0xafc8
jmp 0xaf91
jmp 0xaf91
jmp 0xaf9e
jmp 0xb081
jmp 0xb081
jmp 0xaf99
jmp 0xb081
jmp 0xaf91
jmp 0xaf91
jmp 0xb081
jmp 0xaf91
jmp 0xb081
jmp 0xafb0
movq %rax, %rbx
jmp 0xb05a
movq %rax, %rbx
jmp 0xb019
movq %rax, %rbx
jmp 0xb03e
jmp 0xb081
jmp 0xb081
movq %rax, %rbx
jmp 0xb0e7
movq %rax, %rbx
jmp 0xb0a9
movq %rax, %rbx
jmp 0xb0cb
movq %rax, %rbx
movq 0x40fc6(%rip), %rsi     # 0x4bf98
leaq 0x190(%rsp), %rdi
callq 0x4260
leaq 0x210(%rsp), %rdi
callq 0x4140
jmp 0xb084
movq %rax, %rbx
movq 0x338(%rsp), %rdi
leaq 0x348(%rsp), %rax
cmpq %rax, %rdi
je 0xb019
movq 0x348(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0xb03e
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0xb05a
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x190(%rsp), %rdi
leaq 0x1a0(%rsp), %rax
cmpq %rax, %rdi
je 0xb084
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x4340
jmp 0xb084
movq %rax, %rbx
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0xb0a9
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0xb0cb
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x4340
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0xb0e7
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x4340
leaq 0xf8(%rsp), %rdi
callq 0xd8f4
movq 0x40e9d(%rip), %rsi     # 0x4bf98
leaq 0x698(%rsp), %rdi
callq 0x4260
leaq 0x718(%rsp), %rdi
callq 0x4140
movq 0x40e7c(%rip), %rsi     # 0x4bf98
leaq 0x510(%rsp), %rdi
callq 0x4260
leaq 0x590(%rsp), %rdi
callq 0x4140
movq 0x40e5b(%rip), %rsi     # 0x4bf98
leaq 0x388(%rsp), %rdi
callq 0x4260
leaq 0x408(%rsp), %rdi
callq 0x4140
movq 0x40e3a(%rip), %rsi     # 0x4bf98
leaq 0x820(%rsp), %rdi
callq 0x4260
leaq 0x8a0(%rsp), %rdi
callq 0x4140
leaq 0x178(%rsp), %rdi
callq 0x6aa2
movq 0x318(%rsp), %rdi
leaq 0x328(%rsp), %rax
cmpq %rax, %rdi
je 0xb1aa
movq 0x328(%rsp), %rsi
incq %rsi
callq 0x4340
movq %rbx, %rdi
callq 0x45a0