// File: /workspace/github_cpp_makefile_star2_O1/spatialfruitsalad[P]volume2position/main.cpp
// Function: main
int main( int argc, char *argv[] )
{

///////////////////////////////
// Parse command line arguments
///////////////////////////////
    if (argc != 9)
    {
        std::cerr << "wrong number of Command line arguments" << std::endl;
        std::cerr << "./ip_analyzing_gm\n[inFileName] \n[outFolderName] \n[nx] [ny] [nz] [erosiondepth] [sigma_g] [sigma_p]";
        return 0;
    }

    std::string inFileName = argv[1];
    std::string outFolderName = argv[2];

    CreateFolders(outFolderName);

    // the size of the tomogram
    unsigned long  nx = atoi(argv[3]);
    unsigned long  ny = atoi(argv[4]);
    unsigned long  nz = atoi(argv[5]);

    // erosion depth for watershed segmentation of the particles
    int erosiondepth = atoi(argv[6]);


    // bilateral filter parameters
    double bf_sigma_Pos = atof(argv[7]);
    double bf_sigma_Col = atof(argv[8]);
    //double bf_sigma_Pos = 1.75;
    //double bf_sigma_Col = 2000;
    // cutoff for spatial gauss
    unsigned bf_size = static_cast<unsigned>(bf_sigma_Pos * 2.5);

///////////////////////////////
// Load Tomogram
///////////////////////////////
    std::cout << "loading tomogram from " << inFileName << std::endl;

    tomogram3d<uint16_t> original;
    original.read_raw(inFileName, "uint16_t", nx, ny, nz);

    std::cout << "tomogram successfully loaded" << std::endl;
    
    // write some images of the original tomogram
    WriteImages(original, outFolderName + "/images/", "0_original", nz);
    
///////////////////////////////
// Apply bilateral filter
///////////////////////////////
    {
    std::cout << "applying filter" << std::endl;
    // create filter object
    bilateralFilter B (bf_size, bf_sigma_Pos, bf_sigma_Col);
    tomogram3d<uint16_t> filtered;
    // apply filter
    B.Process(original, filtered);
    // original data is no longer needed, so swap it with filtered and dismiss filtered.
    std::swap(original, filtered);
    filtered.clear();
    original.write_raw(outFolderName + "/bilateral.raw", "uint16_t");
    // write some slices of the bilateral tomogram
    WriteImages(original, outFolderName + "/images/", "1_bilateral", nz);
    }

///////////////////////////////
// Create Homogenized Tomogram
///////////////////////////////
    tomogram3d<uint16_t> hom;
    // class for homogenization
    homogenator H;
    H.Process(original, hom, outFolderName);    
    
    //original is no longer needed
    original.clear();
    // write some slices of the homogenized tomogram
    hom.write_raw(outFolderName + "/homogenized.raw", "uint16_t");
    WriteImages(hom, outFolderName + "/images/", "2_homogenized", nz);

///////////////////////////////
// Apply selected Area Histogram
///////////////////////////////
    std::cout << "calculate histogram" << std::endl;
    // this will calculate a histogram of the whole tomogram 
    selectedAreaHistogram sah(nx,ny, nz);

    // selected area histogram will fill two vectors: bins will contain the bin information (list of the bins, identified by the first grey value in each bin.), 
    std::vector<double> bins;
    // hist will include the corresponding greyvalue counts
    std::vector<double> hist;
    sah.Process(hom, bins, hist, outFolderName, 150);

    // the black outside region should not get counted so just remove that from the histogram
    hist[0] = 0;
///////////////////////////////
// Calculate threshold with Otsu's method
///////////////////////////////
    std::cout << "calculate Threshold" << std::endl;
    cSegmentationByOtsu::NormalizeHisto(hist);
    double T = cSegmentationByOtsu::CalculateSegmentationThreshold(hist);
    std::cout << "binthresh from otsu: " << T << std::endl; 
    // since otsu doesn't need to know anything about the bins it is acting on, it will just return the bin ID (this is T). 
    // To get the greyvalue threshold (t1_gv) the next line is needed.
    uint16_t t1_gv = static_cast<uint16_t>(bins.at(T));

    std::cout << "threshol from otsu: " << static_cast<int>(t1_gv) << std::endl;
    
    // this writes a gnuplot script for visualizing otsu thresholding and histogram calculation
    {
    std::cout << "write gnuplot script for histogram" << std::endl;
    std::ofstream out(outFolderName + "/plot_selectedAreaHistogram.gpl");
    out << "#!/usr/bin/gnuplot -persist"<< std::endl;
    out << "t_low = " << static_cast<int>(t1_gv)<< std::endl;
    out << "set xlabel 'greyvalue'" << std::endl;
    out << "set ylabel 'occurrence'" << std::endl;
    out << "set xr [1:]" << std::endl;
    out << "set arrow from t_low, 0 to t_low, graph(0, 1) nohead" << std::endl;
    out << "pl 'selectedAreaHist.dat' w l" << std::endl;
    out.close();
    }
///////////////////////////////
// Create Particle binray image
///////////////////////////////
    std::cout << std::endl << "make binarized versions" << std::endl;
    tomogram3d<uint8_t> binary_particles;
    binary_particles.initialise(nx,ny,nz,0);

    // loop over all voxels and compare with calculated threshold
    for (unsigned long k = 0; k != nz; ++k)
    for (unsigned long j = 0; j != ny; ++j)
    for (unsigned long i = 0; i != nx; ++i)
    {
        uint16_t v = hom.get(i,j,k);
        if (v >= t1_gv)
        { 
            binary_particles.set(i,j,k,1); 
        }
    }
   
    WriteImages(binary_particles,  outFolderName+"images/", "3_binary", nz);

///////////////////////////////
// Remove inside holes from particle image
///////////////////////////////
    tomogram3d<uint8_t> binary_water;
    binary_water.initialise(nx,ny,nz,0);
    removeInsideHoles::Process(binary_particles);
    WriteImages(binary_particles, outFolderName+"images/", "4_binary_woHolesInside", nz); 
    binary_particles.write_raw(outFolderName + "/particles_binary.raw", "uint8_t");

///////////////////////////////
// Create labeled image
///////////////////////////////
    tomogram3d<int> out;
    try
    {
        // this calculates the segmented tomogram
        watershedSegmentation::Process(binary_particles, out, erosiondepth, outFolderName + "/images/", 100);

        // remove all clusters that touch the border
        out.cleanBorder(0.075);

        // write some images 
        WriteImages(out,outFolderName+"images/","7_labeled" , nz);
        WriteImages(out,outFolderName+"images/","8_labeled_color" , nz, true);

    }
    catch (std::string& e)
    {
        std::cerr << e << std::endl;
        return 1;
    }

///////////////////////////////
// Calculate centroids and save tomogram (converted to save disk space)
///////////////////////////////
    // calculate centroids and volumes, also
    // convert to uint16_t for writing
    std::cout << "convert and calculate" << std::endl;
    std::map<unsigned long, unsigned int> volumes;
    std::map<unsigned long, double> xPos;
    std::map<unsigned long, double> yPos;
    std::map<unsigned long, double> zPos;
    
    tomogram3d<uint16_t> safe;
    safe.initialise(nx, ny, nz, 0);
    std::cout << "counting voxels" << std::endl;

    
    for (unsigned int k = 0; k != nz; ++k)
    {
        std::cout << k << " ";
    for (unsigned int j = 0; j != ny; ++j)
    for (unsigned int i = 0; i != nx; ++i)
    {
        uint16_t v = static_cast<uint16_t>(out.get(i,j,k));
        safe.set(i,j,k, v);
        volumes[v] += 1;
        xPos[v] += i;    
        yPos[v] += j;    
        zPos[v] += k;    
    }
    }
    std::cout << "finished, writing centroids" << std::endl;
    // write centroids
    std::string filename = outFolderName +  "/particles_centroids_ed" + std::to_string(static_cast<int>(erosiondepth)) +  ".dat";
    std::cout << "filename: " << filename << std::endl;
    std::ofstream myOut(filename);
    if(!myOut.good())
    {
        std::cerr << "error: cannot write" << std::endl;
        return 1;
    }
    myOut << "#1_x #2_y #3_z #4_l #5_vol" << std::endl;
    myOut << "#boxsz=" << nz << ", boundary_condition= none " << std::endl;
    for(size_t i = 0; i != volumes.size(); ++i)
    {
        double v = static_cast<double>(volumes[i]);
        if(v == 0) continue;
        myOut << " " << xPos[i]/v << " " << yPos[i]/v << " " << zPos[i]/v << " " << i << " "  << volumes[i] << std::endl;
    }
    myOut.close();


    // save images, write tomogram
    WriteImages(safe, outFolderName+"images/", "5_particles_woInsideHoles", nz); 

    filename = outFolderName +  "particles_labelled_ed" + std::to_string(static_cast<int>(erosiondepth)) +  ".raw";
    safe.write_raw(filename, "uint16_t");

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x958, %rsp            # imm = 0x958
cmpl $0x9, %edi
jne 0x4e2b
movq %rsi, %rbx
movq 0x8(%rsi), %rsi
leaq 0x380(%rsp), %rdi
leaq 0x690(%rsp), %rdx
callq 0x30f0
movq 0x10(%rbx), %rsi
leaq 0x20(%rsp), %rdi
leaq 0x690(%rsp), %rdx
callq 0x30f0
leaq 0x620(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x610(%rsp), %rdi
callq 0x1312e
leaq 0x610(%rsp), %rdi
callq 0x362c
movq 0x610(%rsp), %rdi
cmpq %r14, %rdi
je 0x3826
callq 0x3290
movq 0x18(%rbx), %rdi
callq 0x33c0
movl %eax, 0x48(%rsp)
movq 0x20(%rbx), %rdi
callq 0x33c0
movl %eax, 0x44(%rsp)
movq 0x28(%rbx), %rdi
callq 0x33c0
movl %eax, 0x10(%rsp)
movq 0x30(%rbx), %rdi
callq 0x33c0
movq %rax, 0x78(%rsp)
movq 0x38(%rbx), %rdi
callq 0x3330
movsd %xmm0, 0xa0(%rsp)
movq 0x40(%rbx), %rdi
callq 0x3330
movsd %xmm0, 0xe8(%rsp)
movq 0x19742(%rip), %rdi     # 0x1cfc8
leaq 0x139e3(%rip), %rsi     # 0x17270
movl $0x16, %edx
callq 0x3300
movq 0x380(%rsp), %rsi
movq 0x388(%rsp), %rdx
movq 0x1971a(%rip), %rdi     # 0x1cfc8
callq 0x3300
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
xorpd %xmm0, %xmm0
movapd %xmm0, 0xb0(%rsp)
movq $0x0, 0xc0(%rsp)
leaq 0x600(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x380(%rsp), %rsi
movq 0x388(%rsp), %rdx
addq %rsi, %rdx
leaq 0x5f0(%rsp), %rdi
callq 0x1312e
leaq 0x5e0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x13952(%rip), %rsi     # 0x17287
leaq 0x13953(%rip), %rdx     # 0x1728f
leaq 0x5d0(%rsp), %rdi
callq 0x131be
movslq 0x48(%rsp), %rcx
movslq 0x44(%rsp), %r8
movslq 0x10(%rsp), %r9
leaq 0xb0(%rsp), %rdi
leaq 0x5f0(%rsp), %rsi
leaq 0x5d0(%rsp), %rdx
movq %rcx, 0x18(%rsp)
movq %r8, 0x50(%rsp)
movq %r9, 0x8(%rsp)
callq 0x5e16
movq 0x5d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x3996
callq 0x3290
movq 0x5f0(%rsp), %rdi
cmpq %r14, %rdi
je 0x39a8
callq 0x3290
movq 0x19619(%rip), %rbx     # 0x1cfc8
leaq 0x138da(%rip), %rsi     # 0x17290
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x195e7(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x370(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x360(%rsp), %rdi
callq 0x1312e
leaq 0x13892(%rip), %rsi     # 0x172ad
leaq 0x360(%rsp), %rdi
callq 0x3480
leaq 0x5c0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1387b(%rip), %rsi     # 0x172b6
leaq 0x1387e(%rip), %rdx     # 0x172c0
leaq 0x5b0(%rsp), %rdi
callq 0x131be
leaq 0xb0(%rsp), %rdi
leaq 0x360(%rsp), %rsi
leaq 0x5b0(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x62aa
movq 0x5b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x3a86
callq 0x3290
movq 0x360(%rsp), %rdi
cmpq %r14, %rdi
je 0x3a98
callq 0x3290
movq 0x19529(%rip), %rbx     # 0x1cfc8
leaq 0x1381b(%rip), %rsi     # 0x172c1
movl $0xf, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x194f7(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movsd 0x13522(%rip), %xmm1    # 0x17008
movsd 0xa0(%rsp), %xmm0
mulsd %xmm0, %xmm1
cvttsd2si %xmm1, %rsi
leaq 0x690(%rsp), %rdi
movsd 0xe8(%rsp), %xmm1
callq 0x6dd6
xorpd %xmm0, %xmm0
leaq 0x1c0(%rsp), %rdx
movapd %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x690(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x7196
movq 0xb0(%rsp), %rax
movq 0xb8(%rsp), %rcx
movq 0xc0(%rsp), %rsi
xorpd %xmm1, %xmm1
movapd %xmm1, 0xb0(%rsp)
xorl %edi, %edi
movq %rdi, 0xc0(%rsp)
movups 0xc8(%rsp), %xmm0
movaps %xmm0, 0x110(%rsp)
movq 0xd8(%rsp), %rdx
movq %rdx, 0x120(%rsp)
leaq 0x1d8(%rsp), %rdx
movaps -0x18(%rdx), %xmm0
movq -0x8(%rdx), %r8
movq %rdi, -0x18(%rdx)
movq 0xb8(%rsp), %r9
movq 0xc0(%rsp), %r10
movaps %xmm0, 0xb0(%rsp)
movq %r8, 0xc0(%rsp)
movq %r9, -0x10(%rdx)
movq %r10, -0x8(%rdx)
movq %rdi, -0x8(%rdx)
movapd %xmm1, -0x18(%rdx)
movq 0x10(%rdx), %rdi
movq %rdi, 0xd8(%rsp)
movups (%rdx), %xmm0
movups %xmm0, 0xc8(%rsp)
movq %rax, -0x18(%rdx)
movq %rcx, -0x10(%rdx)
movq %rsi, -0x8(%rdx)
movq 0x120(%rsp), %rsi
movq %rsi, 0x10(%rdx)
movapd 0x110(%rsp), %xmm0
movupd %xmm0, (%rdx)
cmpq %rax, %rcx
je 0x3c18
movq %rax, 0x1c8(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x350(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x340(%rsp), %rdi
callq 0x1312e
leaq 0x1367c(%rip), %rsi     # 0x172d1
leaq 0x340(%rsp), %rdi
callq 0x3480
leaq 0x5a0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x13612(%rip), %rsi     # 0x17287
leaq 0x13613(%rip), %rdx     # 0x1728f
leaq 0x590(%rsp), %rdi
callq 0x131be
leaq 0xb0(%rsp), %rdi
leaq 0x340(%rsp), %rsi
leaq 0x590(%rsp), %rdx
callq 0x75ee
movq 0x590(%rsp), %rdi
cmpq %r15, %rdi
je 0x3cb8
callq 0x3290
movq 0x340(%rsp), %rdi
cmpq %r14, %rdi
je 0x3cca
callq 0x3290
leaq 0x330(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x320(%rsp), %rdi
callq 0x1312e
leaq 0x135b6(%rip), %rsi     # 0x172ad
leaq 0x320(%rsp), %rdi
callq 0x3480
leaq 0x580(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x135c9(%rip), %rsi     # 0x172e0
leaq 0x135cd(%rip), %rdx     # 0x172eb
leaq 0x570(%rsp), %rdi
callq 0x131be
leaq 0xb0(%rsp), %rdi
leaq 0x320(%rsp), %rsi
leaq 0x570(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x62aa
movq 0x570(%rsp), %rdi
cmpq %r15, %rdi
je 0x3d62
callq 0x3290
movq 0x320(%rsp), %rdi
cmpq %r14, %rdi
je 0x3d74
callq 0x3290
movq 0x1c0(%rsp), %rdi
testq %rdi, %rdi
je 0x3d86
callq 0x3290
movq 0x6e0(%rsp), %rdi
testq %rdi, %rdi
je 0x3d98
callq 0x3290
movq 0x6b0(%rsp), %rdi
testq %rdi, %rdi
je 0x3daa
callq 0x3290
xorpd %xmm0, %xmm0
movapd %xmm0, 0x1c0(%rsp)
movq $0x0, 0x1d0(%rsp)
leaq 0x560(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x550(%rsp), %rdi
callq 0x1312e
leaq 0x4f(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0x1c0(%rsp), %rdx
leaq 0x550(%rsp), %rcx
movsd 0x13202(%rip), %xmm0    # 0x17010
callq 0x7a12
movq 0x550(%rsp), %rdi
cmpq %r14, %rdi
je 0x3e25
callq 0x3290
leaq 0xc8(%rsp), %rax
movq -0x18(%rax), %rcx
cmpq %rcx, -0x10(%rax)
je 0x3e3f
movq %rcx, 0xb8(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, (%rax)
movq $0x0, 0x10(%rax)
leaq 0x310(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x300(%rsp), %rdi
callq 0x1312e
leaq 0x13470(%rip), %rsi     # 0x172ec
leaq 0x300(%rsp), %rdi
callq 0x3480
leaq 0x540(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x133eb(%rip), %rsi     # 0x17287
leaq 0x133ec(%rip), %rdx     # 0x1728f
leaq 0x530(%rsp), %rdi
callq 0x131be
leaq 0x1c0(%rsp), %rdi
leaq 0x300(%rsp), %rsi
leaq 0x530(%rsp), %rdx
callq 0x75ee
movq 0x530(%rsp), %rdi
cmpq %r15, %rdi
je 0x3edf
callq 0x3290
movq 0x300(%rsp), %rdi
cmpq %r14, %rdi
je 0x3ef1
callq 0x3290
leaq 0x2f0(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2e0(%rsp), %rdi
callq 0x1312e
leaq 0x1338f(%rip), %rsi     # 0x172ad
leaq 0x2e0(%rsp), %rdi
callq 0x3480
leaq 0x520(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x133bf(%rip), %rsi     # 0x172fd
leaq 0x133c5(%rip), %rdx     # 0x1730a
leaq 0x510(%rsp), %rdi
callq 0x131be
leaq 0x1c0(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
leaq 0x510(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x62aa
movq 0x510(%rsp), %rdi
cmpq %r15, %rdi
je 0x3f89
callq 0x3290
movq 0x2e0(%rsp), %rdi
cmpq %r14, %rdi
je 0x3f9b
callq 0x3290
movq 0x19026(%rip), %rbx     # 0x1cfc8
leaq 0x13362(%rip), %rsi     # 0x1730b
movl $0x13, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x18ff4(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x3d8(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
callq 0x846c
xorpd %xmm0, %xmm0
movapd %xmm0, 0x1a0(%rsp)
xorl %eax, %eax
movq %rax, 0x1b0(%rsp)
movq %rax, 0x150(%rsp)
movapd %xmm0, 0x140(%rsp)
leaq 0x500(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x4f0(%rsp), %rdi
callq 0x1312e
leaq 0x3d8(%rsp), %rdi
leaq 0x1c0(%rsp), %rsi
leaq 0x1a0(%rsp), %rdx
leaq 0x140(%rsp), %rcx
leaq 0x4f0(%rsp), %r8
movl $0x96, %r9d
callq 0x855e
movq 0x4f0(%rsp), %rdi
cmpq %r14, %rdi
je 0x4090
callq 0x3290
movq 0x140(%rsp), %rax
movq $0x0, (%rax)
movq 0x18f22(%rip), %rbx     # 0x1cfc8
leaq 0x13272(%rip), %rsi     # 0x1731f
movl $0x13, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x18ef0(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq 0x140(%rsp), %rax
movq 0x148(%rsp), %rcx
xorpd %xmm0, %xmm0
cmpq %rcx, %rax
je 0x410e
movq %rax, %rdx
addsd (%rdx), %xmm0
addq $0x8, %rdx
cmpq %rcx, %rdx
jne 0x4101
subq %rax, %rcx
je 0x412f
sarq $0x3, %rcx
xorl %edx, %edx
movsd (%rax,%rdx,8), %xmm1
divsd %xmm0, %xmm1
movsd %xmm1, (%rax,%rdx,8)
incq %rdx
cmpq %rdx, %rcx
jne 0x4119
leaq 0x140(%rsp), %rdi
callq 0x8d4e
movapd %xmm0, 0xa0(%rsp)
movq 0x18e7c(%rip), %rdi     # 0x1cfc8
leaq 0x131e0(%rip), %rsi     # 0x17333
movl $0x15, %edx
callq 0x3300
movq 0x18e64(%rip), %rdi     # 0x1cfc8
movapd 0xa0(%rsp), %xmm0
callq 0x33d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movapd 0xa0(%rsp), %xmm0
cvttsd2si %xmm0, %rax
movq %rax, %rcx
subsd 0x12e63(%rip), %xmm0    # 0x17018
cvttsd2si %xmm0, %rsi
sarq $0x3f, %rcx
andq %rcx, %rsi
orq %rax, %rsi
movq 0x1a0(%rsp), %rax
movq 0x1a8(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq %rsi, %rdx
jbe 0x5873
movsd (%rax,%rsi,8), %xmm0
movsd %xmm0, 0xa0(%rsp)
movq 0x18dcf(%rip), %rdi     # 0x1cfc8
leaq 0x13149(%rip), %rsi     # 0x17349
movl $0x14, %edx
callq 0x3300
cvttsd2si 0xa0(%rsp), %ebp
movzwl %bp, %r15d
movq 0x18daa(%rip), %rdi     # 0x1cfc8
movl %r15d, %esi
callq 0x3430
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq 0x18d71(%rip), %rbx     # 0x1cfc8
leaq 0x13100(%rip), %rsi     # 0x1735e
movl $0x22, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x18d3f(%rip), %rbx     # 0x1cfc8
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x120(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x110(%rsp), %rdi
callq 0x1312e
leaq 0x130bb(%rip), %rsi     # 0x17381
leaq 0x110(%rsp), %rdi
callq 0x3480
leaq 0x690(%rsp), %rdi
leaq 0x110(%rsp), %rsi
movl $0x10, %edx
callq 0x3490
movq 0x110(%rsp), %rdi
cmpq %r14, %rdi
je 0x42ff
callq 0x3290
leaq 0x1309b(%rip), %rsi     # 0x173a1
leaq 0x690(%rsp), %r14
movl $0x1b, %edx
movq %r14, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x1306a(%rip), %rsi     # 0x173bd
leaq 0x690(%rsp), %rdi
movl $0x8, %edx
callq 0x3300
leaq 0x690(%rsp), %rdi
movl %r15d, %esi
callq 0x3430
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x13020(%rip), %rsi     # 0x173c6
leaq 0x690(%rsp), %r14
movl $0x16, %edx
movq %r14, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12fea(%rip), %rsi     # 0x173dd
leaq 0x690(%rsp), %r14
movl $0x17, %edx
movq %r14, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12fb5(%rip), %rsi     # 0x173f5
leaq 0x690(%rsp), %r14
movl $0xb, %edx
movq %r14, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12f74(%rip), %rsi     # 0x17401
leaq 0x690(%rsp), %r14
movl $0x34, %edx
movq %r14, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12f5c(%rip), %rsi     # 0x17436
leaq 0x690(%rsp), %r14
movl $0x1d, %edx
movq %r14, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x690(%rsp), %rdi
callq 0x3370
movq 0x18a84(%rip), %rax     # 0x1cfb8
movq (%rax), %rcx
movq 0x18(%rax), %rdx
leaq 0x698(%rsp), %rdi
movq %rcx, -0x8(%rdi)
movq %rcx, 0xe8(%rsp)
movq -0x18(%rcx), %rax
movq %rdx, 0x1f8(%rsp)
movq %rdx, 0x690(%rsp,%rax)
callq 0x3260
leaq 0x788(%rsp), %rdi
callq 0x30c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x18a35(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq %rax, %rbx
leaq 0x12eaa(%rip), %rsi     # 0x17454
movl $0x17, %edx
movq %rax, %rdi
callq 0x3300
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
xorpd %xmm0, %xmm0
leaq 0x110(%rsp), %rdi
movapd %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x8fd8
cmpl $0x0, 0x10(%rsp)
je 0x4685
xorl %ebx, %ebx
leaq 0x1c0(%rsp), %r14
leaq 0x110(%rsp), %r15
cmpl $0x0, 0x44(%rsp)
je 0x467b
xorl %r12d, %r12d
cmpl $0x0, 0x48(%rsp)
je 0x4671
xorl %r13d, %r13d
movq %r14, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %rbx, %rcx
callq 0x9144
cmpw %bp, %ax
jb 0x4667
movq %r15, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %rbx, %rcx
movl $0x1, %r8d
callq 0x949e
incq %r13
cmpq %r13, 0x18(%rsp)
jne 0x463a
incq %r12
cmpq 0x50(%rsp), %r12
jne 0x4630
incq %rbx
cmpq 0x8(%rsp), %rbx
jne 0x4626
leaq 0x2d0(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2c0(%rsp), %rdi
callq 0x1312e
leaq 0x12bfc(%rip), %rsi     # 0x172ae
leaq 0x2c0(%rsp), %rdi
callq 0x3480
leaq 0x4e0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x12d9a(%rip), %rsi     # 0x1746c
leaq 0x12d9b(%rip), %rdx     # 0x17474
leaq 0x4d0(%rsp), %rdi
callq 0x131be
leaq 0x110(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
leaq 0x4d0(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x97f4
movq 0x4d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x471d
callq 0x3290
movq 0x2c0(%rsp), %rdi
cmpq %r14, %rdi
je 0x472f
callq 0x3290
xorpd %xmm0, %xmm0
leaq 0x920(%rsp), %rdi
movapd %xmm0, (%rdi)
movq $0x0, 0x10(%rdi)
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x8fd8
leaq 0x110(%rsp), %rdi
callq 0xa320
leaq 0x2b0(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x2a0(%rsp), %rdi
callq 0x1312e
leaq 0x12b16(%rip), %rsi     # 0x172ae
leaq 0x2a0(%rsp), %rdi
callq 0x3480
leaq 0x4c0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x12cbd(%rip), %rsi     # 0x17475
leaq 0x12ccc(%rip), %rdx     # 0x1748b
leaq 0x4b0(%rsp), %rdi
callq 0x131be
leaq 0x110(%rsp), %rdi
leaq 0x2a0(%rsp), %rsi
leaq 0x4b0(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x97f4
movq 0x4b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x4803
callq 0x3290
movq 0x2a0(%rsp), %rdi
cmpq %r14, %rdi
je 0x4815
callq 0x3290
leaq 0x290(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x280(%rsp), %rdi
callq 0x1312e
leaq 0x12c4a(%rip), %rsi     # 0x1748c
leaq 0x280(%rsp), %rdi
callq 0x3480
leaq 0x4a0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x12c40(%rip), %rsi     # 0x174a2
leaq 0x12c40(%rip), %rdx     # 0x174a9
leaq 0x490(%rsp), %rdi
callq 0x131be
leaq 0x110(%rsp), %rdi
leaq 0x280(%rsp), %rsi
leaq 0x490(%rsp), %rdx
callq 0xab80
movq 0x490(%rsp), %rdi
cmpq %r15, %rdi
je 0x48a5
callq 0x3290
movq 0x280(%rsp), %rdi
cmpq %r14, %rdi
je 0x48b7
callq 0x3290
xorpd %xmm0, %xmm0
movapd %xmm0, 0x3a0(%rsp)
movq $0x0, 0x3b0(%rsp)
leaq 0x270(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x260(%rsp), %rdi
callq 0x1312e
leaq 0x129b0(%rip), %rsi     # 0x172ad
leaq 0x260(%rsp), %rdi
callq 0x3480
xorps %xmm0, %xmm0
cvtsi2ssl 0x78(%rsp), %xmm0
leaq 0x110(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
leaq 0x260(%rsp), %rdx
movl $0x64, %ecx
callq 0xaf32
movq 0x260(%rsp), %rdi
cmpq %r15, %rdi
je 0x4947
callq 0x3290
leaq 0x3a0(%rsp), %rdi
movsd 0x126c9(%rip), %xmm0    # 0x17020
callq 0xc080
leaq 0x250(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x240(%rsp), %rdi
callq 0x1312e
leaq 0x12925(%rip), %rsi     # 0x172ae
leaq 0x240(%rsp), %rdi
callq 0x3480
leaq 0x480(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x12b00(%rip), %rsi     # 0x174aa
leaq 0x12b02(%rip), %rdx     # 0x174b3
leaq 0x470(%rsp), %rdi
callq 0x131be
leaq 0x3a0(%rsp), %rdi
leaq 0x240(%rsp), %rsi
leaq 0x470(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0xc3a4
movq 0x470(%rsp), %rdi
cmpq %r12, %rdi
je 0x49f5
callq 0x3290
movq 0x240(%rsp), %rdi
cmpq %r15, %rdi
je 0x4a07
callq 0x3290
leaq 0x230(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0x1312e
leaq 0x1287a(%rip), %rsi     # 0x172ae
leaq 0x220(%rsp), %rdi
callq 0x3480
leaq 0x460(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x12a5f(%rip), %rsi     # 0x174b4
leaq 0x12a67(%rip), %rdx     # 0x174c3
leaq 0x450(%rsp), %rdi
callq 0x131be
leaq 0x3a0(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x450(%rsp), %rdx
movq 0x8(%rsp), %rcx
movl $0x1, %r8d
callq 0xc3a4
movq 0x450(%rsp), %rdi
cmpq %r12, %rdi
je 0x4aa3
callq 0x3290
movq 0x220(%rsp), %rdi
cmpq %r15, %rdi
je 0x4ab5
callq 0x3290
movq 0x1850c(%rip), %rbx     # 0x1cfc8
leaq 0x12a01(%rip), %rsi     # 0x174c4
movl $0x15, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x184da(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x638(%rsp), %rax
xorl %ecx, %ecx
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x8f8(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x8c8(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x898(%rsp), %rax
movl %ecx, (%rax)
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
leaq 0x660(%rsp), %rdi
movq %rcx, 0x10(%rdi)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rdi)
movq 0x18(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0xceda
movq 0x18431(%rip), %rbx     # 0x1cfc8
leaq 0x1293c(%rip), %rsi     # 0x174da
movl $0xf, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x183ff(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
cmpl $0x0, 0x10(%rsp)
je 0x4d42
xorl %ebx, %ebx
leaq 0x690(%rsp), %r13
leaq 0x890(%rsp), %r14
movq 0x183ce(%rip), %rdi     # 0x1cfc8
movq %rbx, %rsi
callq 0x31d0
movl $0x1, %edx
movq %rax, %rdi
leaq 0x130b6(%rip), %rsi     # 0x17cc7
callq 0x3300
cmpl $0x0, 0x44(%rsp)
je 0x4d35
movl %ebx, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0xa0(%rsp)
xorl %ebp, %ebp
cmpl $0x0, 0x48(%rsp)
je 0x4d28
movl %ebp, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movsd %xmm0, 0x10(%rsp)
xorl %r12d, %r12d
leaq 0x3a0(%rsp), %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0xd03a
movl %eax, %r15d
movzwl %r15w, %r8d
leaq 0x660(%rsp), %rdi
movq %r12, %rsi
movq %rbp, %rdx
movq %rbx, %rcx
callq 0xd394
movzwl %r15w, %r15d
movq %r15, 0x690(%rsp)
leaq 0x630(%rsp), %rdi
movq %r13, %rsi
callq 0xd6ee
incl (%rax)
movq %r15, 0x690(%rsp)
leaq 0x8f0(%rsp), %rdi
movq %r13, %rsi
callq 0xd754
movl %r12d, %ecx
xorps %xmm0, %xmm0
cvtsi2sd %rcx, %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movq %r15, 0x690(%rsp)
leaq 0x8c0(%rsp), %rdi
movq %r13, %rsi
callq 0xd754
movsd (%rax), %xmm0
addsd 0x10(%rsp), %xmm0
movsd %xmm0, (%rax)
movq %r15, 0x690(%rsp)
movq %r14, %rdi
movq %r13, %rsi
callq 0xd754
movsd (%rax), %xmm0
addsd 0xa0(%rsp), %xmm0
movsd %xmm0, (%rax)
incl %r12d
cmpq 0x18(%rsp), %r12
jne 0x4c54
incl %ebp
cmpq 0x50(%rsp), %rbp
jne 0x4c36
incl %ebx
cmpq 0x8(%rsp), %rbx
jne 0x4bf3
movq 0x1827f(%rip), %rbx     # 0x1cfc8
leaq 0x1279a(%rip), %rsi     # 0x174ea
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x1824d(%rip), %rdi     # 0x1cfc8
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x90(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x80(%rsp), %rdi
callq 0x1312e
leaq 0x12751(%rip), %rsi     # 0x17506
leaq 0x80(%rsp), %rdi
callq 0x3480
movq 0x78(%rsp), %rax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movl $0x1, %ebx
movl %ecx, 0x10(%rsp)
cmpl $0xa, %ecx
jb 0x4e8f
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl 0x10(%rsp), %ecx
cmpl $0x63, %ecx
jbe 0x4e88
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x4e8d
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x4e8f
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x4dee
addl $-0x3, %ebx
jmp 0x4e8f
movq 0x181b6(%rip), %rbx     # 0x1cfe8
leaq 0x123ad(%rip), %rsi     # 0x171e6
movl $0x26, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x12399(%rip), %rsi     # 0x1720d
movl $0x62, %edx
movq %rbx, %rdi
callq 0x3300
xorl %ebx, %ebx
jmp 0x585f
addl $-0x2, %ebx
jmp 0x4e8f
decl %ebx
movq 0x78(%rsp), %r14
shrl $0x1f, %r14d
leal (%rbx,%r14), %esi
leaq 0x68(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x58(%rsp), %rdi
movl $0x2d, %edx
callq 0x3310
movq %r14, 0x78(%rsp)
movl %r14d, %eax
movq 0x58(%rsp), %rdi
movq %rax, 0xa0(%rsp)
addq %rax, %rdi
movl %ebx, %esi
movl 0x10(%rsp), %edx
callq 0x1302d
movq 0x80(%rsp), %rcx
movq 0x88(%rsp), %r8
movq 0x60(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
leaq 0x90(%rsp), %rdi
cmpq %rdi, %rcx
je 0x4f0a
movq 0x90(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x4f2a
movl $0xf, %esi
leaq 0x68(%rsp), %rdi
cmpq %rdi, 0x58(%rsp)
je 0x4f25
movq 0x68(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x4f3e
movq 0x58(%rsp), %rsi
leaq 0x80(%rsp), %rdi
callq 0x30b0
jmp 0x4f4c
leaq 0x58(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x32e0
leaq 0x6a0(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x4f79
movq %rsi, 0x690(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x6a0(%rsp)
jmp 0x4f81
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x698(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x12cc9(%rip), %rsi     # 0x17c71
leaq 0x690(%rsp), %rdi
callq 0x3480
leaq 0x100(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4fe5
movq %rdx, 0xf0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x100(%rsp)
jmp 0x4fed
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0xf8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x6a0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x501e
callq 0x3290
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x5032
callq 0x3290
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x504c
callq 0x3290
movq 0x17f75(%rip), %rdi     # 0x1cfc8
leaq 0x124c4(%rip), %rsi     # 0x1751e
movl $0xa, %edx
callq 0x3300
movq 0xf0(%rsp), %rsi
movq 0xf8(%rsp), %rdx
movq 0x17f4d(%rip), %rdi     # 0x1cfc8
callq 0x3300
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x690(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
movl $0x10, %edx
callq 0x3490
movq 0x690(%rsp), %rax
movq -0x18(%rax), %rax
cmpl $0x0, 0x6b0(%rsp,%rax)
je 0x512a
movq 0x17f07(%rip), %rbx     # 0x1cfe8
leaq 0x12441(%rip), %rsi     # 0x17529
movl $0x13, %edx
movq %rbx, %rdi
callq 0x3300
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq 0x17ed5(%rip), %rdi     # 0x1cfe8
callq 0x3040
movl $0x1, %ebx
movq %rax, %rdi
callq 0x31e0
jmp 0x570c
leaq 0x1240c(%rip), %rsi     # 0x1753d
leaq 0x690(%rsp), %rbx
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x3300
movq 0x690(%rsp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
leaq 0x690(%rsp), %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
leaq 0x123da(%rip), %rsi     # 0x17558
leaq 0x690(%rsp), %rdi
movl $0x7, %edx
callq 0x3300
leaq 0x690(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x31d0
movq %rax, %rbx
leaq 0x123b4(%rip), %rsi     # 0x17560
movl $0x1b, %edx
movq %rax, %rdi
callq 0x3300
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq $0x0, 0x80(%rsp)
cmpq $0x0, 0x658(%rsp)
je 0x536f
leaq 0x630(%rsp), %rbx
leaq 0x80(%rsp), %r12
leaq 0x12ab5(%rip), %r13     # 0x17cc7
leaq 0x690(%rsp), %r15
leaq 0x890(%rsp), %rbp
movq %rbx, %rdi
movq %r12, %rsi
callq 0xd862
movl (%rax), %r14d
testl %r14d, %r14d
je 0x534e
movl $0x1, %edx
movq %r15, %rdi
movq %r13, %rsi
callq 0x3300
leaq 0x8f0(%rsp), %rdi
movq %r12, %rsi
callq 0xd8c8
cvtsi2sd %r14, %xmm1
movsd (%rax), %xmm0
movsd %xmm1, 0x18(%rsp)
divsd %xmm1, %xmm0
movq %r15, %rdi
callq 0x33d0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x3300
leaq 0x8c0(%rsp), %rdi
movq %r12, %rsi
callq 0xd8c8
movsd (%rax), %xmm0
divsd 0x18(%rsp), %xmm0
movq %r14, %rdi
callq 0x33d0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x3300
movq %rbp, %rdi
movq %r12, %rsi
callq 0xd8c8
movsd (%rax), %xmm0
divsd 0x18(%rsp), %xmm0
movq %r14, %rdi
callq 0x33d0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x3300
movq 0x80(%rsp), %rsi
movq %r14, %rdi
callq 0x31d0
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r13, %rsi
callq 0x3300
movq %rbx, %rdi
movq %r12, %rsi
callq 0xd862
movl (%rax), %esi
movq %r14, %rdi
callq 0x31d0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x32b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x31e0
movq 0x80(%rsp), %rax
incq %rax
movq %rax, 0x80(%rsp)
cmpq 0x658(%rsp), %rax
jne 0x5222
leaq 0x690(%rsp), %rdi
callq 0x3370
leaq 0x210(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x200(%rsp), %rdi
callq 0x1312e
leaq 0x11f05(%rip), %rsi     # 0x172ae
leaq 0x200(%rsp), %rdi
callq 0x3480
leaq 0x440(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x121b3(%rip), %rsi     # 0x1757c
leaq 0x121c5(%rip), %rdx     # 0x17595
leaq 0x430(%rsp), %rdi
callq 0x131be
leaq 0x660(%rsp), %rdi
leaq 0x200(%rsp), %rsi
leaq 0x430(%rsp), %rdx
movq 0x8(%rsp), %rcx
xorl %r8d, %r8d
callq 0x62aa
movq 0x430(%rsp), %rdi
cmpq %r15, %rdi
je 0x5414
callq 0x3290
movq 0x200(%rsp), %rdi
cmpq %r14, %rdi
je 0x5426
callq 0x3290
leaq 0x190(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rdx
addq %rsi, %rdx
leaq 0x180(%rsp), %rdi
callq 0x1312e
leaq 0x12143(%rip), %rsi     # 0x17596
leaq 0x180(%rsp), %rdi
callq 0x3480
movl $0x1, %ebx
cmpl $0xa, 0x10(%rsp)
jb 0x54b2
movl $0x4, %ebx
movl $0xd1b71759, %eax       # imm = 0xD1B71759
movl 0x10(%rsp), %ecx
cmpl $0x63, %ecx
jbe 0x54ab
cmpl $0x3e7, %ecx            # imm = 0x3E7
jbe 0x54b0
cmpl $0x2710, %ecx           # imm = 0x2710
jb 0x54b2
movl %ecx, %edx
imulq %rax, %rdx
shrq $0x2d, %rdx
addl $0x4, %ebx
cmpl $0x1869f, %ecx          # imm = 0x1869F
movl %edx, %ecx
ja 0x547a
addl $-0x3, %ebx
jmp 0x54b2
addl $-0x2, %ebx
jmp 0x54b2
decl %ebx
movq 0x78(%rsp), %rsi
addl %ebx, %esi
leaq 0x170(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x160(%rsp), %rdi
movl $0x2d, %edx
callq 0x3310
movq 0xa0(%rsp), %rdi
addq 0x160(%rsp), %rdi
movl %ebx, %esi
movl 0x10(%rsp), %edx
callq 0x1302d
movq 0x180(%rsp), %rcx
movq 0x188(%rsp), %r8
movq 0x168(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %esi
cmpq %r14, %rcx
je 0x5520
movq 0x190(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5541
movl $0xf, %esi
cmpq %r15, 0x160(%rsp)
je 0x553c
movq 0x170(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x5558
movq 0x160(%rsp), %rsi
leaq 0x180(%rsp), %rdi
callq 0x30b0
jmp 0x5569
leaq 0x160(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x32e0
leaq 0x68(%rsp), %rsi
movq %rsi, 0x58(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x558e
movq %rdx, 0x58(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x68(%rsp)
jmp 0x5596
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x60(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x11d3e(%rip), %rsi     # 0x172f8
leaq 0x58(%rsp), %rdi
callq 0x3480
leaq 0x90(%rsp), %r12
movq %r12, 0x80(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x55f8
movq %rdx, 0x80(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x90(%rsp)
jmp 0x5602
movupd (%rcx), %xmm0
movupd %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x80(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf0(%rsp), %rdi
movq %rbx, %rsi
callq 0x3320
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x563e
callq 0x3290
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x5652
callq 0x3290
movq 0x160(%rsp), %rdi
cmpq %r15, %rdi
je 0x5664
callq 0x3290
movq 0x180(%rsp), %rdi
cmpq %r14, %rdi
je 0x5676
callq 0x3290
leaq 0x420(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0xf0(%rsp), %rsi
movq 0xf8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x410(%rsp), %rdi
callq 0x1312e
leaq 0x400(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x11bd2(%rip), %rsi     # 0x17287
leaq 0x11bd3(%rip), %rdx     # 0x1728f
leaq 0x3f0(%rsp), %rdi
callq 0x131be
leaq 0x660(%rsp), %rdi
leaq 0x410(%rsp), %rsi
leaq 0x3f0(%rsp), %rdx
callq 0x75ee
movq 0x3f0(%rsp), %rdi
cmpq %r15, %rdi
je 0x56f8
callq 0x3290
movq 0x410(%rsp), %rdi
xorl %ebx, %ebx
cmpq %r14, %rdi
je 0x570c
callq 0x3290
leaq 0x698(%rsp), %rdi
movq 0xe8(%rsp), %rax
movq %rax, -0x8(%rdi)
movq -0x18(%rax), %rax
movq 0x1f8(%rsp), %rcx
movq %rcx, 0x690(%rsp,%rax)
callq 0x3260
leaq 0x788(%rsp), %rdi
callq 0x30c0
movq 0xf0(%rsp), %rdi
leaq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x5760
callq 0x3290
movq 0x660(%rsp), %rdi
testq %rdi, %rdi
je 0x5772
callq 0x3290
leaq 0x890(%rsp), %rdi
callq 0x1309a
leaq 0x8c0(%rsp), %rdi
callq 0x1309a
leaq 0x8f0(%rsp), %rdi
callq 0x1309a
leaq 0x630(%rsp), %rdi
callq 0x130e4
movq 0x3a0(%rsp), %rdi
testq %rdi, %rdi
je 0x57b8
callq 0x3290
movq 0x920(%rsp), %rdi
testq %rdi, %rdi
je 0x57ca
callq 0x3290
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x57dc
callq 0x3290
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x57ee
callq 0x3290
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5800
callq 0x3290
movq 0x3d8(%rsp), %rdi
testq %rdi, %rdi
je 0x5812
callq 0x3290
movq 0x1c0(%rsp), %rdi
testq %rdi, %rdi
je 0x5824
callq 0x3290
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x5836
callq 0x3290
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5849
callq 0x3290
leaq 0x390(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x585f
callq 0x3290
movl %ebx, %eax
addq $0x958, %rsp            # imm = 0x958
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x11eef(%rip), %rdi     # 0x17769
xorl %eax, %eax
callq 0x33a0
movq %rax, %rbx
movq 0x3f0(%rsp), %rdi
cmpq %r15, %rdi
je 0x589b
callq 0x3290
jmp 0x589b
movq %rax, %rbx
movq 0x410(%rsp), %rdi
jmp 0x590d
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x58c1
callq 0x3290
jmp 0x58c1
movq %rax, %rbx
movq 0x160(%rsp), %rdi
cmpq %r15, %rdi
je 0x58da
callq 0x3290
jmp 0x58da
jmp 0x58d7
movq %rax, %rbx
movq 0x180(%rsp), %rdi
jmp 0x590d
jmp 0x5cd3
movq %rax, %rbx
movq 0x430(%rsp), %rdi
cmpq %r15, %rdi
je 0x5905
callq 0x3290
jmp 0x5905
jmp 0x5902
movq %rax, %rbx
movq 0x200(%rsp), %rdi
cmpq %r14, %rdi
je 0x5cd6
callq 0x3290
jmp 0x5cd6
jmp 0x5c8f
movq %rax, %rbx
leaq 0x6a0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5943
callq 0x3290
jmp 0x5943
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x595e
callq 0x3290
jmp 0x595e
jmp 0x595b
movq %rax, %rbx
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
jmp 0x5cf3
jmp 0x5d0c
movq %rdx, %r14
movq %rax, %rbx
movq 0x450(%rsp), %rdi
cmpq %r12, %rdi
je 0x599a
callq 0x3290
jmp 0x599a
jmp 0x5994
movq %rdx, %r14
movq %rax, %rbx
movq 0x220(%rsp), %rdi
jmp 0x59e0
movq %rdx, %r14
movq %rax, %rbx
movq 0x470(%rsp), %rdi
cmpq %r12, %rdi
je 0x59c6
callq 0x3290
jmp 0x59c6
jmp 0x59c0
movq %rdx, %r14
movq %rax, %rbx
movq 0x240(%rsp), %rdi
jmp 0x59e0
jmp 0x59d2
movq %rdx, %r14
movq %rax, %rbx
movq 0x260(%rsp), %rdi
cmpq %r15, %rdi
je 0x5c34
callq 0x3290
jmp 0x5c34
movq %rax, %rbx
movq 0x490(%rsp), %rdi
cmpq %r15, %rdi
je 0x5a0f
callq 0x3290
jmp 0x5a0f
jmp 0x5a0c
movq %rax, %rbx
movq 0x280(%rsp), %rdi
jmp 0x5a3d
movq %rax, %rbx
movq 0x4b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5a35
callq 0x3290
jmp 0x5a35
jmp 0x5a32
movq %rax, %rbx
movq 0x2a0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5d62
jmp 0x5d67
movq %rax, %rbx
movq 0x4d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5a67
callq 0x3290
jmp 0x5a67
jmp 0x5a64
movq %rax, %rbx
movq 0x2c0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5d74
jmp 0x5d79
jmp 0x5a7f
movq %rax, %rbx
movq 0x110(%rsp), %rdi
jmp 0x5a9c
jmp 0x5cb4
movq %rax, %rbx
movq 0x4f0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5d86
jmp 0x5d8b
jmp 0x5ca2
movq %rax, %rbx
movq 0x510(%rsp), %rdi
cmpq %r15, %rdi
je 0x5acb
callq 0x3290
jmp 0x5acb
jmp 0x5ac8
movq %rax, %rbx
movq 0x2e0(%rsp), %rdi
jmp 0x5b06
movq %rax, %rbx
movq 0x530(%rsp), %rdi
cmpq %r15, %rdi
je 0x5af1
callq 0x3290
jmp 0x5af1
jmp 0x5aee
movq %rax, %rbx
movq 0x300(%rsp), %rdi
jmp 0x5b06
movq %rax, %rbx
movq 0x550(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5dbc
jmp 0x5dc1
movq %rax, %rbx
movq 0x570(%rsp), %rdi
cmpq %r15, %rdi
je 0x5b30
callq 0x3290
jmp 0x5b30
jmp 0x5b2d
movq %rax, %rbx
movq 0x320(%rsp), %rdi
jmp 0x5b5e
movq %rax, %rbx
movq 0x590(%rsp), %rdi
cmpq %r15, %rdi
je 0x5b56
callq 0x3290
jmp 0x5b56
jmp 0x5b53
movq %rax, %rbx
movq 0x340(%rsp), %rdi
cmpq %r14, %rdi
je 0x5c02
callq 0x3290
jmp 0x5c02
jmp 0x5cac
movq %rax, %rbx
movq 0x5b0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5b92
callq 0x3290
jmp 0x5b92
jmp 0x5b8f
movq %rax, %rbx
movq 0x360(%rsp), %rdi
jmp 0x5bbe
movq %rax, %rbx
movq 0x5d0(%rsp), %rdi
cmpq %r15, %rdi
je 0x5bb6
callq 0x3290
jmp 0x5bb6
movq %rax, %rbx
movq 0x5f0(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5dce
jmp 0x5dd3
movq %rax, %rbx
movq 0x610(%rsp), %rdi
cmpq %r14, %rdi
jne 0x5de0
jmp 0x5de5
jmp 0x5c96
movq %rax, %rbx
jmp 0x5df8
movq %rax, %rbx
jmp 0x5e0e
jmp 0x5d07
movq %rax, %rbx
movq 0x1c0(%rsp), %rdi
testq %rdi, %rdi
je 0x5c14
callq 0x3290
leaq 0x690(%rsp), %rdi
callq 0x79ee
jmp 0x5dd3
movq %rax, %rbx
jmp 0x5d55
movq %rdx, %r14
movq %rax, %rbx
cmpl $0x1, %r14d
jne 0x5d55
movq %rbx, %rdi
callq 0x3100
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq 0x17394(%rip), %rdi     # 0x1cfe8
callq 0x3300
movq %rax, %rdi
callq 0x3140
movl $0x1, %ebx
callq 0x33f0
jmp 0x57a6
jmp 0x5c26
movq %rax, %rbx
callq 0x33f0
jmp 0x5d55
movq %rax, %rdi
callq 0xcecf
movq %rax, %rbx
jmp 0x5d67
movq %rax, %rbx
jmp 0x5ce3
jmp 0x5cb4
movq %rax, %rbx
jmp 0x5de5
jmp 0x5cb4
jmp 0x5cd3
movq %rax, %rbx
jmp 0x5dc1
jmp 0x5d0c
movq %rax, %rbx
jmp 0x5dd3
movq %rax, %rbx
jmp 0x5d8b
movq %rax, %rbx
leaq 0x690(%rsp), %rdi
callq 0x3390
jmp 0x5d8b
jmp 0x5d0c
movq %rax, %rbx
leaq 0x690(%rsp), %rdi
callq 0x3390
movq 0xf0(%rsp), %rdi
leaq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x5d0f
callq 0x3290
jmp 0x5d0f
jmp 0x5d0c
jmp 0x5d0c
jmp 0x5d0c
jmp 0x5d0c
movq %rax, %rbx
jmp 0x5d79
movq %rax, %rbx
movq 0x660(%rsp), %rdi
testq %rdi, %rdi
je 0x5d21
callq 0x3290
leaq 0x890(%rsp), %rdi
callq 0x1309a
leaq 0x8c0(%rsp), %rdi
callq 0x1309a
leaq 0x8f0(%rsp), %rdi
callq 0x1309a
leaq 0x630(%rsp), %rdi
callq 0x130e4
movq 0x3a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5d67
callq 0x3290
movq 0x920(%rsp), %rdi
testq %rdi, %rdi
je 0x5d79
callq 0x3290
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x5d8b
callq 0x3290
movq 0x140(%rsp), %rdi
testq %rdi, %rdi
je 0x5d9d
callq 0x3290
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0x5daf
callq 0x3290
movq 0x3d8(%rsp), %rdi
testq %rdi, %rdi
je 0x5dc1
callq 0x3290
movq 0x1c0(%rsp), %rdi
testq %rdi, %rdi
je 0x5dd3
callq 0x3290
movq 0xb0(%rsp), %rdi
testq %rdi, %rdi
je 0x5de5
callq 0x3290
leaq 0x30(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5df8
callq 0x3290
leaq 0x390(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x5e0e
callq 0x3290
movq %rbx, %rdi
callq 0x3440