// File: /workspace/github_cpp_makefile_star2_O3/readmapping[P]alfalfa/src/main.cpp
// Function: main
int main(int argc, char* argv[]) {
    cerr << "@PG\tID:" << PROG << "\tVN:" << PROG_VERSION << endl;
    //handle command structure and general help
    if (argc < 2 || strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) {
        option::printUsage(std::cerr, basicUsage);
        exit(1);
    }
    if (strcmp(argv[1], "evaluate") == 0) {
        samCheckOptions_t opt;
        opt.initOptions();
        processCheckParameters(argc - 1, argv + 1, opt);
        cerr << "parsing options: done" << endl;
        if (opt.subcommand == ORACLE)
            checkOracle(opt);
        else if (opt.subcommand == SUMMARY)
            checkSummary(opt);
        else if (opt.subcommand == WGSIM)
            checkWgsim(opt);
    } else {
        mapOptions_t opt;
        opt.initOptions();
        processParameters(argc, argv, opt);
        //query name + read initialization
        cerr << "parsing options: done" << endl;
        sa = new sparseSA();
        if (opt.command == INDEX) {
            cerr << "loading ref sequences: ..." << endl;
            sa->loadRef(opt.ref_fasta);
            cerr << "loading ref sequences: done" << endl;
            cerr << "# ref sequence: " << opt.ref_fasta.data() << endl;
            //build index
            cerr << "building index with s = " << opt.K << " ... " << endl;
            clock_t start = clock();
            sa->init(opt.K, opt.hasSuflink, opt.hasChild, opt.hasKmer);
            sa->construct();
            cerr << "building index: done" << endl;
            if (opt.saveIndex) {
                cerr << "saving index to disk" << " ... " << endl;
                sa->save(opt.index_prefix);
                cerr << "saving index to disk: done" << endl;
            }
            clock_t end = clock();
            double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
            cerr << "time for building index structure: " << cpu_time << endl;
            cerr << "INDEX SIZE IN BYTES: " << sa->index_size_in_bytes() << endl;
            delete sa;
        } else if (opt.command == ALN) {
            //build or load index
            if (opt.indexLocation.empty() || !sa->load(opt.indexLocation)) {
                sa->loadRef(opt.ref_fasta);
                sa->init(opt.K, opt.hasSuflink, opt.hasChild, opt.hasKmer); //because S needs to be changed
                //TODO: set choice for kmer: situation yes or no
                cerr << "building index with s = " << opt.K << " ... " << endl;
                //adjust data structure to seed choice and sparseness
                clock_t start = clock();
                sa->construct();
                cerr << "building index: done" << endl;
                if (opt.saveIndex) {
                    cerr << "saving index to disk" << " ... " << endl;
                    sa->save(opt.index_prefix);
                    cerr << "saving index to disk: done" << endl;
                }
                clock_t end = clock();
                double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
                cerr << "time for building index structure: " << cpu_time << endl;
            } else {
                opt.K = sa->K;
                opt.hasChild = sa->hasChild;
                opt.hasSuflink = sa->hasSufLink;
                opt.hasKmer = sa->hasKmer;
            }
            if (opt.alnOptions.print >= 1) {
                cerr << "index has sparseness " << opt.K << endl;
                cerr << "index uses suffix links? " << (sa->hasSufLink ? "yes" : "no") << endl;
                cerr << "index uses child array? " << (sa->hasChild ? "yes" : "no") << endl;
                cerr << "INDEX SIZE IN BYTES: " << sa->index_size_in_bytes() << endl;
            }
#ifndef NDEBUG
            if (opt.alnOptions.debugFile != NULL) {
                fprintf(opt.alnOptions.debugFile, "#REF %s\n", opt.ref_fasta.c_str());
                fprintf(opt.alnOptions.debugFile, "%lu\n", sa->S.length());
                long sequenceCount = sa->descr.size();
                fprintf(opt.alnOptions.debugFile, "%ld\n", sequenceCount);
                if (sequenceCount == 1)
                    fprintf(opt.alnOptions.debugFile, "%d %s %lu %ld\n", 0, sa->descr[0].c_str(), sa->S.length(), sa->startpos[0]);
                else {
                    for (long i = 0; i < sequenceCount - 1; i++)
                        fprintf(opt.alnOptions.debugFile, "%ld %s %ld %ld\n", i, sa->descr[i].c_str(), sa->startpos[i + 1] - sa->startpos[i], sa->startpos[i]);
                    fprintf(opt.alnOptions.debugFile, "%ld %s %ld %ld\n", sequenceCount - 1, sa->descr[sequenceCount - 1].c_str(), (long) (sa->S.length() - sa->startpos[sequenceCount - 1]), sa->startpos[sequenceCount - 1]);
                }
            }
#endif
            //Print SAM Header, require refdescre, startpos and argc/argv
            outfile = fopen(opt.outputName.c_str(), "w");
            string header = createHeader(argc, argv, sa->S.length(), sa);
            fprintf(outfile, "%s", header.c_str());
            if (opt.alnOptions.print >= 1) cerr << "header printed to output" << endl;
            //FIRST: Unpaired reads
            if (!opt.unpairedQ.empty()) {
                if (opt.alnOptions.print >= 2) cerr << "#SE" << endl;
                cerr << "Mapping unpaired reads to the index using " << opt.query_threads << " threads ..." << endl;
                queryReader = new fastqInputReader(opt.unpairedQ, opt.nucleotidesOnly);
                clock_t start = clock();
                unpaired_thread(&opt);
                clock_t end = clock();
                double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
                cerr << endl;
                cerr << "mapping unpaired: done in " << cpu_time << " seconds." << endl;
                delete queryReader;
            }
            //SECOND: Paired reads
            if (!opt.pair1.empty() && !opt.pair2.empty()) {
                if (opt.alnOptions.print >= 2) cerr << "#PE" << endl;
                cerr << "Mapping paired reads to the index using " << opt.query_threads << " threads ..." << endl;
                mate1Reader = new fastqInputReader(opt.pair1, opt.nucleotidesOnly);
                mate2Reader = new fastqInputReader(opt.pair2, opt.nucleotidesOnly);
                clock_t start = clock();
                paired_thread1(&opt);
                clock_t end = clock();
                double cpu_time = (double) (end - start) / CLOCKS_PER_SEC;
                cerr << endl;
                cerr << "mapping paired: done in " << cpu_time << " seconds" << endl;
                delete mate1Reader;
                delete mate2Reader;
            } else if (!opt.pair1.empty() || !opt.pair2.empty()) {
                fprintf(stderr, "ALFALFA requires 2 separate mate pairs files \n");
                exit(1);
            }
            fclose(outfile);
#ifndef NDEBUG
            if (opt.alnOptions.debugFile != NULL) fclose(opt.alnOptions.debugFile);
#endif
            delete sa;
            cerr << "FINISHED" << endl;
        }
    }
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1e0, %rsp            # imm = 0x1E0
movq %rsi, %rbx
movl %edi, %ebp
movq 0x4a1ab(%rip), %r14     # 0x53fe8
leaq 0x36349(%rip), %rsi     # 0x4018d
movl $0x7, %edx
movq %r14, %rdi
callq 0x7340
movq 0x4a528(%rip), %rsi     # 0x54380
movq 0x4a529(%rip), %rdx     # 0x54388
movq %r14, %rdi
callq 0x7340
movq %rax, %r14
leaq 0x3630a(%rip), %rsi     # 0x4017b
movl $0x4, %edx
movq %rax, %rdi
callq 0x7340
movq 0x4a53b(%rip), %rsi     # 0x543c0
movq 0x4a53c(%rip), %rdx     # 0x543c8
movq %r14, %rdi
callq 0x7340
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpl $0x2, %ebp
jl 0xadf9
movq 0x8(%rbx), %r14
cmpb $0x2d, (%r14)
jne 0x9ee3
cmpb $0x68, 0x1(%r14)
jne 0x9ee3
cmpb $0x0, 0x2(%r14)
je 0xadf9
leaq 0x362b0(%rip), %rsi     # 0x4019a
movq %r14, %rdi
callq 0x7450
testl %eax, %eax
je 0xadf9
leaq 0x362a0(%rip), %rsi     # 0x401a1
movq %r14, %rdi
callq 0x7450
leaq 0x28(%rsp), %r14
movq %r14, %rdi
testl %eax, %eax
je 0xa108
callq 0xbd88
movq %r14, %rdi
callq 0xd3ae
leaq 0x28(%rsp), %rdx
movl %ebp, %edi
movq %rbx, %rsi
callq 0xe6d5
movq 0x4a0ac(%rip), %r14     # 0x53fe8
leaq 0x36267(%rip), %rsi     # 0x401aa
movl $0x15, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4a07a(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0x118, %edi            # imm = 0x118
callq 0x72e0
movq %rax, %rcx
addq $0x60, %rcx
xorpd %xmm0, %xmm0
movupd %xmm0, 0x20(%rax)
movupd %xmm0, 0x10(%rax)
movupd %xmm0, (%rax)
movq %rcx, 0x50(%rax)
xorl %ecx, %ecx
movq %rcx, 0x58(%rax)
movb $0x0, 0x60(%rax)
movupd %xmm0, 0x100(%rax)
movq %rcx, 0x110(%rax)
movupd %xmm0, 0x70(%rax)
movupd %xmm0, 0x80(%rax)
movupd %xmm0, 0x90(%rax)
movupd %xmm0, 0xa0(%rax)
movupd %xmm0, 0xb0(%rax)
movupd %xmm0, 0xc0(%rax)
movupd %xmm0, 0xd0(%rax)
movq %rcx, 0xe0(%rax)
movl $0x1, 0xf4(%rax)
movq %rax, 0x4a400(%rip)     # 0x54408
movl 0x28(%rsp), %ecx
cmpl $0x2, %ecx
je 0xa19d
testl %ecx, %ecx
jne 0xaddd
movq 0x49fc4(%rip), %rbx     # 0x53fe8
leaq 0x36195(%rip), %rsi     # 0x401c0
movl $0x1a, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49f92(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4a39e(%rip), %rdi     # 0x54408
leaq 0x98(%rsp), %rsi
callq 0xfe00
movq 0x49f6a(%rip), %rbx     # 0x53fe8
leaq 0x36156(%rip), %rsi     # 0x401db
movl $0x1b, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49f38(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49f24(%rip), %rbx     # 0x53fe8
leaq 0x3612c(%rip), %rsi     # 0x401f7
movl $0x10, %edx
movq %rbx, %rdi
callq 0x7340
movq 0x98(%rsp), %r14
testq %r14, %r14
je 0xaa6a
movq %r14, %rdi
callq 0x7140
movq 0x49ef0(%rip), %rdi     # 0x53fe8
movq %r14, %rsi
movq %rax, %rdx
callq 0x7340
jmp 0xaa81
callq 0xba0c
movq %r14, %rdi
callq 0xbbd6
addq $0x8, %rbx
decl %ebp
leaq 0x28(%rsp), %rdx
movl %ebp, %edi
movq %rbx, %rsi
callq 0x3370e
movq 0x49eb7(%rip), %rbx     # 0x53fe8
leaq 0x36072(%rip), %rsi     # 0x401aa
movl $0x15, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49e85(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl 0x28(%rsp), %eax
cmpl $0x3, %eax
je 0xaa51
cmpl $0x1, %eax
je 0xaa45
testl %eax, %eax
jne 0xaa5b
leaq 0x28(%rsp), %rdi
callq 0x355df
jmp 0xaa5b
cmpq $0x0, 0xe8(%rsp)
je 0xa1fb
leaq 0xe0(%rsp), %rsi
movq %rax, %rdi
callq 0x11ce8
movl %eax, %ecx
movq 0x4a247(%rip), %rax     # 0x54408
testb %cl, %cl
je 0xa1fb
movl 0xe8(%rax), %ecx
movl %ecx, 0x2c(%rsp)
movb 0xf0(%rax), %cl
movb %cl, 0xd9(%rsp)
movb 0xf1(%rax), %cl
movb %cl, 0xda(%rsp)
movb 0xf8(%rax), %al
movb %al, 0xdb(%rsp)
jmp 0xa421
leaq 0x98(%rsp), %rsi
movq %rax, %rdi
callq 0xfe00
movq 0x4a1f6(%rip), %rdi     # 0x54408
movslq 0x2c(%rsp), %rsi
movzbl 0xda(%rsp), %edx
movzbl 0xd9(%rsp), %ecx
movzbl 0xdb(%rsp), %r8d
callq 0xfcd2
movq 0x49dac(%rip), %rdi     # 0x53fe8
leaq 0x35fc5(%rip), %rsi     # 0x40208
movl $0x18, %edx
callq 0x7340
movl 0x2c(%rsp), %esi
movq 0x49d90(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %r14
leaq 0x3ab66(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %rax, %rdi
callq 0x7340
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %r14
movq 0x4a15e(%rip), %rdi     # 0x54408
callq 0x1293a
movq 0x49d32(%rip), %r15     # 0x53fe8
leaq 0x35f64(%rip), %rsi     # 0x40221
movl $0x14, %edx
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49d00(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpb $0x1, 0xd8(%rsp)
jne 0xa3bb
movq 0x49cde(%rip), %rdi     # 0x53fe8
leaq 0x35f25(%rip), %rsi     # 0x40236
movl $0x14, %edx
callq 0x7340
movq 0x49cc6(%rip), %r15     # 0x53fe8
leaq 0x3aaa4(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49c94(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4a0a0(%rip), %rdi     # 0x54408
leaq 0xb8(%rsp), %rsi
callq 0x11032
movq 0x49c6c(%rip), %r15     # 0x53fe8
leaq 0x35ec8(%rip), %rsi     # 0x4024b
movl $0x1a, %edx
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49c3a(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %r15
movq 0x49c1e(%rip), %rdi     # 0x53fe8
leaq 0x35e95(%rip), %rsi     # 0x40266
movl $0x23, %edx
callq 0x7340
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0x35c1d(%rip), %xmm0    # 0x40008
movq 0x49bf6(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpl $0x0, 0x1a0(%rsp)
jle 0xa5c8
movq 0x49bb2(%rip), %rdi     # 0x53fe8
leaq 0x35e63(%rip), %rsi     # 0x402a0
movl $0x15, %edx
callq 0x7340
movl 0x2c(%rsp), %esi
movq 0x49b96(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49b60(%rip), %rdi     # 0x53fe8
leaq 0x35e27(%rip), %rsi     # 0x402b6
movl $0x19, %edx
callq 0x7340
movq 0x49f68(%rip), %rax     # 0x54408
movzbl 0xf1(%rax), %edx
leaq 0x35e22(%rip), %r12     # 0x402d0
leaq 0x35e1f(%rip), %r14     # 0x402d4
testq %rdx, %rdx
movq %r14, %rsi
cmovneq %r12, %rsi
orq $0x2, %rdx
movq 0x49b1e(%rip), %r15     # 0x53fe8
movq %r15, %rdi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49af8(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49ae4(%rip), %rdi     # 0x53fe8
leaq 0x35dcc(%rip), %rsi     # 0x402d7
movl $0x18, %edx
callq 0x7340
movq 0x49eec(%rip), %rax     # 0x54408
movzbl 0xf0(%rax), %edx
testq %rdx, %rdx
cmovneq %r12, %r14
orq $0x2, %rdx
movq 0x49ab3(%rip), %r15     # 0x53fe8
movq %r15, %rdi
movq %r14, %rsi
callq 0x7340
movq (%r15), %rax
addq -0x18(%rax), %r15
movq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49a8a(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49a76(%rip), %rdi     # 0x53fe8
leaq 0x35d11(%rip), %rsi     # 0x4028a
movl $0x15, %edx
callq 0x7340
movq 0x49e7e(%rip), %rdi     # 0x54408
callq 0xfc0a
movq 0x49a52(%rip), %rdi     # 0x53fe8
movq %rax, %rsi
callq 0x72a0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x100(%rsp), %rdi
leaq 0x3ce4e(%rip), %rsi     # 0x47425
callq 0x7360
movq %rax, 0x49e2d(%rip)     # 0x54410
movq 0x49e1e(%rip), %r8      # 0x54408
movq 0x58(%r8), %rcx
leaq 0x8(%rsp), %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x9aee
movq 0x49e0c(%rip), %rsi     # 0x54410
movq 0x8(%rsp), %rdi
callq 0x7330
cmpl $0x0, 0x1a0(%rsp)
jle 0xa65e
movq 0x499c9(%rip), %rbx     # 0x53fe8
leaq 0x35cca(%rip), %rsi     # 0x402f0
movl $0x18, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49997(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpq $0x0, 0x40(%rsp)
je 0xa823
cmpl $0x2, 0x1a0(%rsp)
jl 0xa6ba
movq 0x4996d(%rip), %rbx     # 0x53fe8
leaq 0x35c87(%rip), %rsi     # 0x40309
movl $0x3, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4993b(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49927(%rip), %rdi     # 0x53fe8
leaq 0x35c45(%rip), %rsi     # 0x4030d
movl $0x2a, %edx
callq 0x7340
movl 0x30(%rsp), %esi
movq 0x4990b(%rip), %rbx     # 0x53fe8
movq %rbx, %rdi
callq 0x75d0
movq %rax, %r14
leaq 0x35c49(%rip), %rsi     # 0x40338
movl $0xc, %edx
movq %rax, %rdi
callq 0x7340
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0x60, %edi
callq 0x72e0
movq %rax, %r14
leaq 0x38(%rsp), %rsi
movzbl 0xe8(%rsi), %edx
movq %rax, %rdi
callq 0x19bb0
movq %r14, 0x49cb5(%rip)     # 0x54400
callq 0x71b0
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x8c40
callq 0x71b0
movq %rax, %r15
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49865(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49851(%rip), %rdi     # 0x53fe8
leaq 0x35ba7(%rip), %rsi     # 0x40345
movl $0x1a, %edx
callq 0x7340
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0x35850(%rip), %xmm0    # 0x40008
movq 0x49829(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %rbx
leaq 0x35b92(%rip), %rsi     # 0x40360
movl $0x9, %edx
movq %rax, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49bf7(%rip), %rbx     # 0x54400
testq %rbx, %rbx
je 0xa816
movq %rbx, %rdi
callq 0x19cd4
movl $0x60, %esi
movq %rbx, %rdi
callq 0x72f0
cmpq $0x0, 0x60(%rsp)
je 0xad40
cmpq $0x0, 0x80(%rsp)
je 0xae26
cmpl $0x2, 0x1a0(%rsp)
jl 0xa88e
movq 0x49799(%rip), %rbx     # 0x53fe8
leaq 0x35b14(%rip), %rsi     # 0x4036a
movl $0x3, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49767(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49753(%rip), %rdi     # 0x53fe8
leaq 0x35ad2(%rip), %rsi     # 0x4036e
movl $0x28, %edx
callq 0x7340
movl 0x30(%rsp), %esi
movq 0x49737(%rip), %rbx     # 0x53fe8
movq %rbx, %rdi
callq 0x75d0
movq %rax, %r14
leaq 0x35a75(%rip), %rsi     # 0x40338
movl $0xc, %edx
movq %rax, %rdi
callq 0x7340
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0x60, %edi
callq 0x72e0
movq %rax, %r14
leaq 0x58(%rsp), %rsi
movzbl 0xc8(%rsi), %edx
movq %rax, %rdi
callq 0x19bb0
movq %r14, 0x49af9(%rip)     # 0x54418
movl $0x60, %edi
callq 0x72e0
movq %rax, %r14
leaq 0x78(%rsp), %rsi
movzbl 0xa8(%rsi), %edx
movq %rax, %rdi
callq 0x19bb0
movq %r14, 0x49ad9(%rip)     # 0x54420
callq 0x71b0
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x92bd
callq 0x71b0
movq %rax, %r15
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49669(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49655(%rip), %rdi     # 0x53fe8
leaq 0x359fd(%rip), %rsi     # 0x40397
movl $0x18, %edx
callq 0x7340
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0x35654(%rip), %xmm0    # 0x40008
movq 0x4962d(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %rbx
leaq 0x356e0(%rip), %rsi     # 0x400aa
movl $0x8, %edx
movq %rax, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49a13(%rip), %rbx     # 0x54418
testq %rbx, %rbx
je 0xaa12
movq %rbx, %rdi
callq 0x19cd4
movl $0x60, %esi
movq %rbx, %rdi
callq 0x72f0
movq 0x499fa(%rip), %rbx     # 0x54420
testq %rbx, %rbx
je 0xaa33
movq %rbx, %rdi
callq 0x19cd4
movl $0x60, %esi
movq %rbx, %rdi
callq 0x72f0
jmp 0xad4f
leaq 0x28(%rsp), %rdi
callq 0x3bdb0
jmp 0xaa5b
leaq 0x28(%rsp), %rdi
callq 0x38aa2
leaq 0x28(%rsp), %rdi
callq 0xbca0
jmp 0xade7
movq (%rbx), %rax
movq -0x18(%rax), %rax
leaq (%rbx,%rax), %rdi
movl 0x20(%rbx,%rax), %esi
orl $0x1, %esi
callq 0x75c0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49549(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x49535(%rip), %rdi     # 0x53fe8
leaq 0x3574e(%rip), %rsi     # 0x40208
movl $0x18, %edx
callq 0x7340
movl 0x2c(%rsp), %esi
movq 0x49519(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
leaq 0x3a2ef(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %rax, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %rbx
movq 0x498e7(%rip), %rdi     # 0x54408
movslq 0x2c(%rsp), %rsi
movzbl 0xda(%rsp), %edx
movzbl 0xd9(%rsp), %ecx
movzbl 0xdb(%rsp), %r8d
callq 0xfcd2
movq 0x498bd(%rip), %rdi     # 0x54408
callq 0x1293a
movq 0x49491(%rip), %r14     # 0x53fe8
leaq 0x356c3(%rip), %rsi     # 0x40221
movl $0x14, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x4945f(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpb $0x1, 0xd8(%rsp)
jne 0xac5c
movq 0x4943d(%rip), %rdi     # 0x53fe8
leaq 0x35684(%rip), %rsi     # 0x40236
movl $0x14, %edx
callq 0x7340
movq 0x49425(%rip), %r14     # 0x53fe8
leaq 0x3a203(%rip), %rsi     # 0x44dcd
movl $0x5, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x493f3(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x497ff(%rip), %rdi     # 0x54408
leaq 0xb8(%rsp), %rsi
callq 0x11032
movq 0x493cb(%rip), %r14     # 0x53fe8
leaq 0x35627(%rip), %rsi     # 0x4024b
movl $0x1a, %edx
movq %r14, %rdi
callq 0x7340
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49399(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
callq 0x71b0
movq %rax, %r14
movq 0x4937d(%rip), %rdi     # 0x53fe8
leaq 0x355f4(%rip), %rsi     # 0x40266
movl $0x23, %edx
callq 0x7340
subq %rbx, %r14
cvtsi2sd %r14, %xmm0
divsd 0x3537c(%rip), %xmm0    # 0x40008
movq 0x49355(%rip), %rdi     # 0x53fe8
callq 0x7560
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x4931f(%rip), %rdi     # 0x53fe8
leaq 0x355ba(%rip), %rsi     # 0x4028a
movl $0x15, %edx
callq 0x7340
movq 0x49727(%rip), %rdi     # 0x54408
callq 0xfc0a
movq 0x492fb(%rip), %rdi     # 0x53fe8
movq %rax, %rsi
callq 0x72a0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x496e2(%rip), %rbx     # 0x54408
testq %rbx, %rbx
je 0xad33
movq %rbx, %rdi
callq 0xbf2c
movl $0x118, %esi            # imm = 0x118
movq %rbx, %rdi
jmp 0xadd8
cmpq $0x0, 0x80(%rsp)
jne 0xae26
movq 0x496ba(%rip), %rdi     # 0x54410
callq 0x72d0
movq 0x496a6(%rip), %rbx     # 0x54408
testq %rbx, %rbx
je 0xad6f
movq %rbx, %rdi
callq 0xbf2c
movl $0x118, %esi            # imm = 0x118
movq %rbx, %rdi
callq 0x72f0
movq 0x49265(%rip), %rbx     # 0x53fe8
leaq 0x35655(%rip), %rsi     # 0x403df
movl $0x8, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq 0x49233(%rip), %rdi     # 0x53fe8
callq 0x7040
movq %rax, %rdi
callq 0x71d0
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xaddd
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x72f0
leaq 0x28(%rsp), %rdi
callq 0xc006
xorl %eax, %eax
addq $0x1e0, %rsp            # imm = 0x1E0
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq 0x491e8(%rip), %rdi     # 0x53fe8
leaq 0x47459(%rip), %rsi     # 0x52260
movl $0x50, %edx
movl $0x32, %ecx
movl $0x4b, %r8d
callq 0xb9e7
movl $0x1, %edi
callq 0x73b0
callq 0x76c0
jmp 0xae62
jmp 0xae33
jmp 0xae33
jmp 0xae62
movq %rax, %rbx
movl $0x60, %esi
movq %r14, %rdi
callq 0x72f0
jmp 0xae65
jmp 0xae82
jmp 0xae82
jmp 0xae62
jmp 0xae62
jmp 0xae82
jmp 0xae82
jmp 0xae82
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xbca0
jmp 0xae8f
movq %rax, %rbx
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xae85
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x72f0
jmp 0xae85
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0xc006
movq %rbx, %rdi
callq 0x7600
nop