// File: /workspace/github_cpp_makefile_star2_O3/bobverity[P]MavericK/readIn.cpp
// Function: readData(globals&)
void readData(globals &globals) {
    
    cout << "Loading data file...\n";
    writeToFile("Data properties\n", globals.outputLog_on, globals.outputLog_fileStream);
    
    // open file stream
    globals.data_fileStream = safe_ifstream(globals.data_filePath, globals.outputLog_on, globals.outputLog_fileStream);
    
    // read in raw data file as matrix of strings. Skip header line if necessary
    vector< vector<string> > rawEntries;
    vector<string> rawEntries_line;
    string line1;
    int row=0;
    while (safe_getline(globals.data_fileStream, line1))
    {
        if (line1.size()==0)
            continue;
        row++;
        if (row==1 && globals.headerRow_on)
            continue;
        rawEntries_line.clear();
        istringstream ss(line1);
        string line2;
        while (getline(ss, line2, '\t'))
        {
            string line3 = istringstream(line2).str();
            rawEntries_line.push_back(line3);
        }
        rawEntries.push_back(rawEntries_line);
    }
    
    // close file stream
    globals.data_fileStream.close();
    
    // if no data then abort
    if (rawEntries.size()==0) {
        cerrAndLog("\nError: data file appears to be empty\n", globals.outputLog_on, globals.outputLog_fileStream);
        exit(1);
    }
    
    // check same number of values in each row
    int cols = int(rawEntries[0].size());
    for (int i=0; i<int(rawEntries.size()); i++) {
        int row = globals.headerRow_on ? i+2 : i+1;
        if (rawEntries[i].size()!=cols) {
            cerrAndLog("\nError: row "+to_string((long long)row)+string(" in data file does not contain ")+to_string((long long)cols)+string(" entries\n"), globals.outputLog_on, globals.outputLog_fileStream);
            exit(1);
        }
    }
    
    // check that number of columns is compatible with data format options
    int minCols = 2;
    minCols = globals.popCol_on ? minCols+1 : minCols;
    minCols = globals.ploidyCol_on ? minCols+1 : minCols;
    if (cols<minCols) {
        cerrAndLog("\nError: data file must contain at least "+to_string((long long)minCols)+string(" columns under current settings\n"), globals.outputLog_on, globals.outputLog_fileStream);
        exit(1);
    }
    
    // find which columns in data file correspond to special values
    int pop_startRead = -1;
    int ploidy_startRead = -1;
    int data_startRead = 1;
    if (globals.ploidyCol_on) {
        ploidy_startRead = 1;
        data_startRead++;
    }
    if (globals.popCol_on) {
        pop_startRead = 1;
        if (ploidy_startRead!=-1)
            ploidy_startRead++;
        data_startRead++;
    }
    
    // print these to screen and file
    if (globals.headerRow_on)
        coutAndLog("  row 1 = header line\n", globals.outputLog_on, globals.outputLog_fileStream);
    coutAndLog("  column 1 = individual labels\n", globals.outputLog_on, globals.outputLog_fileStream);
    if (pop_startRead!=-1)
        coutAndLog("  column "+to_string((long long)pop_startRead+1)+" = population of origin\n", globals.outputLog_on, globals.outputLog_fileStream);
    if (ploidy_startRead!=-1)
        coutAndLog("  column "+to_string((long long)ploidy_startRead+1)+" = ploidy\n", globals.outputLog_on, globals.outputLog_fileStream);
    
    // split rawData into special columns and data matrix
    vector<string> indLabels_raw, pop_raw, ploidy_raw;
    vector< vector<string> > rawData;
    vector<string> rawData_line;
    for (int i=0; i<int(rawEntries.size()); i++) {
        rawData_line.clear();
        for (int j=0; j<int(rawEntries[i].size()); j++) {
            
            // read in individual labels
            if (j==0)
                indLabels_raw.push_back(rawEntries[i][j]);
            
            // read in population labels
            if (j==pop_startRead)
                pop_raw.push_back(rawEntries[i][j]);
            
            // read in ploidy for each individual
            if (j==ploidy_startRead)
                ploidy_raw.push_back(rawEntries[i][j]);
            
            // read in data
            if (j>=data_startRead)
                rawData_line.push_back(rawEntries[i][j]);
            
        }
        rawData.push_back(rawData_line);
    }
    
    // finally define number of loci
    globals.loci = int(rawData[0].size());
    
    // convert ploidy labels into integer format
    vector<int> ploidy_raw_int(rawEntries.size(),globals.ploidy);
    if (globals.ploidyCol_on) {
        for (int i=0; i<int(ploidy_raw.size()); i++) {
            double param_double=0;
            istringstream(ploidy_raw[i]) >> param_double;
            if (my_round(double(param_double))==param_double && my_round(double(param_double))>=0) {
                ploidy_raw_int[i] = int(param_double);
            } else {
                cerrAndLog("\nError: all ploidy values in data file must be positive integers\n", globals.outputLog_on, globals.outputLog_fileStream);
                exit(1);
            }
        }
    }
    
    // check that ploidy values make sense. Ploidy must be either defined on the first row of an individual (ploidy_format==1), or defined equally for all rows of an individual (ploidy_format==2).
    int thisPloidy=0, countDown=0, ploidy_format=0;
    bool ploidyError = false;
    for (int i=0; i<int(rawEntries.size()); i++) {
        // if new individual
        if (countDown==0) {
            if (ploidy_raw_int[i]!=0) {
                thisPloidy = ploidy_raw_int[i];
                countDown = thisPloidy-1;
            } else {
                ploidyError = true;
            }
        } else {
            if (ploidy_raw_int[i]==0) {
                if (ploidy_format==0 || ploidy_format==1) {
                    ploidy_format = 1;
                    countDown--;
                } else {
                    ploidyError = true;
                }
            } else if (ploidy_raw_int[i]==thisPloidy) {
                if (ploidy_format==0 || ploidy_format==2) {
                    ploidy_format = 2;
                    countDown--;
                } else {
                    ploidyError = true;
                }
            } else {
                ploidyError = true;
            }
        }
        if (ploidyError) {
            cerrAndLog("\nError: when reading ploidy for each individual from file (using the ploidyCol_on=true option) the data file must contain a ploidy value on the first row of each individual, or alternatively the same ploidy value for all rows of an individual\n", globals.outputLog_on, globals.outputLog_fileStream);
            exit(1);
        }
    }
    if (countDown!=0) {
        cerrAndLog("\nError: data file does not contain sufficient rows to account for ploidy values (also check that headerRow_on is specified correctly)\n", globals.outputLog_on, globals.outputLog_fileStream);
        exit(1);
    }
    
    // similarly for pop values. Pop values must be either defined on the first row of an individual (pop_format==1), or defined equally for all rows of an individual (pop_format==2).
    if (globals.popCol_on) {
        countDown=0;
        string thisPop;
        int pop_format=0;
        bool popError = false;
        for (int i=0; i<int(rawEntries.size()); i++) {
            // if new individual
            if (countDown==0) {
                thisPop = pop_raw[i];
                countDown = ploidy_raw_int[i]-1;
            // if not new individual
            } else {
                if (pop_raw[i]=="") {
                    if (pop_format==0 || pop_format==1) {
                        pop_format = 1;
                        countDown--;
                    } else {
                        popError = true;
                    }
                } else if (pop_raw[i]==thisPop) {
                    if (pop_format==0 || pop_format==2) {
                        pop_format = 2;
                        countDown--;
                    } else {
                        popError = true;
                    }
                } else {
                    popError = true;
                }
            }
            if (popError) {
                cerrAndLog("\nError: when reading population of origin for each individual from file (using the popCol_on=true option) the data file must contain a population value on the first row of each individual, or alternatively the same population value for all rows of an individual\n", globals.outputLog_on, globals.outputLog_fileStream);
                exit(1);
            }
        }
    }
    
    // find all unique alleles, and count number of missing values
    globals.J = vector<int>(globals.loci);
    globals.uniqueAlleles = vector< vector<string> >(globals.loci,vector<string>());
    int missingDataCount = 0;
    for (int j=0; j<globals.loci; j++) {
        for (int i=0; i<int(rawData.size()); i++) {
            if (rawData[i][j]==globals.missingData) {
                missingDataCount++;
            } else {
                if (find(globals.uniqueAlleles[j].begin(), globals.uniqueAlleles[j].end(), rawData[i][j]) == globals.uniqueAlleles[j].end()) {
                    globals.uniqueAlleles[j].push_back(rawData[i][j]);
                }
            }
        }
        globals.J[j] = int(globals.uniqueAlleles[j].size());
    }
    
    // reformat data into simple list: data[individual][locus][gene copy]. Recode values to simple list of integers, with 0 meaning missing data. Keep record of missing data elements in data_missing (1=missing, 0=present). Store indLabels_vec, pop_vec, ploidy_vec and missing_vec values.
    countDown=0;
    int ind=-1, gene_copy=0;
    for (int i=0; i<int(rawEntries.size()); i++) {
        // if new individual
        if (countDown==0) {
            ind++;
            globals.indLabels_vec.push_back(indLabels_raw[i]);
            if (globals.popCol_on) {
                globals.pop_vec.push_back(pop_raw[i]);
            } else {
                globals.pop_vec.push_back("NA");
            }
            globals.ploidy_vec.push_back(ploidy_raw_int[i]);
            globals.missing_vec.push_back(0);
            countDown = globals.ploidy_vec[ind]-1;
            gene_copy = 0;
            
            globals.data.push_back(vector< vector<int> >(globals.loci,vector<int>(globals.ploidy_vec[ind])));
            for (int l=0; l<globals.loci; l++) {
                if (rawData[i][l]==globals.missingData) {
                    globals.data[ind][l][gene_copy] = 0;
                    globals.missing_vec[ind]++;
                } else {
                    globals.data[ind][l][gene_copy] = whichFirst(globals.uniqueAlleles[l],rawData[i][l])+1;
                }
            }
        // if not new individual
        } else {
            countDown--;
            gene_copy++;
            for (int l=0; l<globals.loci; l++) {
                if (rawData[i][l]==globals.missingData) {
                    globals.data[ind][l][gene_copy] = 0;
                    globals.missing_vec[ind]++;
                } else {
                    globals.data[ind][l][gene_copy] = whichFirst(globals.uniqueAlleles[l],rawData[i][l])+1;
                }
            }
        }
    }
    
    // finally define number of individuals and gene copies
    globals.n = int(globals.indLabels_vec.size());
    globals.geneCopies = sum(globals.ploidy_vec)*globals.loci;
    
    // check that there is at least one allele at every locus
    for (int l=0; l<globals.loci; l++) {
        bool tmp = true;
        for (int i=0; i<globals.n; i++) {
            for (int p=0; p<globals.ploidy_vec[i]; p++) {
                if (globals.data[i][l][p]!=0)
                    tmp = false;
            }
        }
        if (tmp) {
            coutAndLog("\nError: there must be at least one non-missing observation at every locus\n", globals.outputLog_on, globals.outputLog_fileStream);
            exit(1);
        }
    }
    
    // find number of unique populations and store pop index of each individual
    if (globals.popCol_on) {
        globals.pop_index = vector<int>(globals.n);
        for (int i=0; i<globals.n; i++) {
            if (find(globals.uniquePops.begin(), globals.uniquePops.end(), globals.pop_vec[i]) == globals.uniquePops.end()) {
                globals.uniquePops.push_back(globals.pop_vec[i]);
                globals.pop_index[i] = int(globals.uniquePops.size())-1;
            } else {
                globals.pop_index[i] = int(find(globals.uniquePops.begin(), globals.uniquePops.end(), globals.pop_vec[i]) - globals.uniquePops.begin());
            }
        }
        globals.uniquePop_counts = vector<int>(globals.uniquePops.size());
        for (int i=0; i<globals.n; i++) {
            globals.uniquePop_counts[globals.pop_index[i]]++;
        }
    }
    
    // print basic properties to screen and file
    if (globals.popCol_on)
        coutAndLog("  unique populations = "+to_string((long long)globals.uniquePops.size())+string("\n"), globals.outputLog_on, globals.outputLog_fileStream);
    
    coutAndLog("  individuals = "+to_string((long long)globals.n)+string("\n"), globals.outputLog_on, globals.outputLog_fileStream);
    coutAndLog("  loci = "+to_string((long long)globals.loci)+string("\n"), globals.outputLog_on, globals.outputLog_fileStream);
    
    stringstream alleles;
    alleles << "  alleles per locus = {" << globals.J[0];
    for (int l=1; l<globals.loci; l++) {
        alleles << "," << globals.J[l];
    }
    alleles << "}\n";
    coutAndLog(alleles.str(), globals.outputLog_on, globals.outputLog_fileStream);
    
    coutAndLog("  missing observations = "+to_string((long long)missingDataCount)+string(" of ")+to_string((long long)sum(globals.ploidy_vec)*globals.loci)+string("\n\n"), globals.outputLog_on, globals.outputLog_fileStream);    
    
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x888, %rsp            # imm = 0x888
movq %rdi, %r14
movq 0x165d4(%rip), %rdi     # 0x40fb8
leaq 0xcc5e(%rip), %rsi      # 0x37649
movl $0x15, %edx
callq 0x3390
leaq 0x688(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xcc57(%rip), %rsi      # 0x3765f
leaq 0xcc60(%rip), %rdx      # 0x3766f
leaq 0x678(%rsp), %rdi
callq 0x6d9c
leaq 0x970(%r14), %r12
movq %r14, 0x8(%rsp)
cmpb $0x1, 0x2c3c(%r14)
jne 0x2aa52
movq 0x678(%rsp), %rsi
movq 0x680(%rsp), %rdx
movq %r12, %rdi
callq 0x3390
movq %r12, %rdi
callq 0x31f0
movq 0x678(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2aa64
callq 0x3310
leaq 0x878(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x8(%rsp), %r14
movq 0x2e0(%r14), %rsi
movq 0x2e8(%r14), %rdx
addq %rsi, %rdx
leaq 0x868(%rsp), %rbx
movq %rbx, %rdi
callq 0xbb9a
movzbl 0x2c3c(%r14), %edx
leaq 0x410(%rsp), %rdi
movq %rbx, %rsi
movq %r12, %rcx
callq 0x1d84b
addq $0x768, %r14            # imm = 0x768
leaq 0x410(%rsp), %rsi
movq %r14, %rdi
callq 0x34c0
movq %r12, 0x40(%rsp)
leaq 0x410(%rsp), %rdi
callq 0x30b0
movq 0x868(%rsp), %rdi
cmpq %r15, %rdi
je 0x2aaec
callq 0x3310
xorl %r15d, %r15d
leaq 0x60(%rsp), %rax
movq %r15, 0x10(%rax)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rax)
leaq 0x1d0(%rsp), %rax
movq %r15, 0x10(%rax)
movapd %xmm0, (%rax)
leaq 0x280(%rsp), %rax
movq %rax, -0x10(%rax)
movq %r15, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x2a0(%rsp), %rbx
leaq 0x10(%rsp), %r13
leaq 0x290(%rsp), %rbp
leaq 0x78(%rsp), %r12
movl %r15d, 0x38(%rsp)
leaq 0x270(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
callq 0x1dc11
movq 0x8(%rsp), %rcx
movq 0x768(%rcx), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x788(%rcx,%rax)
jne 0x2ad00
cmpq $0x0, 0x278(%rsp)
je 0x2ab4a
cmpl $0x0, 0x38(%rsp)
je 0x2ace3
movq 0x1d0(%rsp), %rax
movq 0x1d8(%rsp), %r15
cmpq %rax, %r15
je 0x2abd5
movq %rax, 0x48(%rsp)
movq %rax, %rbx
movq (%rbx), %rdi
addq $0x10, %rbx
cmpq %rbx, %rdi
je 0x2abb7
callq 0x3310
addq $0x10, %rbx
cmpq %r15, %rbx
jne 0x2aba6
movq 0x48(%rsp), %rax
movq %rax, 0x1d8(%rsp)
leaq 0x2a0(%rsp), %rbx
leaq 0x410(%rsp), %rdi
leaq 0x270(%rsp), %rsi
movl $0x8, %edx
callq 0x34f0
movl 0x38(%rsp), %eax
movl %eax, %r15d
incl %r15d
leaq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq $0x0, 0x18(%rsp)
movb $0x0, 0x20(%rsp)
leaq 0x410(%rsp), %rdi
movq %r13, %rsi
movl $0x9, %edx
callq 0x35c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2ac97
movq %rbp, %rdi
movq %r13, %rsi
movl $0x8, %edx
callq 0x34f0
movq %r12, %rdi
movq %rbx, %rsi
callq 0x3490
movq %rbp, %rdi
movq 0x1634f(%rip), %rsi     # 0x40fa8
callq 0x3420
leaq 0x308(%rsp), %rdi
callq 0x30f0
leaq 0x1d0(%rsp), %rdi
movq %r12, %rsi
callq 0x2e2da
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x2ac11
callq 0x3310
jmp 0x2ac11
leaq 0x60(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x2e3ac
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2acbd
callq 0x3310
leaq 0x410(%rsp), %rdi
movq 0x162dc(%rip), %rsi     # 0x40fa8
callq 0x3420
leaq 0x488(%rsp), %rdi
callq 0x30f0
jmp 0x2ab3d
movl $0x1, %r15d
movq 0x8(%rsp), %rax
cmpb $0x0, 0x2ba0(%rax)
jne 0x2ab3d
jmp 0x2ab89
movq %r14, %rdi
callq 0x3090
movq 0x60(%rsp), %rdx
movq 0x68(%rsp), %rax
subq %rdx, %rax
movq 0x40(%rsp), %r12
je 0x2d1d4
shrq $0x3, %rax
imull $0xaaaaaaab, %eax, %ecx # imm = 0xAAAAAAAB
leaq 0x8(%rdx), %rsi
movq 0x8(%rdx), %rax
subq (%rdx), %rax
shrq $0x5, %rax
movslq %eax, %rbx
xorl %edx, %edx
testl %ecx, %ecx
cmovlel %edx, %ecx
cmpq %rdx, %rcx
je 0x2aeca
movq (%rsi), %rdi
subq -0x8(%rsi), %rdi
incq %rdx
sarq $0x5, %rdi
addq $0x18, %rsi
cmpq %rbx, %rdi
je 0x2ad43
movq 0x8(%rsp), %rax
cmpb $0x0, 0x2ba0(%rax)
leal 0x1(%rdx), %eax
cmoveq %rdx, %rax
movl %eax, %esi
leaq 0x78(%rsp), %rdi
callq 0x6c6c
leaq 0xc90e(%rip), %rsi      # 0x37697
leaq 0x10(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x6bfc
leaq 0x200(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0xc8f9(%rip), %rsi      # 0x376a4
leaq 0xc911(%rip), %rdx      # 0x376c3
leaq 0x1f0(%rsp), %rdi
callq 0x6d9c
leaq 0x290(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x1f0(%rsp), %rdx
callq 0x6b54
leaq 0xe8(%rsp), %rdi
movq %rbx, %rsi
callq 0x6c6c
leaq 0x410(%rsp), %rdi
leaq 0x290(%rsp), %rsi
leaq 0xe8(%rsp), %rdx
callq 0x6b54
leaq 0xd8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xc8ab(%rip), %rsi      # 0x376c4
leaq 0xc8ad(%rip), %rdx      # 0x376cd
leaq 0xc8(%rsp), %rdi
callq 0x6d9c
leaq 0x848(%rsp), %rdi
leaq 0x410(%rsp), %rsi
leaq 0xc8(%rsp), %rdx
callq 0x6b54
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x848(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x848(%rsp), %rdi
callq 0x3150
leaq 0xc8(%rsp), %rdi
callq 0x3150
leaq 0x410(%rsp), %rdi
callq 0x3150
leaq 0xe8(%rsp), %rdi
callq 0x3150
leaq 0x290(%rsp), %rdi
callq 0x3150
leaq 0x1f0(%rsp), %rdi
callq 0x3150
leaq 0x10(%rsp), %rdi
callq 0x3150
leaq 0x78(%rsp), %rdi
jmp 0x2d1c5
movq 0x8(%rsp), %rdx
movzbl 0x2ba1(%rdx), %ecx
movzbl 0x2ba2(%rdx), %r14d
movq %rcx, 0x38(%rsp)
addl %r14d, %ecx
addl $0x2, %ecx
cmpl %eax, %ecx
jg 0x2d223
cmpb $0x1, 0x2ba0(%rdx)
jne 0x2af4f
leaq 0x798(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xc80b(%rip), %rsi      # 0x37718
leaq 0xc81a(%rip), %rdx      # 0x3772e
leaq 0x788(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x788(%rsp), %rdi
movq %r12, %rdx
callq 0x1d7c5
movq 0x788(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2af4f
callq 0x3310
leaq 0x778(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xc7cd(%rip), %rsi      # 0x3772f
leaq 0xc7e5(%rip), %rdx      # 0x3774e
leaq 0x768(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x768(%rsp), %rdi
movq %r12, %rdx
callq 0x1d7c5
movq 0x768(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2afa4
callq 0x3310
cmpq $0x0, 0x38(%rsp)
leaq 0x2a0(%rsp), %rbx
je 0x2b112
leaq 0x290(%rsp), %rdi
movq %rbx, (%rdi)
movl $0x1, %esi
movl $0x2d, %edx
callq 0x33a0
leaq 0x290(%rsp), %rbx
movq (%rbx), %rdi
movl $0x2, %edx
movl $0x1, %esi
callq 0x6d20
leaq 0xc75c(%rip), %rcx      # 0x3774f
movl $0x9, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x420(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2b035
movq %rdx, 0x410(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x420(%rsp)
jmp 0x2b03d
movupd (%rcx), %xmm0
movupd %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x410(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xc6f6(%rip), %rsi      # 0x37759
callq 0x35e0
leaq 0x668(%rsp), %r15
movq %r15, -0x10(%r15)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2b098
movq %rdx, 0x658(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x668(%rsp)
jmp 0x2b0a1
movupd (%rcx), %xmm0
movupd %xmm0, (%r15)
movq 0x8(%rax), %rdx
leaq 0x658(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
movq %r12, %rdx
callq 0x1d7c5
movq 0x658(%rsp), %rdi
cmpq %r15, %rdi
je 0x2b0e6
callq 0x3310
movq 0x410(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2b0f8
callq 0x3310
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rbx
cmpq %rbx, %rdi
je 0x2b112
callq 0x3310
movzbl %r14b, %r14d
leal -0x1(%r14), %eax
movq 0x38(%rsp), %rcx
leal 0x1(%rcx), %r15d
orl %eax, %r15d
cmpl $-0x1, %r15d
je 0x2b28d
leaq 0x290(%rsp), %rdi
movq %rbx, (%rdi)
movl $0x1, %esi
movl $0x2d, %edx
callq 0x33a0
leal 0x1(%r15), %edx
leaq 0x290(%rsp), %rbx
movq (%rbx), %rdi
movl $0x1, %esi
callq 0x6d20
leaq 0xc5e5(%rip), %rcx      # 0x3774f
movl $0x9, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x420(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2b1ac
movq %rdx, 0x410(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x420(%rsp)
jmp 0x2b1b4
movupd (%rcx), %xmm0
movupd %xmm0, (%rbx)
movq 0x8(%rax), %rdx
leaq 0x410(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xc598(%rip), %rsi      # 0x37772
callq 0x35e0
leaq 0x648(%rsp), %r12
movq %r12, -0x10(%r12)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x2b210
movq %rdx, 0x638(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x648(%rsp)
jmp 0x2b21a
movupd (%rcx), %xmm0
movupd %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x638(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
movq 0x40(%rsp), %rdx
callq 0x1d7c5
movq 0x638(%rsp), %rdi
cmpq %r12, %rdi
je 0x2b261
callq 0x3310
movq 0x410(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2b273
callq 0x3310
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
je 0x2b28d
callq 0x3310
movq 0x38(%rsp), %rax
addq %rax, %r14
incq %r14
xorpd %xmm0, %xmm0
leaq 0x620(%rsp), %rax
movapd %xmm0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x10(%rax)
leaq 0x210(%rsp), %rax
movq %rcx, 0x10(%rax)
movapd %xmm0, (%rax)
leaq 0x1b0(%rsp), %rax
movq %rcx, 0x10(%rax)
movapd %xmm0, (%rax)
leaq 0xa0(%rsp), %rax
movq %rcx, 0x10(%rax)
movapd %xmm0, (%rax)
leaq 0x190(%rsp), %rax
movq $0x0, 0x48(%rsp)
movq %rcx, 0x10(%rax)
movapd %xmm0, (%rax)
movq 0x60(%rsp), %rax
movl %r15d, %r15d
movq %r15, %r13
shlq $0x5, %r13
movq 0x190(%rsp), %rbx
movq 0x198(%rsp), %r12
cmpq %rbx, %r12
je 0x2b346
movq %rbx, %rbp
movq (%rbp), %rdi
addq $0x10, %rbp
cmpq %rbp, %rdi
je 0x2b330
callq 0x3310
addq $0x10, %rbp
cmpq %r12, %rbp
jne 0x2b31e
movq %rbx, 0x198(%rsp)
movq 0x60(%rsp), %rax
movq 0x48(%rsp), %rcx
leaq (%rcx,%rcx,2), %r12
movq (%rax,%r12,8), %rsi
movq 0x8(%rax,%r12,8), %rcx
subq %rsi, %rcx
shrq $0x5, %rcx
testl %ecx, %ecx
jle 0x2b40b
xorl %ebp, %ebp
xorl %ebx, %ebx
testq %rbx, %rbx
je 0x2b39a
movq 0x38(%rsp), %rcx
xorb $0x1, %cl
cmpq $0x1, %rbx
setne %dl
orb %cl, %dl
jne 0x2b3ac
movq (%rax,%r12,8), %rsi
addq $0x20, %rsi
leaq 0x210(%rsp), %rdi
callq 0x2e2da
jmp 0x2b3a7
leaq 0x620(%rsp), %rdi
callq 0x2e2da
movq 0x60(%rsp), %rax
cmpq %rbx, %r15
jne 0x2b3ca
movq (%rax,%r12,8), %rsi
addq %r13, %rsi
leaq 0x1b0(%rsp), %rdi
callq 0x2e2da
movq 0x60(%rsp), %rax
cmpq %r14, %rbx
jb 0x2b3e8
movq (%rax,%r12,8), %rsi
addq %rbp, %rsi
leaq 0x190(%rsp), %rdi
callq 0x2e2da
movq 0x60(%rsp), %rax
incq %rbx
movq (%rax,%r12,8), %rsi
movq 0x8(%rax,%r12,8), %rcx
subq %rsi, %rcx
shrq $0x5, %rcx
movslq %ecx, %rcx
addq $0x20, %rbp
cmpq %rcx, %rbx
jl 0x2b36b
leaq 0xa0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x2e3ac
movq 0x48(%rsp), %rdi
incq %rdi
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %rsi
subq %rax, %rsi
sarq $0x3, %rsi
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rsi
movslq %esi, %rcx
movq %rdi, 0x48(%rsp)
cmpq %rcx, %rdi
jl 0x2b306
movq 0xa0(%rsp), %rax
movq 0x8(%rax), %rcx
subq (%rax), %rcx
shrq $0x5, %rcx
movq 0x8(%rsp), %rbx
movl %ecx, 0x2d1c(%rbx)
leaq 0x2ba4(%rbx), %rdx
leaq 0x228(%rsp), %rdi
leaq 0x410(%rsp), %rcx
callq 0xe8e0
cmpb $0x1, 0x2ba2(%rbx)
jne 0x2b594
movq 0x1b0(%rsp), %rsi
movq 0x1b8(%rsp), %rax
subq %rsi, %rax
shrq $0x5, %rax
testl %eax, %eax
jle 0x2b594
leaq 0x488(%rsp), %rbx
xorl %r15d, %r15d
leaq 0x410(%rsp), %r14
leaq 0x290(%rsp), %r12
movq 0x15ac8(%rip), %r13     # 0x40fa8
xorl %ebp, %ebp
movq $0x0, 0x290(%rsp)
addq %r15, %rsi
movq %r14, %rdi
movl $0x8, %edx
callq 0x34f0
movq %r14, %rdi
movq %r12, %rsi
callq 0x31e0
movq %r14, %rdi
movq %r13, %rsi
callq 0x3420
movq %rbx, %rdi
callq 0x30f0
movsd 0x290(%rsp), %xmm0
callq 0x1a730
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
movsd 0x290(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jne 0x2d129
jp 0x2d129
callq 0x1a730
testl %eax, %eax
js 0x2d129
cvttsd2si 0x290(%rsp), %eax
movq 0x228(%rsp), %rcx
movl %eax, (%rcx,%rbp,4)
incq %rbp
movq 0x1b0(%rsp), %rsi
movq 0x1b8(%rsp), %rax
subq %rsi, %rax
shrq $0x5, %rax
cltq
addq $0x20, %r15
cmpq %rax, %rbp
jl 0x2b4e2
movq 0x68(%rsp), %rax
subq 0x60(%rsp), %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rax
testl %eax, %eax
jle 0x2b759
movq 0x228(%rsp), %rcx
movl %eax, %edx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
xorl %esi, %esi
xorl %edi, %edi
xorl %r8d, %r8d
xorl %r10d, %r10d
movq 0x8(%rsp), %rbx
movl (%rcx,%rsi,4), %r9d
testl %r8d, %r8d
je 0x2b600
testl %r9d, %r9d
je 0x2b60d
cmpl %r10d, %r9d
jne 0x2d0d7
movl %r10d, %r9d
andl $-0x3, %edi
movl $0x2, %edi
je 0x2b61e
jmp 0x2d0d7
movl %r9d, %r8d
testl %r9d, %r9d
jne 0x2b61e
jmp 0x2d0d7
movl %r10d, %r9d
cmpl $0x2, %edi
movl $0x1, %edi
jae 0x2d0d7
decl %r8d
incq %rsi
movl %r9d, %r10d
cmpq %rsi, %rdx
jne 0x2b5d7
testl %r8d, %r8d
jne 0x2d2d7
cmpb $0x0, 0x2ba1(%rbx)
je 0x2b765
leaq 0x420(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq $0x0, -0x8(%rcx)
movb $0x0, (%rcx)
testl %eax, %eax
jle 0x2b765
xorl %r12d, %r12d
leaq 0x410(%rsp), %rbx
leaq 0xb2b0(%rip), %r14      # 0x36923
xorl %r13d, %r13d
xorl %ebp, %ebp
xorl %r15d, %r15d
movq 0x210(%rsp), %rsi
addq %r12, %rsi
testl %r15d, %r15d
je 0x2b6d2
movq %rsi, %rdi
movq %r14, %rsi
callq 0x30d0
testl %eax, %eax
je 0x2b6e8
movq 0x210(%rsp), %rax
movq 0x8(%rax,%r12), %rdx
cmpq 0x418(%rsp), %rdx
jne 0x2d178
testq %rdx, %rdx
je 0x2b6f7
movq 0x410(%rsp), %rsi
movq (%rax,%r12), %rdi
callq 0x3350
testl %eax, %eax
sete %al
jmp 0x2b6f9
movq %rbx, %rdi
callq 0x31c0
movq 0x228(%rsp), %rax
movl (%rax,%r13,4), %r15d
jmp 0x2b70f
cmpl $0x2, %ebp
movl $0x1, %ebp
jb 0x2b70f
jmp 0x2d178
movb $0x1, %al
testb %al, %al
je 0x2d178
andl $-0x3, %ebp
movl $0x2, %ebp
jne 0x2d178
decl %r15d
incq %r13
movq 0x68(%rsp), %rax
subq 0x60(%rsp), %rax
shrq $0x3, %rax
imull $0xaaaaaaab, %eax, %eax # imm = 0xAAAAAAAB
cltq
addq $0x20, %r12
cmpq %rax, %r13
jl 0x2b67b
movq 0x410(%rsp), %rdi
leaq 0x420(%rsp), %rax
cmpq %rax, %rdi
movq 0x8(%rsp), %rbx
je 0x2b765
callq 0x3310
jmp 0x2b765
movq 0x8(%rsp), %rbx
cmpb $0x1, 0x2ba1(%rbx)
movslq 0x2d1c(%rbx), %rsi
leaq 0x410(%rsp), %rdi
leaq 0x290(%rsp), %rdx
callq 0x6a48
movq 0x2d20(%rbx), %rdi
movapd 0x410(%rsp), %xmm0
movupd %xmm0, 0x2d20(%rbx)
movq 0x420(%rsp), %rax
movq %rax, 0x2d30(%rbx)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x410(%rsp)
movq $0x0, 0x420(%rsp)
testq %rdi, %rdi
je 0x2b7dd
callq 0x3310
movq 0x410(%rsp), %rdi
testq %rdi, %rdi
je 0x2b7dd
callq 0x3310
movslq 0x2d1c(%rbx), %rsi
leaq 0x10(%rsp), %rdx
xorpd %xmm0, %xmm0
movapd %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x290(%rsp), %rdi
leaq 0x78(%rsp), %rcx
callq 0x2e3d8
movq 0x2d48(%rbx), %rax
leaq 0x290(%rsp), %rbx
movapd (%rbx), %xmm0
movq 0x10(%rbx), %rcx
movq 0x8(%rsp), %rdx
movq %rcx, 0x2d48(%rdx)
movq 0x8(%rsp), %rcx
movupd 0x2d38(%rcx), %xmm1
movq 0x8(%rsp), %rcx
movupd %xmm0, 0x2d38(%rcx)
leaq 0x410(%rsp), %rdi
movapd %xmm1, (%rdi)
movq %rax, 0x10(%rdi)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rbx)
movq $0x0, 0x10(%rbx)
callq 0x1487a
movq %rbx, %rdi
movq 0x8(%rsp), %rbx
callq 0x1487a
leaq 0x10(%rsp), %rdi
callq 0xb43c
movl 0x2d1c(%rbx), %eax
testl %eax, %eax
jle 0x2b9f5
movq $0x0, 0x50(%rsp)
movq 0xa0(%rsp), %r15
movq 0xa8(%rsp), %rcx
xorl %r13d, %r13d
movq %rcx, %rax
subq %r15, %rax
shrq $0x3, %rax
imull $0xaaaaaaab, %eax, %eax # imm = 0xAAAAAAAB
leaq (,%r13,2), %r8
addq %r13, %r8
testl %eax, %eax
movq %r13, 0x48(%rsp)
jle 0x2b9af
shlq $0x5, %r13
xorl %ebp, %ebp
xorl %r14d, %r14d
movq %r8, 0x38(%rsp)
movq (%r15,%rbp), %r12
movq 0x8(%r12,%r13), %rdx
addq %r13, %r12
cmpq 0x2bb0(%rbx), %rdx
jne 0x2b91c
testq %rdx, %rdx
je 0x2b974
movq 0x8(%rsp), %rax
movq 0x2ba8(%rax), %rsi
movq (%r12), %rdi
callq 0x3350
movq 0x38(%rsp), %r8
testl %eax, %eax
je 0x2b974
movq 0x8(%rsp), %rbx
movq 0x2d38(%rbx), %rax
movq (%rax,%r8,8), %rdi
movq 0x8(%rax,%r8,8), %rsi
movq %r12, %rdx
movq %r8, %r12
callq 0x2eaf2
movq 0x2d38(%rbx), %rcx
movq 0xa0(%rsp), %r15
cmpq 0x8(%rcx,%r12,8), %rax
movq %r12, %r8
jne 0x2b985
leaq (%rcx,%r8,8), %rdi
movq (%r15,%rbp), %rsi
addq %r13, %rsi
callq 0x2e2da
movq 0xa0(%rsp), %r15
movq 0x38(%rsp), %r8
jmp 0x2b985
movq 0x50(%rsp), %rax
incl %eax
movq %rax, 0x50(%rsp)
movq 0x8(%rsp), %rbx
incq %r14
movq 0xa8(%rsp), %rcx
movq %rcx, %rax
subq %r15, %rax
shrq $0x3, %rax
imull $0xaaaaaaab, %eax, %eax # imm = 0xAAAAAAAB
cltq
addq $0x18, %rbp
cmpq %rax, %r14
jl 0x2b8e4
movq 0x2d20(%rbx), %rax
movq 0x2d38(%rbx), %rdx
movq 0x8(%rdx,%r8,8), %rsi
subq (%rdx,%r8,8), %rsi
shrq $0x5, %rsi
movq 0x48(%rsp), %r13
movl %esi, (%rax,%r13,4)
incq %r13
movslq 0x2d1c(%rbx), %rax
cmpq %rax, %r13
jl 0x2b8ae
movq 0x50(%rsp), %rcx
movslq %ecx, %rcx
movq %rcx, 0x50(%rsp)
jmp 0x2b9fe
movq $0x0, 0x50(%rsp)
movq 0x68(%rsp), %rcx
subq 0x60(%rsp), %rcx
shrq $0x3, %rcx
imull $0xaaaaaaab, %ecx, %ecx # imm = 0xAAAAAAAB
testl %ecx, %ecx
jle 0x2bf4f
leaq 0x2d00(%rbx), %rcx
movq %rcx, 0x38(%rsp)
leaq 0x2ce8(%rbx), %rcx
movq %rcx, 0xb8(%rsp)
leaq 0x2c58(%rbx), %rcx
movq %rcx, 0x248(%rsp)
leaq 0x2c70(%rbx), %rcx
movq %rcx, 0x108(%rsp)
leaq 0x2cd0(%rbx), %rcx
movq %rcx, 0x240(%rsp)
movl $0xffffffff, 0x58(%rsp) # imm = 0xFFFFFFFF
movq $0x0, 0x48(%rsp)
leaq 0x410(%rsp), %r14
leaq 0x290(%rsp), %r15
xorl %edi, %edi
xorl %r12d, %r12d
testl %r12d, %r12d
je 0x2bc28
incl %edi
testl %eax, %eax
jle 0x2bf1f
movl %r12d, 0x5c(%rsp)
movslq 0x58(%rsp), %r15
movl %edi, 0xc4(%rsp)
movslq %edi, %rax
movq %rax, 0x98(%rsp)
movl $0x8, %r14d
xorl %r12d, %r12d
xorl %r13d, %r13d
movq 0xa0(%rsp), %rax
movq %rbx, %rcx
movq 0x48(%rsp), %rdx
leaq (%rdx,%rdx,2), %rbx
movq (%rax,%rbx,8), %rax
movq (%rax,%r14), %rdx
cmpq 0x2bb0(%rcx), %rdx
jne 0x2bb0f
testq %rdx, %rdx
je 0x2bbb5
movq 0x8(%rsp), %rcx
movq 0x2ba8(%rcx), %rsi
movq -0x8(%rax,%r14), %rdi
callq 0x3350
testl %eax, %eax
je 0x2bbb5
movq 0x8(%rsp), %rax
movq 0x2d38(%rax), %rsi
addq %r12, %rsi
leaq 0x698(%rsp), %rdi
callq 0x2e4e0
movq 0xa0(%rsp), %rax
movq (%rax,%rbx,8), %rax
leaq 0x7f8(%rsp), %rbx
movq %rbx, 0x7e8(%rsp)
movq -0x8(%rax,%r14), %rsi
movq (%rax,%r14), %rdx
addq %rsi, %rdx
leaq 0x7e8(%rsp), %rbp
movq %rbp, %rdi
callq 0xbb9a
leaq 0x698(%rsp), %rdi
movq %rbp, %rsi
callq 0x2e468
incl %eax
movq 0x38(%rsp), %rcx
movq (%rcx), %rcx
leaq (%r15,%r15,2), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rcx,%r12), %rcx
movq 0x98(%rsp), %rdx
movl %eax, (%rcx,%rdx,4)
movq 0x7e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2bba6
callq 0x3310
leaq 0x698(%rsp), %rdi
callq 0xb43c
jmp 0x2bbe7
movq 0x38(%rsp), %rax
movq (%rax), %rax
leaq (%r15,%r15,2), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax,%r12), %rax
movq 0x98(%rsp), %rcx
movl $0x0, (%rax,%rcx,4)
movq 0xb8(%rsp), %rax
movq (%rax), %rax
incl (%rax,%r15,4)
movq 0x8(%rsp), %rbx
incq %r13
movslq 0x2d1c(%rbx), %rax
addq $0x20, %r14
addq $0x18, %r12
cmpq %rax, %r13
jl 0x2bac3
leaq 0x410(%rsp), %r14
leaq 0x290(%rsp), %r15
movl 0x5c(%rsp), %r12d
movl 0xc4(%rsp), %edi
jmp 0x2bf1f
movq 0x48(%rsp), %rbp
shlq $0x5, %rbp
movq 0x620(%rsp), %rsi
addq %rbp, %rsi
movq 0x248(%rsp), %rdi
callq 0x2e2da
cmpb $0x1, 0x2ba1(%rbx)
jne 0x2bc6c
addq 0x210(%rsp), %rbp
movq 0x108(%rsp), %rdi
movq %rbp, %rsi
callq 0x2e2da
jmp 0x2bcbc
leaq 0x420(%rsp), %rax
movq %rax, 0x410(%rsp)
movq %r14, %rdi
leaq 0xcdad(%rip), %rsi      # 0x38a33
leaq 0xcda8(%rip), %rdx      # 0x38a35
callq 0x6d9c
movq 0x108(%rsp), %rdi
movq %r14, %rsi
callq 0x2ec1a
movq 0x410(%rsp), %rdi
leaq 0x420(%rsp), %rax
cmpq %rax, %rdi
je 0x2bcbc
callq 0x3310
movq 0x48(%rsp), %rax
leaq (,%rax,4), %rdx
addq 0x228(%rsp), %rdx
movq 0x2cd8(%rbx), %rsi
cmpq 0x2ce0(%rbx), %rsi
je 0x2bcf2
movl (%rdx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x2cd8(%rbx)
jmp 0x2bcff
movq 0x240(%rsp), %rdi
callq 0x6e4e
movl $0x0, 0x410(%rsp)
movq 0x2cf0(%rbx), %rsi
cmpq 0x2cf8(%rbx), %rsi
je 0x2bd2d
movl $0x0, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x2cf0(%rbx)
jmp 0x2bd3d
movq 0xb8(%rsp), %rdi
movq %r14, %rdx
callq 0x1cf86
movl 0x58(%rsp), %eax
incl %eax
movl %eax, 0x58(%rsp)
movslq %eax, %rcx
movq 0x2cd0(%rbx), %rax
movq %rcx, 0x98(%rsp)
movl (%rax,%rcx,4), %r12d
movslq 0x2d1c(%rbx), %rbp
movslq %r12d, %rsi
movq %r15, %rdi
leaq 0x10(%rsp), %rdx
callq 0x6a48
movq %r14, %rdi
movq %rbp, %rsi
movq %r15, %rdx
leaq 0x78(%rsp), %rcx
callq 0xb3ac
movq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x2ee1c
movq %r14, %rdi
callq 0xb366
movq 0x290(%rsp), %rdi
testq %rdi, %rdi
je 0x2bdae
callq 0x3310
movl 0x2d1c(%rbx), %eax
xorl %edi, %edi
testl %eax, %eax
jle 0x2bf1f
movl %r12d, 0x5c(%rsp)
movl $0x8, %ebp
movq 0x48(%rsp), %rax
leaq (%rax,%rax,2), %r14
xorl %r12d, %r12d
xorl %r13d, %r13d
movq 0xa0(%rsp), %rax
movq (%rax,%r14,8), %rax
movq (%rax,%rbp), %rdx
cmpq 0x2bb0(%rbx), %rdx
jne 0x2be12
testq %rdx, %rdx
je 0x2bebd
movq 0x2ba8(%rbx), %rsi
movq -0x8(%rax,%rbp), %rdi
callq 0x3350
testl %eax, %eax
je 0x2bebd
movq 0x2d38(%rbx), %rsi
addq %r12, %rsi
leaq 0x6b0(%rsp), %rdi
callq 0x2e4e0
movq 0xa0(%rsp), %rax
movq %r14, %rbx
movq (%rax,%r14,8), %rax
leaq 0x818(%rsp), %r15
movq %r15, 0x808(%rsp)
movq -0x8(%rax,%rbp), %rsi
movq (%rax,%rbp), %rdx
addq %rsi, %rdx
leaq 0x808(%rsp), %r14
movq %r14, %rdi
callq 0xbb9a
leaq 0x6b0(%rsp), %rdi
movq %r14, %rsi
callq 0x2e468
incl %eax
movq 0x38(%rsp), %rcx
movq (%rcx), %rcx
movq 0x98(%rsp), %rdx
leaq (%rdx,%rdx,2), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rcx,%r12), %rcx
movl %eax, (%rcx)
movq 0x808(%rsp), %rdi
cmpq %r15, %rdi
je 0x2bea6
callq 0x3310
leaq 0x6b0(%rsp), %rdi
callq 0xb43c
movq %rbx, %r14
movq 0x8(%rsp), %rbx
jmp 0x2beed
movq 0x38(%rsp), %rax
movq (%rax), %rax
movq 0x98(%rsp), %rdx
leaq (%rdx,%rdx,2), %rcx
movq (%rax,%rcx,8), %rax
movq (%rax,%r12), %rax
movl $0x0, (%rax)
movq 0xb8(%rsp), %rax
movq (%rax), %rax
incl (%rax,%rdx,4)
incq %r13
movslq 0x2d1c(%rbx), %rax
addq $0x20, %rbp
addq $0x18, %r12
cmpq %rax, %r13
jl 0x2bdd7
leaq 0x410(%rsp), %r14
leaq 0x290(%rsp), %r15
movl 0x5c(%rsp), %r12d
xorl %edi, %edi
decl %r12d
movq 0x48(%rsp), %rsi
incq %rsi
movq 0x68(%rsp), %rcx
subq 0x60(%rsp), %rcx
shrq $0x3, %rcx
imull $0xaaaaaaab, %ecx, %ecx # imm = 0xAAAAAAAB
movslq %ecx, %rcx
movq %rsi, 0x48(%rsp)
cmpq %rcx, %rsi
jl 0x2ba88
movq 0x2c60(%rbx), %rcx
movq 0x2cd0(%rbx), %rdx
subq 0x2c58(%rbx), %rcx
shrq $0x5, %rcx
movl %ecx, 0x2d18(%rbx)
movq 0x2cd8(%rbx), %rsi
subq %rdx, %rsi
shrq $0x2, %rsi
testl %esi, %esi
jle 0x2bf99
andl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
xorl %r8d, %r8d
xorl %edi, %edi
addl (%rdx,%r8,4), %edi
incq %r8
cmpq %r8, %rsi
jne 0x2bf8b
jmp 0x2bf9b
xorl %edi, %edi
imull %eax, %edi
movl %edi, 0x2d50(%rbx)
testl %eax, %eax
jle 0x2c019
movq 0x2d00(%rbx), %rsi
movl %eax, %eax
movl %ecx, %edi
andl $0x7fffffff, %edi       # imm = 0x7FFFFFFF
xorl %r8d, %r8d
testl %ecx, %ecx
jle 0x2d085
movb $0x1, %r9b
leaq (%r8,%r8,2), %r10
xorl %r11d, %r11d
movslq (%rdx,%r11,4), %rbx
testq %rbx, %rbx
jle 0x2bffa
leaq (%r11,%r11,2), %r14
movq (%rsi,%r14,8), %r14
movq (%r14,%r10,8), %r14
xorl %r15d, %r15d
cmpl $0x0, (%r14,%r15,4)
sete %bpl
andb %bpl, %r9b
incq %r15
cmpq %r15, %rbx
jne 0x2bfe6
incq %r11
cmpq %rdi, %r11
jne 0x2bfce
testb $0x1, %r9b
jne 0x2d085
incq %r8
cmpq %rax, %r8
movq 0x8(%rsp), %rbx
jne 0x2bfbc
cmpb $0x0, 0x2ba1(%rbx)
je 0x2c21b
movslq %ecx, %rsi
leaq 0x410(%rsp), %rdi
leaq 0x290(%rsp), %rdx
callq 0x6a48
movq 0x2cb8(%rbx), %rdi
movapd 0x410(%rsp), %xmm0
movupd %xmm0, 0x2cb8(%rbx)
movq 0x420(%rsp), %rax
movq %rax, 0x2cc8(%rbx)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x410(%rsp)
movq $0x0, 0x420(%rsp)
testq %rdi, %rdi
je 0x2c09a
callq 0x3310
movq 0x410(%rsp), %rdi
testq %rdi, %rdi
je 0x2c09a
callq 0x3310
movq %rbx, %r12
addq $0x2c88, %rbx           # imm = 0x2C88
cmpl $0x0, 0x2d18(%r12)
jle 0x2c161
movq 0x2c88(%r12), %rdi
xorl %r14d, %r14d
xorl %r15d, %r15d
movq 0x2c90(%r12), %rsi
movq 0x2c70(%r12), %rdx
addq %r14, %rdx
callq 0x2eaf2
movq 0x2c90(%r12), %rsi
cmpq %rsi, %rax
je 0x2c10f
movq 0x2c88(%r12), %rdi
movq 0x2c70(%r12), %rdx
addq %r14, %rdx
callq 0x2eaf2
movq (%rbx), %rdi
subq %rdi, %rax
shrq $0x5, %rax
movq 0x8(%rsp), %r12
jmp 0x2c13b
movq 0x2c70(%r12), %rsi
addq %r14, %rsi
movq %rbx, %rdi
callq 0x2e2da
movq 0x2c88(%r12), %rdi
movq 0x2c90(%r12), %rax
subq %rdi, %rax
shrq $0x5, %rax
decl %eax
movq 0x2cb8(%r12), %rcx
movl %eax, (%rcx,%r15,4)
incq %r15
movslq 0x2d18(%r12), %rax
addq $0x20, %r14
cmpq %rax, %r15
jl 0x2c0c1
jmp 0x2c164
movq (%rbx), %rdi
movq 0x2c90(%r12), %rsi
subq %rdi, %rsi
sarq $0x5, %rsi
leaq 0x410(%rsp), %rdi
leaq 0x290(%rsp), %rdx
callq 0x6a48
movq %r12, %rbx
movq 0x2ca0(%r12), %rdi
movapd 0x410(%rsp), %xmm0
movupd %xmm0, 0x2ca0(%r12)
movq 0x420(%rsp), %rax
movq %rax, 0x2cb0(%r12)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x410(%rsp)
movq $0x0, 0x420(%rsp)
testq %rdi, %rdi
je 0x2c1eb
callq 0x3310
movq 0x410(%rsp), %rdi
testq %rdi, %rdi
je 0x2c1eb
callq 0x3310
movl 0x2d18(%rbx), %ecx
testl %ecx, %ecx
jle 0x2c21b
movq 0x2ca0(%rbx), %rax
movq 0x2cb8(%rbx), %rdx
xorl %esi, %esi
movslq (%rdx,%rsi,4), %rcx
incl (%rax,%rcx,4)
incq %rsi
movslq 0x2d18(%rbx), %rcx
cmpq %rcx, %rsi
jl 0x2c205
cmpb $0x1, 0x2ba1(%rbx)
jne 0x2c4aa
movq %rbx, %rax
movq 0x2c90(%rbx), %rbx
subq 0x2c88(%rax), %rbx
sarq $0x5, %rbx
movq %rbx, %r14
negq %r14
cmovsq %rbx, %r14
movl $0x1, %r12d
cmpq $0xa, %r14
jb 0x2c2a7
movl $0x4, %r12d
movabsq $0x346dc5d63886594b, %rsi # imm = 0x346DC5D63886594B
movq %r14, %rcx
cmpq $0x63, %rcx
jbe 0x2c29e
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x2c2a4
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x2c2a7
movq %rcx, %rax
mulq %rsi
shrq $0xb, %rdx
addl $0x4, %r12d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x2c266
addl $-0x3, %r12d
jmp 0x2c2a7
addl $-0x2, %r12d
jmp 0x2c2a7
decl %r12d
shrq $0x3f, %rbx
leal (%rbx,%r12), %esi
leaq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x33a0
leaq 0x290(%rsp), %r13
addq (%r13), %rbx
movq %rbx, %rdi
movl %r12d, %esi
movq %r14, %rdx
callq 0x6d20
leaq 0xb79f(%rip), %rcx      # 0x37a8c
movl $0x17, %r8d
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x420(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x20(%rsp), %r14
movq 0x40(%rsp), %r15
je 0x2c339
movq %rdx, 0x410(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x420(%rsp)
jmp 0x2c341
movupd (%rcx), %xmm0
movupd %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x418(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0xa5b7(%rip), %rsi      # 0x36922
leaq 0xa5b1(%rip), %rdx      # 0x36923
callq 0x6d9c
movq 0x410(%rsp), %rcx
movq 0x418(%rsp), %r8
movq 0x18(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %rbx, %rcx
je 0x2c3a2
movq 0x420(%rsp), %rdi
movq 0x10(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x2c3c0
movl $0xf, %edi
cmpq %r14, %rsi
je 0x2c3bb
movq 0x20(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2c3cf
leaq 0x410(%rsp), %rdi
callq 0x30e0
jmp 0x2c3dd
leaq 0x10(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x180(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x2c40a
movq %rsi, 0x170(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x180(%rsp)
jmp 0x2c412
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x178(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x170(%rsp), %rdi
movq %r15, %rdx
callq 0x1d7c5
leaq 0x180(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2c464
callq 0x3310
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2c473
callq 0x3310
movq 0x410(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2c485
callq 0x3310
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
movq 0x8(%rsp), %rbx
je 0x2c4a4
callq 0x3310
movl 0x2d18(%rbx), %ecx
movslq %ecx, %r14
movq %r14, %rbx
negq %rbx
cmovsq %r14, %rbx
movl $0x1, %r12d
cmpq $0xa, %rbx
jb 0x2c517
movl $0x4, %r12d
movabsq $0x346dc5d63886594b, %rsi # imm = 0x346DC5D63886594B
movq %rbx, %rcx
cmpq $0x63, %rcx
jbe 0x2c50e
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x2c514
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x2c517
movq %rcx, %rax
mulq %rsi
shrq $0xb, %rdx
addl $0x4, %r12d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x2c4d6
addl $-0x3, %r12d
jmp 0x2c517
addl $-0x2, %r12d
jmp 0x2c517
decl %r12d
shrq $0x3f, %r14
leal (%r14,%r12), %esi
leaq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x33a0
leaq 0x290(%rsp), %r13
addq (%r13), %r14
movq %r14, %rdi
movl %r12d, %esi
movq %rbx, %rdx
callq 0x6d20
leaq 0xb547(%rip), %rcx      # 0x37aa4
movl $0x10, %r8d
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x420(%rsp), %rbp
movq %rbp, -0x10(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x2a0(%rsp), %rbx
leaq 0x20(%rsp), %r14
movq 0x40(%rsp), %r15
je 0x2c5b1
movq %rdx, 0x410(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x420(%rsp)
jmp 0x2c5ba
movupd (%rcx), %xmm0
movupd %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rdx, 0x418(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0xa33e(%rip), %rsi      # 0x36922
leaq 0xa338(%rip), %rdx      # 0x36923
callq 0x6d9c
movq 0x410(%rsp), %rcx
movq 0x418(%rsp), %r8
movq 0x18(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %rbp, %rcx
je 0x2c61b
movq 0x420(%rsp), %rdi
movq 0x10(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x2c639
movl $0xf, %edi
cmpq %r14, %rsi
je 0x2c634
movq 0x20(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2c648
leaq 0x410(%rsp), %rdi
callq 0x30e0
jmp 0x2c656
leaq 0x10(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x160(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x2c683
movq %rsi, 0x150(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x160(%rsp)
jmp 0x2c68b
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x158(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x150(%rsp), %rdi
movq %r15, %rdx
callq 0x1d7c5
leaq 0x160(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2c6dd
callq 0x3310
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2c6ec
callq 0x3310
movq 0x410(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2c6fe
callq 0x3310
movq 0x290(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2c710
callq 0x3310
movq 0x8(%rsp), %rax
movslq 0x2d1c(%rax), %r14
movq %r14, %rbx
negq %rbx
cmovsq %r14, %rbx
movl $0x1, %r12d
cmpq $0xa, %rbx
jb 0x2c786
movl $0x4, %r12d
movabsq $0x346dc5d63886594b, %rsi # imm = 0x346DC5D63886594B
movq %rbx, %rcx
cmpq $0x63, %rcx
jbe 0x2c77d
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x2c783
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x2c786
movq %rcx, %rax
mulq %rsi
shrq $0xb, %rdx
addl $0x4, %r12d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x2c745
addl $-0x3, %r12d
jmp 0x2c786
addl $-0x2, %r12d
jmp 0x2c786
decl %r12d
shrq $0x3f, %r14
leal (%r14,%r12), %esi
leaq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
movq %rax, (%rdi)
movl $0x2d, %edx
callq 0x33a0
leaq 0x290(%rsp), %r13
addq (%r13), %r14
movq %r14, %rdi
movl %r12d, %esi
movq %rbx, %rdx
callq 0x6d20
leaq 0xb2e9(%rip), %rcx      # 0x37ab5
movl $0x9, %r8d
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
movq %rbp, 0x410(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x2a0(%rsp), %rbx
leaq 0x20(%rsp), %r14
movq 0x40(%rsp), %r12
je 0x2c81c
movq %rdx, 0x410(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x420(%rsp)
jmp 0x2c825
movupd (%rcx), %xmm0
movupd %xmm0, (%rbp)
movq 0x8(%rax), %rdx
movq %rdx, 0x418(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10(%rsp), %rdi
movq %r14, (%rdi)
leaq 0xa0d3(%rip), %rsi      # 0x36922
leaq 0xa0cd(%rip), %rdx      # 0x36923
callq 0x6d9c
movq 0x410(%rsp), %rcx
movq 0x418(%rsp), %r8
movq 0x18(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %rbp, %rcx
je 0x2c886
movq 0x420(%rsp), %rdi
movq 0x10(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x2c8a4
movl $0xf, %edi
cmpq %r14, %rsi
je 0x2c89f
movq 0x20(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2c8b3
leaq 0x410(%rsp), %rdi
callq 0x30e0
jmp 0x2c8c1
leaq 0x10(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x140(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x2c8ee
movq %rsi, 0x130(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x140(%rsp)
jmp 0x2c8f6
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x138(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x130(%rsp), %rdi
movq %r12, %rdx
callq 0x1d7c5
leaq 0x140(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2c948
callq 0x3310
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2c957
callq 0x3310
movq 0x410(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2c969
callq 0x3310
movq 0x290(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2c97b
callq 0x3310
leaq 0x410(%rsp), %rdi
callq 0x3210
leaq 0x420(%rsp), %rbx
leaq 0xb128(%rip), %rsi      # 0x37abf
movl $0x17, %edx
movq %rbx, %rdi
callq 0x3390
movq 0x8(%rsp), %rax
movq 0x2d20(%rax), %rax
movl (%rax), %esi
movq %rbx, %rdi
callq 0x3550
movq 0x8(%rsp), %rax
cmpl $0x2, 0x2d1c(%rax)
jl 0x2ca0c
movl $0x1, %r15d
leaq 0x98bb(%rip), %r14      # 0x36290
movq 0x8(%rsp), %r13
movl $0x1, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3390
movq 0x2d20(%r13), %rax
movl (%rax,%r15,4), %esi
movq %rbx, %rdi
callq 0x3550
incq %r15
movslq 0x2d1c(%r13), %rax
cmpq %rax, %r15
jl 0x2c9da
leaq 0xb0c4(%rip), %rsi      # 0x37ad7
movl $0x2, %edx
movq %rbx, %rdi
callq 0x3390
leaq 0x428(%rsp), %rsi
leaq 0x7c8(%rsp), %rdi
callq 0x3490
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x7c8(%rsp), %rdi
movq %r12, %rdx
callq 0x1d7c5
leaq 0x7d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2ca67
callq 0x3310
movq 0x50(%rsp), %r15
movq %r15, %rbx
negq %rbx
cmovsq %r15, %rbx
movl $0x1, %r14d
cmpq $0xa, %rbx
jb 0x2cadb
movl $0x4, %r14d
movabsq $0x346dc5d63886594b, %rsi # imm = 0x346DC5D63886594B
movq %rbx, %rcx
cmpq $0x63, %rcx
jbe 0x2cacd
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x2cad3
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x2cad6
movq %rcx, %rax
mulq %rsi
shrq $0xb, %rdx
addl $0x4, %r14d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x2ca95
addl $-0x3, %r14d
jmp 0x2cad6
addl $-0x2, %r14d
jmp 0x2cad6
decl %r14d
movq 0x50(%rsp), %r15
shrq $0x3f, %r15
leal (%r15,%r14), %esi
leaq 0x200(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x1f0(%rsp), %rdi
movl $0x2d, %edx
callq 0x33a0
leaq 0x1f0(%rsp), %r12
addq (%r12), %r15
movq %r15, %rdi
movl %r14d, %esi
movq %rbx, %rdx
callq 0x6d20
leaq 0xafb8(%rip), %rcx      # 0x37ada
movl $0x19, %r8d
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x88(%rsp), %r14
movq %r14, 0x78(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq 0x20(%rsp), %rbx
je 0x2cb67
movq %rdx, 0x78(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x88(%rsp)
jmp 0x2cb70
movupd (%rcx), %xmm0
movupd %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, 0x80(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf8(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0xa00e(%rip), %rsi      # 0x36bac
leaq 0xa00b(%rip), %rdx      # 0x36bb0
leaq 0xe8(%rsp), %rdi
callq 0x6d9c
movq 0x78(%rsp), %rcx
movq 0x80(%rsp), %r8
movq 0xf0(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %r14, %rcx
je 0x2cbdd
movq 0x88(%rsp), %rdi
movq 0xe8(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x2cc01
movl $0xf, %edi
cmpq %r15, %rsi
je 0x2cbfc
movq 0xf8(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2cc0d
leaq 0x78(%rsp), %rdi
callq 0x30e0
jmp 0x2cc1e
leaq 0xe8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
movq %rbx, 0x10(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x2cc3e
movq %rdx, 0x10(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x20(%rsp)
jmp 0x2cc46
movupd (%rcx), %xmm0
movupd %xmm0, (%rbx)
movq 0x8(%rsp), %r8
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x18(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq 0x2cd0(%r8), %rcx
movq 0x2cd8(%r8), %rdx
subq %rcx, %rdx
shrq $0x2, %rdx
xorl %eax, %eax
testl %edx, %edx
jle 0x2cc9c
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
xorl %esi, %esi
movslq (%rcx,%rsi,4), %rdi
cltq
addq %rdi, %rax
incq %rsi
cmpq %rsi, %rdx
jne 0x2cc8b
movslq 0x2d1c(%r8), %rbx
imulq %rax, %rbx
movq %rbx, %r14
negq %r14
cmovsq %rbx, %r14
movl $0x1, %r12d
cmpq $0xa, %r14
jb 0x2cd11
movl $0x4, %r12d
movabsq $0x346dc5d63886594b, %rsi # imm = 0x346DC5D63886594B
movq %r14, %rcx
cmpq $0x63, %rcx
jbe 0x2cd08
cmpq $0x3e7, %rcx            # imm = 0x3E7
jbe 0x2cd0e
cmpq $0x2710, %rcx           # imm = 0x2710
jb 0x2cd11
movq %rcx, %rax
mulq %rsi
shrq $0xb, %rdx
addl $0x4, %r12d
cmpq $0x1869f, %rcx          # imm = 0x1869F
movq %rdx, %rcx
ja 0x2ccd0
addl $-0x3, %r12d
jmp 0x2cd11
addl $-0x2, %r12d
jmp 0x2cd11
decl %r12d
shrq $0x3f, %rbx
leal (%rbx,%r12), %esi
leaq 0xd8(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0xc8(%rsp), %rdi
movl $0x2d, %edx
callq 0x33a0
addq 0xc8(%rsp), %rbx
movq %rbx, %rdi
movl %r12d, %esi
movq %r14, %rdx
callq 0x6d20
movq 0x10(%rsp), %rcx
movq 0x18(%rsp), %r8
movq 0xd0(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
leaq 0x20(%rsp), %r14
cmpq %r14, %rcx
je 0x2cd77
movq 0x20(%rsp), %rdi
movq 0xc8(%rsp), %rsi
cmpq %rdi, %rax
leaq 0x2a0(%rsp), %rbx
leaq 0x88(%rsp), %r15
movq 0x40(%rsp), %r12
jbe 0x2cdb0
movl $0xf, %edi
cmpq %r13, %rsi
je 0x2cdab
movq 0xd8(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2cdbc
leaq 0x10(%rsp), %rdi
callq 0x30e0
jmp 0x2cdcd
leaq 0xc8(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
movq %rbx, 0x290(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x2cdf6
movq %rdx, 0x290(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x2a0(%rsp)
jmp 0x2cdfe
movupd (%rcx), %xmm0
movupd %xmm0, (%rbx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x298(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x260(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0x9af0(%rip), %rsi      # 0x36921
leaq 0x9aeb(%rip), %rdx      # 0x36923
leaq 0x250(%rsp), %rdi
callq 0x6d9c
movq 0x290(%rsp), %rcx
movq 0x298(%rsp), %r8
movq 0x258(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
leaq 0x2a0(%rsp), %rsi
cmpq %rsi, %rcx
je 0x2ce7b
movq 0x2a0(%rsp), %rdi
movq 0x250(%rsp), %rsi
cmpq %rdi, %rax
jbe 0x2ce9f
movl $0xf, %edi
cmpq %rbx, %rsi
je 0x2ce9a
movq 0x260(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x2ceae
leaq 0x290(%rsp), %rdi
callq 0x30e0
jmp 0x2cebf
leaq 0x250(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3370
leaq 0x120(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x2ceec
movq %rsi, 0x110(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x120(%rsp)
jmp 0x2cef4
movupd (%rcx), %xmm0
movupd %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x118(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x110(%rsp), %rdi
movq %r12, %rdx
callq 0x1d7c5
leaq 0x120(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
leaq 0xf8(%rsp), %r12
je 0x2cf4e
callq 0x3310
movq 0x250(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2cf60
callq 0x3310
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
je 0x2cf7a
callq 0x3310
movq 0xc8(%rsp), %rdi
cmpq %r13, %rdi
je 0x2cf8c
callq 0x3310
movq 0x10(%rsp), %rdi
cmpq %r14, %rdi
je 0x2cf9b
callq 0x3310
movq 0xe8(%rsp), %rdi
cmpq %r12, %rdi
je 0x2cfad
callq 0x3310
movq 0x78(%rsp), %rdi
cmpq %r15, %rdi
je 0x2cfbc
callq 0x3310
movq 0x1f0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2cfce
callq 0x3310
movq 0x13fab(%rip), %rsi     # 0x40f80
leaq 0x410(%rsp), %rdi
callq 0x3250
leaq 0x490(%rsp), %rdi
callq 0x30f0
movq 0x228(%rsp), %rdi
testq %rdi, %rdi
je 0x2d001
callq 0x3310
leaq 0x190(%rsp), %rdi
callq 0xb43c
leaq 0xa0(%rsp), %rdi
callq 0x1487a
leaq 0x1b0(%rsp), %rdi
callq 0xb43c
leaq 0x210(%rsp), %rdi
callq 0xb43c
leaq 0x620(%rsp), %rdi
callq 0xb43c
movq 0x270(%rsp), %rdi
leaq 0x280(%rsp), %rax
cmpq %rax, %rdi
je 0x2d05c
callq 0x3310
leaq 0x1d0(%rsp), %rdi
callq 0xb43c
leaq 0x60(%rsp), %rdi
callq 0x1487a
addq $0x888, %rsp            # imm = 0x888
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x6d8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa9a9(%rip), %rsi      # 0x37a41
leaq 0xa9ec(%rip), %rdx      # 0x37a8b
leaq 0x6c8(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x6c8(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d7c5
leaq 0x6c8(%rsp), %rdi
jmp 0x2d1c5
leaq 0x738(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa6d5(%rip), %rsi      # 0x377bf
leaq 0xa7c1(%rip), %rdx      # 0x378b2
leaq 0x728(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x728(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x728(%rsp), %rdi
jmp 0x2d1c5
leaq 0x758(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa641(%rip), %rsi      # 0x3777d
leaq 0xa67b(%rip), %rdx      # 0x377be
leaq 0x748(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x748(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x748(%rsp), %rdi
jmp 0x2d1c5
leaq 0x6f8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa7af(%rip), %rsi      # 0x3793a
leaq 0xa8ae(%rip), %rdx      # 0x37a40
leaq 0x6e8(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x6e8(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x6e8(%rsp), %rdi
callq 0x3150
movl $0x1, %edi
callq 0x33d0
leaq 0x7b8(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa489(%rip), %rsi      # 0x37670
leaq 0xa4a8(%rip), %rdx      # 0x37696
leaq 0x7a8(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x7a8(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x7a8(%rsp), %rdi
jmp 0x2d1c5
movl %ecx, %esi
leaq 0x290(%rsp), %rdi
callq 0x6c6c
leaq 0xa495(%rip), %rsi      # 0x376ce
leaq 0x410(%rsp), %rdi
leaq 0x290(%rsp), %rdx
callq 0x6bfc
leaq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
movq %rax, (%rdi)
leaq 0xa495(%rip), %rsi      # 0x376f7
leaq 0xa4ae(%rip), %rdx      # 0x37717
callq 0x6d9c
leaq 0x828(%rsp), %rdi
leaq 0x410(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x6b54
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x828(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x828(%rsp), %rdi
callq 0x3150
leaq 0x10(%rsp), %rdi
callq 0x3150
leaq 0x410(%rsp), %rdi
callq 0x3150
leaq 0x290(%rsp), %rdi
jmp 0x2d1c5
leaq 0x718(%rsp), %rbx
movq %rbx, -0x10(%rbx)
leaq 0xa5c9(%rip), %rsi      # 0x378b3
leaq 0xa648(%rip), %rdx      # 0x37939
leaq 0x708(%rsp), %rdi
callq 0x6d9c
movq 0x8(%rsp), %rax
movzbl 0x2c3c(%rax), %esi
leaq 0x708(%rsp), %rdi
movq 0x40(%rsp), %rdx
callq 0x1d808
leaq 0x708(%rsp), %rdi
jmp 0x2d1c5
movq %rax, %r14
leaq 0x838(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d362
callq 0x3310
jmp 0x2d362
movq %rax, %r14
leaq 0x858(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d37b
callq 0x3310
jmp 0x2d37b
movq %rax, %r14
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2d392
callq 0x3310
jmp 0x2d392
movq %rax, %r14
movq 0xc8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2d3bf
callq 0x3310
jmp 0x2d3bf
movq %rax, %r14
leaq 0x420(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x2d4d5
jmp 0x2d4df
movq %rax, %r14
movq 0x708(%rsp), %rdi
jmp 0x2d823
movq %rax, %r14
leaq 0x420(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d3f4
callq 0x3310
jmp 0x2d3f4
jmp 0x2d4dc
movq %rax, %r14
movq 0x7a8(%rsp), %rdi
jmp 0x2d6c8
jmp 0x2d94e
movq %rax, %r14
leaq 0xf8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d506
callq 0x3310
jmp 0x2d506
jmp 0x2d94e
movq %rax, %r14
leaq 0x180(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d436
callq 0x3310
jmp 0x2d436
movq %rax, %r14
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2d44f
callq 0x3310
jmp 0x2d44f
movq %rax, %r14
movq 0x410(%rsp), %rdi
cmpq %rbx, %rdi
jne 0x2d682
jmp 0x2d68c
jmp 0x2d689
jmp 0x2d94e
jmp 0x2d94e
movq %rax, %r14
movq 0x658(%rsp), %rdi
cmpq %r15, %rdi
jne 0x2d4be
jmp 0x2d4c8
jmp 0x2d4c5
jmp 0x2d4dc
jmp 0x2d921
movq %rax, %r14
movq 0x788(%rsp), %rdi
jmp 0x2d6c8
jmp 0x2d921
jmp 0x2d921
jmp 0x2d921
movq %rax, %r14
movq 0x638(%rsp), %rdi
cmpq %r12, %rdi
je 0x2d4c8
callq 0x3310
jmp 0x2d4c8
movq %rax, %r14
movq 0x410(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2d4df
callq 0x3310
jmp 0x2d4df
movq %rax, %r14
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
jmp 0x2d800
jmp 0x2d921
jmp 0x2d8bc
jmp 0x2d921
movq %rax, %r14
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
je 0x2d73f
callq 0x3310
jmp 0x2d73f
movq %rax, %r14
leaq 0x120(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d547
callq 0x3310
jmp 0x2d547
movq %rax, %r14
movq 0x250(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2d55e
callq 0x3310
jmp 0x2d55e
movq %rax, %r14
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
cmpq %rax, %rdi
je 0x2d57d
callq 0x3310
jmp 0x2d57d
movq %rax, %r14
movq 0xc8(%rsp), %rdi
cmpq %r13, %rdi
je 0x2d594
callq 0x3310
jmp 0x2d594
movq %rax, %r14
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2d5ad
callq 0x3310
jmp 0x2d5ad
movq %rax, %r14
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x2d5cc
callq 0x3310
jmp 0x2d5cc
movq %rax, %r14
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x2d5e8
callq 0x3310
jmp 0x2d5e8
movq %rax, %r14
movq 0x1f0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2d8fc
callq 0x3310
jmp 0x2d8fc
jmp 0x2d8f9
movq %rax, %r14
leaq 0x7d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x2d5f9
jmp 0x2d8fc
jmp 0x2d94e
movq %rax, %r14
leaq 0x140(%rsp), %rax
jmp 0x2d649
jmp 0x2d659
jmp 0x2d672
jmp 0x2d689
jmp 0x2d94e
movq %rax, %r14
leaq 0x160(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2d65c
callq 0x3310
jmp 0x2d65c
movq %rax, %r14
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2d675
callq 0x3310
jmp 0x2d675
movq %rax, %r14
movq 0x410(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2d68c
callq 0x3310
jmp 0x2d68c
movq %rax, %r14
movq 0x290(%rsp), %rdi
leaq 0x2a0(%rsp), %rax
jmp 0x2d76f
jmp 0x2d94e
movq %rax, %r14
leaq 0x10(%rsp), %rdi
jmp 0x2d947
jmp 0x2d94e
jmp 0x2d965
movq %rax, %r14
movq 0x768(%rsp), %rdi
cmpq %rbx, %rdi
jne 0x2d809
jmp 0x2d9a9
jmp 0x2d921
jmp 0x2d921
movq %rax, %r14
leaq 0x410(%rsp), %rdi
callq 0x30b0
jmp 0x2d6f5
movq %rax, %r14
movq 0x868(%rsp), %rdi
cmpq %r15, %rdi
jne 0x2d71b
jmp 0x2d9da
movq %rax, %r14
movq 0x678(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2d9da
callq 0x3310
jmp 0x2d9da
movq %rax, %r14
movq 0x6e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2d75f
callq 0x3310
jmp 0x2d75f
movq %rax, %r14
movq 0x1f0(%rsp), %rdi
cmpq %r15, %rdi
je 0x2d78a
callq 0x3310
jmp 0x2d78a
jmp 0x2d75c
jmp 0x2d94e
jmp 0x2d75c
movq %rax, %r14
movq 0x410(%rsp), %rdi
leaq 0x420(%rsp), %rax
cmpq %rax, %rdi
jne 0x2d82c
jmp 0x2d951
jmp 0x2d94e
jmp 0x2d94e
movq %rax, %r14
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2d7f3
callq 0x3310
jmp 0x2d7f3
jmp 0x2d8f9
movq %rax, %r14
movq 0x748(%rsp), %rdi
jmp 0x2d823
movq %rax, %r14
movq 0x728(%rsp), %rdi
jmp 0x2d823
jmp 0x2d94e
movq %rax, %r14
jmp 0x2d7de
jmp 0x2d94e
movq %rax, %r14
leaq 0x410(%rsp), %rdi
callq 0xb366
movq 0x290(%rsp), %rdi
testq %rdi, %rdi
jne 0x2d82c
jmp 0x2d951
movq %rax, %r14
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x2d9a9
callq 0x3310
jmp 0x2d9a9
jmp 0x2d94e
movq %rax, %r14
movq 0x6c8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x2d951
callq 0x3310
jmp 0x2d951
movq %rax, %r14
movq 0x13768(%rip), %rsi     # 0x40fa8
leaq 0x410(%rsp), %rdi
callq 0x3420
movq %rbx, %rdi
jmp 0x2d918
jmp 0x2d94e
jmp 0x2d94e
jmp 0x2d94e
jmp 0x2d94e
jmp 0x2d921
jmp 0x2d94e
jmp 0x2d94e
movq %rax, %r14
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x2d8bf
callq 0x3310
jmp 0x2d8bf
movq %rax, %r14
movq 0x1370a(%rip), %rsi     # 0x40fa8
leaq 0x290(%rsp), %rdi
callq 0x3420
leaq 0x308(%rsp), %rdi
callq 0x30f0
jmp 0x2d8bf
jmp 0x2d8bc
movq %rax, %r14
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x2d8d3
callq 0x3310
movq 0x136ce(%rip), %rsi     # 0x40fa8
leaq 0x410(%rsp), %rdi
callq 0x3420
leaq 0x488(%rsp), %rdi
callq 0x30f0
jmp 0x2d9a9
movq %rax, %r14
movq 0x1367d(%rip), %rsi     # 0x40f80
leaq 0x410(%rsp), %rdi
callq 0x3250
leaq 0x490(%rsp), %rdi
callq 0x30f0
jmp 0x2d951
jmp 0x2d965
movq %rax, %r14
jmp 0x2d9a9
jmp 0x2d94e
movq %rax, %r14
leaq 0x6b0(%rsp), %rdi
jmp 0x2d947
jmp 0x2d94e
jmp 0x2d94e
movq %rax, %r14
leaq 0x698(%rsp), %rdi
callq 0xb43c
jmp 0x2d951
movq %rax, %r14
movq 0x228(%rsp), %rdi
testq %rdi, %rdi
je 0x2d968
callq 0x3310
jmp 0x2d968
movq %rax, %r14
leaq 0x190(%rsp), %rdi
callq 0xb43c
leaq 0xa0(%rsp), %rdi
callq 0x1487a
leaq 0x1b0(%rsp), %rdi
callq 0xb43c
leaq 0x210(%rsp), %rdi
callq 0xb43c
leaq 0x620(%rsp), %rdi
callq 0xb43c
movq 0x270(%rsp), %rdi
leaq 0x280(%rsp), %rax
cmpq %rax, %rdi
je 0x2d9c3
callq 0x3310
leaq 0x1d0(%rsp), %rdi
callq 0xb43c
leaq 0x60(%rsp), %rdi
callq 0x1487a
movq %r14, %rdi
callq 0x3580