// File: /workspace/github_cpp_makefile_star2_O3/ekg[P]fastahack/FastaHack.cpp
// Function: main
int main (int argc, char** argv) {

    string command;
    string fastaFileName;
    string seqname;
    string longseqname;
    long long start;
    long long length;
    bool dump = false;

    bool buildIndex = false;  // flag to force index building
    bool printEntropy = false;  // entropy printing
    bool readRegionsFromStdin = false;
    //bool printLength = false;
    string region;

    int c;

    while (true) {
        static struct option long_options[] =
        {
            /* These options set a flag. */
            //{"verbose", no_argument,       &verbose_flag, 1},
            //{"brief",   no_argument,       &verbose_flag, 0},
            {"help", no_argument, 0, 'h'},
            {"index",  no_argument, 0, 'i'},
            //{"length",  no_argument, &printLength, true},
            {"entropy", no_argument, 0, 'e'},
            {"region", required_argument, 0, 'r'},
            {"stdin", no_argument, 0, 'c'},
            {0, 0, 0, 0}
        };
        /* getopt_long stores the option index here. */
        int option_index = 0;

        c = getopt_long (argc, argv, "hciedr:",
                         long_options, &option_index);

      /* Detect the end of the options. */
          if (c == -1)
            break;
 
          switch (c)
            {
            case 0:
            /* If this option set a flag, do nothing else now. */
            if (long_options[option_index].flag != 0)
              break;
            printf ("option %s", long_options[option_index].name);
            if (optarg)
              printf (" with arg %s", optarg);
            printf ("\n");
            break;

          case 'e':
            printEntropy = true;
            break;

          case 'c':
            readRegionsFromStdin = true;
            break;
 
          case 'i':
            buildIndex = true;
            break;
 
          case 'r':
            region = optarg;
            break;

            case 'd':
                dump = true;
                break;

          case 'h':
            printSummary();
            exit(0);
            break;
 
          case '?':
            /* getopt_long already printed an error message. */
            printSummary();
            exit(1);
            break;
 
          default:
            abort ();
          }
      }

    /* Print any remaining command line arguments (not options). */
    if (optind < argc) {
        //cerr << "fasta file: " << argv[optind] << endl;
        fastaFileName = argv[optind];
    } else {
        cerr << "please specify a fasta file" << endl;
        printSummary();
        exit(1);
    }

    if (buildIndex) {
        FastaIndex* fai = new FastaIndex();
        //cerr << "generating fasta index file for " << fastaFileName << endl;
        fai->indexReference(fastaFileName);
        fai->writeIndexFile((string) fastaFileName + fai->indexFileExtension());
    }
    
    string sequence;  // holds sequence so we can optionally process it

    FastaReference fr;
    fr.open(fastaFileName);

    if (dump) {
        for (vector<string>::iterator s = fr.index->sequenceNames.begin(); s != fr.index->sequenceNames.end(); ++s) {
            cout << *s << "\t" << fr.getSequence(*s) << endl;
        }
        return 0;
    }

    if (region != "") {
        FastaRegion target(region);
        sequence = fr.getTargetSubSequence(target);
    }

    if (readRegionsFromStdin) {
        string regionstr;
        while (getline(cin, regionstr)) {
            FastaRegion target(regionstr);
            if (target.startPos == -1) {
                cout << fr.getSequence(target.startSeq) << endl;
            } else {
                cout << fr.getSubSequence(target.startSeq, target.startPos - 1, target.length()) << endl;
            }
        }
    } else {
        if (sequence != "") {
            if (printEntropy) {
                if (sequence.size() > 0) {
                    cout << shannon_H((char*) sequence.c_str(), sequence.size()) << endl;
                } else {
                    cerr << "please specify a region or sequence for which to calculate the shannon entropy" << endl;
                }
            } else {  // if no statistical processing is requested, just print the sequence
                cout << sequence << endl;
            }
        }
    }

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x258, %rsp            # imm = 0x258
movq %rsi, %rbx
movl %edi, %ebp
leaq 0x78(%rsp), %rax
movq %rax, -0x10(%rax)
xorl %edx, %edx
movq %rdx, -0x8(%rax)
movb %dl, (%rax)
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rdx, -0x8(%rax)
movb %dl, (%rax)
leaq 0x58(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rdx, -0x8(%rax)
movb %dl, (%rax)
leaq 0x248(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rdx, -0x8(%rax)
movb %dl, (%rax)
leaq 0x140(%rsp), %rax
movq %rax, -0x10(%rax)
movq %rdx, -0x8(%rax)
movl $0x0, %ecx
movq %rcx, 0x108(%rsp)
movb %dl, (%rax)
leaq 0x1e82(%rip), %r14      # 0x95eb
leaq 0x5b20(%rip), %r12      # 0xd290
leaq 0x150(%rsp), %r15
leaq 0x1aad(%rip), %r13      # 0x922c
movq $0x0, 0xf0(%rsp)
movq $0x0, 0xf8(%rsp)
movq $0x0, 0x100(%rsp)
movl %edi, 0xcc(%rsp)
movl $0x0, 0x150(%rsp)
movl %ebp, %edi
movq %rbx, %rsi
movq %r14, %rdx
movq %r12, %rcx
movq %r15, %r8
callq 0x3450
cmpl $0x62, %eax
jle 0x77eb
leal -0x63(%rax), %ecx
cmpl $0x6, %ecx
ja 0x7847
movslq (%r13,%rcx,4), %rax
addq %r13, %rax
jmpq *%rax
movb $0x1, %al
movq %rax, 0xf8(%rsp)
jmp 0x77aa
testl %eax, %eax
jne 0x78da
movslq 0x150(%rsp), %rax
shlq $0x5, %rax
cmpq $0x0, 0x10(%rax,%r12)
jne 0x77aa
addq %r12, %rax
movq (%rax), %rsi
leaq 0x1ddf(%rip), %rdi      # 0x95f3
xorl %eax, %eax
callq 0x3050
movq 0x5786(%rip), %rax      # 0xcfa8
movq (%rax), %rsi
testq %rsi, %rsi
je 0x7838
leaq 0x1dcc(%rip), %rdi      # 0x95fd
xorl %eax, %eax
callq 0x3050
movl $0xa, %edi
callq 0x3390
jmp 0x77aa
cmpl $0x72, %eax
jne 0x8197
movq 0x5751(%rip), %rax      # 0xcfa8
movq (%rax), %r13
movq %rbx, %rbp
movq %r12, %rbx
movq %r15, %r12
movq %r14, %r15
movq 0x138(%rsp), %r14
movq %r13, %rdi
callq 0x3140
leaq 0x130(%rsp), %rdi
xorl %esi, %esi
movq %r14, %rdx
movq %r15, %r14
movq %r12, %r15
movq %rbx, %r12
movq %rbp, %rbx
movl 0xcc(%rsp), %ebp
movq %r13, %rcx
leaq 0x198c(%rip), %r13      # 0x922c
movq %rax, %r8
callq 0x33f0
jmp 0x77aa
movb $0x1, %al
movq %rax, 0xf0(%rsp)
jmp 0x77aa
movb $0x1, %al
movq %rax, 0x100(%rsp)
jmp 0x77aa
movb $0x1, %al
movq %rax, 0x108(%rsp)
jmp 0x77aa
cmpl $-0x1, %eax
jne 0x8183
movq 0x56de(%rip), %rax      # 0xcfc8
movslq (%rax), %rax
cmpl %ebp, %eax
jge 0x81a8
movq (%rbx,%rax,8), %rbx
leaq 0x28(%rsp), %r14
movq 0x8(%r14), %r15
movq %rbx, %rdi
callq 0x3140
movq %r14, %rdi
xorl %esi, %esi
movq %r15, %rdx
movq %rbx, %rcx
movq %rax, %r8
callq 0x33f0
testb $0x1, 0x108(%rsp)
je 0x7ae8
movl $0x280, %edi            # imm = 0x280
callq 0x32c0
movq %rax, %r14
movq %rax, %rdi
callq 0x38a8
leaq 0x228(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x218(%rsp), %rdi
callq 0x558a
leaq 0x218(%rsp), %rsi
movq %r14, %rdi
callq 0x3fd6
movq 0x218(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7993
movq 0x228(%rsp), %rsi
incq %rsi
callq 0x32d0
leaq 0x160(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x150(%rsp), %rdi
callq 0x558a
movq %rsp, %rdi
movq %r14, %rsi
callq 0x4836
movq 0x150(%rsp), %rcx
movq 0x158(%rsp), %r8
movq 0x8(%rsp), %rdx
leaq (%rdx,%r8), %rax
movl $0xf, %edi
cmpq %r15, %rcx
je 0x79ef
movq 0x160(%rsp), %rdi
movq (%rsp), %rsi
cmpq %rdi, %rax
jbe 0x7a11
leaq 0x10(%rsp), %r9
movl $0xf, %edi
cmpq %r9, %rsi
je 0x7a0c
movq 0x10(%rsp), %rdi
cmpq %rdi, %rax
jbe 0x7a20
leaq 0x150(%rsp), %rdi
callq 0x30f0
jmp 0x7a2c
movq %rsp, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3300
leaq 0xe0(%rsp), %rdx
movq %rdx, -0x10(%rdx)
movq (%rax), %rsi
leaq 0x10(%rax), %rcx
cmpq %rcx, %rsi
je 0x7a59
movq %rsi, 0xd0(%rsp)
movq (%rcx), %rdx
movq %rdx, 0xe0(%rsp)
jmp 0x7a5f
movups (%rcx), %xmm0
movups %xmm0, (%rdx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0xd8(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0xd0(%rsp), %rsi
movq %r14, %rdi
callq 0x4664
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7ab0
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x32d0
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7acb
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x150(%rsp), %rdi
cmpq %r15, %rdi
je 0x7ae8
movq 0x160(%rsp), %rsi
incq %rsi
callq 0x32d0
leaq 0x98(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x168(%rsp), %rcx
movb %al, -0x18(%rcx)
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movq %rax, 0x10(%rcx)
movq %rax, 0x28(%rcx)
leaq 0x208(%rsp), %rbx
movq %rbx, -0x10(%rbx)
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1f8(%rsp), %rdi
callq 0x558a
leaq 0x150(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
callq 0x485a
movq 0x1f8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7b71
movq 0x208(%rsp), %rsi
incq %rsi
callq 0x32d0
testb $0x1, 0x100(%rsp)
je 0x7c90
movq 0x190(%rsp), %rax
movq 0x30(%rax), %r14
cmpq 0x38(%rax), %r14
je 0x809f
leaq 0x1e8(%rsp), %rbx
leaq 0x1d8(%rsp), %r15
movq %rsp, %r12
leaq 0x150(%rsp), %r13
movq (%r14), %rsi
movq 0x8(%r14), %rdx
movq 0x5402(%rip), %rdi      # 0xcfc0
callq 0x3320
movq %rax, %rbp
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1430(%rip), %rsi      # 0x9005
callq 0x3320
movq %rbx, 0x1d8(%rsp)
movq (%r14), %rsi
movq 0x8(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x558a
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x4bd2
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %rbp, %rdi
callq 0x3320
movq %rax, %rbp
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x3290
movsbl %al, %esi
movq %rbp, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31d0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7c58
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x1d8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x7c75
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x32d0
addq $0x20, %r14
movq 0x190(%rsp), %rax
cmpq 0x38(%rax), %r14
jne 0x7bb0
jmp 0x809f
leaq 0x136f(%rip), %rsi      # 0x9006
leaq 0x130(%rsp), %rdi
callq 0x30d0
testl %eax, %eax
je 0x7d23
movq %rsp, %rdi
leaq 0x130(%rsp), %rsi
callq 0x84e6
leaq 0x110(%rsp), %rdi
leaq 0x150(%rsp), %rsi
movq %rsp, %rdx
callq 0x4e3e
leaq 0x88(%rsp), %rdi
leaq 0x110(%rsp), %rbx
movq %rbx, %rsi
callq 0x3370
movq (%rbx), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x7d08
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x32d0
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x7d23
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
testb $0x1, 0xf8(%rsp)
je 0x7f8d
leaq 0x120(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x1c8(%rsp), %rbp
movq 0x5281(%rip), %rbx      # 0xcfd8
leaq 0x110(%rsp), %r14
leaq 0x198(%rsp), %r13
leaq 0x1b8(%rsp), %r15
movq %r13, %r12
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3290
movsbl %al, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x34c0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7ffd
movq %rsp, %rdi
movq %r14, %rsi
callq 0x84e6
cmpl $-0x1, 0x20(%rsp)
je 0x7e9a
movq %rbp, 0x1b8(%rsp)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x558a
movl 0x20(%rsp), %ecx
movl 0x24(%rsp), %eax
movl %eax, %r8d
subl %ecx, %r8d
decl %ecx
incl %r8d
testl %eax, %eax
movl $0x1, %eax
cmovlel %eax, %r8d
leaq 0xa8(%rsp), %rdi
leaq 0x150(%rsp), %rsi
movq %r15, %rdx
callq 0x4f28
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq 0x519b(%rip), %rdi      # 0xcfc0
callq 0x3320
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x3290
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31d0
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x7e79
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x1b8(%rsp), %rdi
cmpq %rbp, %rdi
movq %r12, %r13
je 0x7f69
movq 0x1c8(%rsp), %rsi
jmp 0x7f61
leaq 0x1a8(%rsp), %rax
movq %rax, 0x198(%rsp)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0x558a
leaq 0xa8(%rsp), %rdi
leaq 0x150(%rsp), %rsi
movq %r13, %rdx
callq 0x4bd2
movq 0xa8(%rsp), %rsi
movq 0xb0(%rsp), %rdx
movq 0x50d3(%rip), %rdi      # 0xcfc0
callq 0x3320
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x3290
movsbl %al, %esi
movq %r13, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31d0
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x7f41
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
movq %r12, %r13
je 0x7f69
movq 0x1a8(%rsp), %rsi
incq %rsi
callq 0x32d0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x7d72
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
jmp 0x7d72
leaq 0x1072(%rip), %rsi      # 0x9006
leaq 0x88(%rsp), %rdi
callq 0x30d0
testl %eax, %eax
je 0x809f
testb $0x1, 0xf0(%rsp)
je 0x8028
movq 0x90(%rsp), %rsi
testq %rsi, %rsi
je 0x805d
movq 0x88(%rsp), %rdi
callq 0x8d14
cvtss2sd %xmm0, %xmm0
movq 0x4fe4(%rip), %rdi      # 0xcfc0
callq 0x3430
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3290
jmp 0x808c
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x809f
movq 0x120(%rsp), %rsi
incq %rsi
callq 0x32d0
jmp 0x809f
movq 0x88(%rsp), %rsi
movq 0x90(%rsp), %rdx
movq 0x4f81(%rip), %rdi      # 0xcfc0
callq 0x3320
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3290
jmp 0x808c
movq 0x4f8c(%rip), %rbx      # 0xcff0
leaq 0x15bb(%rip), %rsi      # 0x9626
movl $0x4e, %edx
movq %rbx, %rdi
callq 0x3320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x3290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x3030
movq %rax, %rdi
callq 0x31d0
leaq 0x150(%rsp), %rdi
callq 0x4b78
movq 0x88(%rsp), %rdi
leaq 0x98(%rsp), %rax
cmpq %rax, %rdi
je 0x80d1
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
leaq 0x78(%rsp), %rbx
leaq 0x38(%rsp), %r14
leaq 0x58(%rsp), %r15
je 0x8105
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x238(%rsp), %rdi
leaq 0x248(%rsp), %rax
cmpq %rax, %rdi
je 0x812a
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x48(%rsp), %rdi
cmpq %r15, %rdi
je 0x8141
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x28(%rsp), %rdi
cmpq %r14, %rdi
je 0x8158
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x68(%rsp), %rdi
cmpq %rbx, %rdi
je 0x816f
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x32d0
xorl %eax, %eax
addq $0x258, %rsp            # imm = 0x258
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x3f, %eax
jne 0x8197
callq 0x729c
movl $0x1, %edi
callq 0x3360
callq 0x3190
callq 0x729c
xorl %edi, %edi
callq 0x3360
movq 0x4e41(%rip), %rdi      # 0xcff0
leaq 0x1454(%rip), %rsi      # 0x960a
movl $0x1b, %edx
callq 0x3320
movq 0x4e29(%rip), %rdi      # 0xcff0
callq 0x3150
callq 0x729c
jmp 0x818d
movq %rax, %r12
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x840d
movq 0x10(%rsp), %rsi
jmp 0x8405
jmp 0x83b7
movq %rax, %r12
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8220
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x32d0
jmp 0x8220
movq %rax, %r12
leaq 0x10(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x8240
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
jmp 0x8240
movq %rax, %r12
movq 0x150(%rsp), %rdi
cmpq %r15, %rdi
je 0x83c1
movq 0x160(%rsp), %rsi
jmp 0x827c
jmp 0x83be
movq %rax, %r12
movq 0x218(%rsp), %rdi
cmpq %rbx, %rdi
je 0x83c1
movq 0x228(%rsp), %rsi
incq %rsi
jmp 0x828c
movq %rax, %r12
movl $0x280, %esi            # imm = 0x280
movq %r14, %rdi
callq 0x32d0
jmp 0x83c1
movq %rax, %r12
movq 0x1f8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x840d
movq 0x208(%rsp), %rsi
jmp 0x8405
jmp 0x83be
jmp 0x83b7
jmp 0x83be
movq %rax, %r12
jmp 0x8314
jmp 0x82cd
movq %rax, %r12
jmp 0x837d
movq %rax, %r12
jmp 0x8360
jmp 0x8333
jmp 0x83b7
movq %rax, %r12
jmp 0x83f0
movq %rax, %r12
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x8314
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x198(%rsp), %rdi
leaq 0x1a8(%rsp), %rax
cmpq %rax, %rdi
je 0x837d
movq 0x1a8(%rsp), %rsi
jmp 0x8375
movq %rax, %r12
jmp 0x8398
movq %rax, %r12
movq 0xa8(%rsp), %rdi
leaq 0xb8(%rsp), %rax
cmpq %rax, %rdi
je 0x8360
movq 0xb8(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x1b8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x837d
movq 0x1c8(%rsp), %rsi
incq %rsi
callq 0x32d0
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x8398
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x110(%rsp), %rdi
leaq 0x120(%rsp), %rax
cmpq %rax, %rdi
je 0x840d
movq 0x120(%rsp), %rsi
jmp 0x8405
movq %rax, %r12
jmp 0x840d
jmp 0x83be
movq %rax, %r12
leaq 0x78(%rsp), %rbx
leaq 0x38(%rsp), %r14
leaq 0x58(%rsp), %r15
jmp 0x844e
movq %rax, %r12
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x83f0
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x1d8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x840d
movq 0x1e8(%rsp), %rsi
incq %rsi
callq 0x32d0
leaq 0x78(%rsp), %rbx
leaq 0x38(%rsp), %r14
leaq 0x58(%rsp), %r15
leaq 0x98(%rsp), %r13
leaq 0x150(%rsp), %rdi
callq 0x4b78
movq 0x88(%rsp), %rdi
cmpq %r13, %rdi
je 0x844e
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x130(%rsp), %rdi
leaq 0x140(%rsp), %rax
cmpq %rax, %rdi
je 0x8473
movq 0x140(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x238(%rsp), %rdi
leaq 0x248(%rsp), %rax
cmpq %rax, %rdi
je 0x8498
movq 0x248(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x48(%rsp), %rdi
cmpq %r15, %rdi
je 0x84af
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x28(%rsp), %rdi
cmpq %r14, %rdi
je 0x84c6
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x32d0
movq 0x68(%rsp), %rdi
cmpq %rbx, %rdi
je 0x84dd
movq 0x78(%rsp), %rsi
incq %rsi
callq 0x32d0
movq %r12, %rdi
callq 0x3490
nop