// File: twekkel[P]mzpq/libzpaq.cpp
// Function: libzpaq::compressBlock(libzpaq::StringBuffer*, libzpaq::Writer*, char const*, char const*, char const*, bool)
void compressBlock(StringBuffer* in, Writer* out, const char* method_,
                   const char* filename, const char* comment, bool dosha1) {
  assert(in);
  assert(out);
  assert(method_);
  assert(method_[0]);
  std::string method=method_;
  const unsigned n=in->size();  // input size
  const int arg0=MAX(lg(n+4095)-20, 0);  // block size
  assert((1u<<(arg0+20))>=n+4096);

  // Get type from method "LB,R,t" where L is level 0..5, B is block
  // size 0..11, R is redundancy 0..255, t = 0..3 = binary, text, exe, both.
  unsigned type=0;
  if (isdigit(method[0])) {
    int commas=0, arg[4]={0};
    for (int i=1; i<int(method.size()) && commas<4; ++i) {
      if (method[i]==',' || method[i]=='.') ++commas;
      else if (isdigit(method[i])) arg[commas]=arg[commas]*10+method[i]-'0';
    }
    if (commas==0) type=512;
    else type=arg[1]*4+arg[2];
  }

  // Get hash of input
  libzpaq::SHA1 sha1;
  const char* sha1ptr=0;
#ifdef DEBUG
  if (true) {
#else
  if (dosha1) {
#endif
    sha1.write(in->c_str(), n);
    sha1ptr=sha1.result();
  }

  // Expand default methods
  if (isdigit(method[0])) {
    const int level=method[0]-'0';
    assert(level>=0 && level<=9);

    // build models
    const int doe8=(type&2)*2;
    method="x"+itos(arg0);
    std::string htsz=","+itos(19+arg0+(arg0<=6));  // lz77 hash table size
    std::string sasz=","+itos(21+arg0);            // lz77 suffix array size

    // store uncompressed
    if (level==0)
      method="0"+itos(arg0)+",0";

    // LZ77, no model. Store if hard to compress
    else if (level==1) {
      if (type<40) method+=",0";
      else {
        method+=","+itos(1+doe8)+",";
        if      (type<80)  method+="4,0,1,15";
        else if (type<128) method+="4,0,2,16";
        else if (type<256) method+="4,0,2"+htsz;
        else if (type<960) method+="5,0,3"+htsz;
        else               method+="6,0,3"+htsz;
      }
    }

    // LZ77 with longer search
    else if (level==2) {
      if (type<32) method+=",0";
      else {
        method+=","+itos(1+doe8)+",";
        if (type<64) method+="4,0,3"+htsz;
        else method+="4,0,7"+sasz+",1";
      }
    }

    // LZ77 with CM depending on redundancy
    else if (level==3) {
      if (type<20)  // store if not compressible
        method+=",0";
      else if (type<48)  // fast LZ77 if barely compressible
        method+=","+itos(1+doe8)+",4,0,3"+htsz;
      else if (type>=640 || (type&1))  // BWT if text or highly compressible
        method+=","+itos(3+doe8)+"ci1";
      else  // LZ77 with O0-1 compression of up to 12 literals
        method+=","+itos(2+doe8)+",12,0,7"+sasz+",1c0,0,511i2";
    }

    // LZ77+CM, fast CM, or BWT depending on type
    else if (level==4) {
      if (type<12)
        method+=",0";
      else if (type<24)
        method+=","+itos(1+doe8)+",4,0,3"+htsz;
      else if (type<48)
        method+=","+itos(2+doe8)+",5,0,7"+sasz+"1c0,0,511";
      else if (type<900) {
        method+=","+itos(doe8)+"ci1,1,1,1,2a";
        if (type&1) method+="w";
        method+="m";
      }
      else
        method+=","+itos(3+doe8)+"ci1";
    }

    // Slow CM with lots of models
    else {  // 5..9

      // Model text files
      method+=","+itos(doe8);
      if (type&1) method+="w2c0,1010,255i1";
      else method+="w1i1";
      method+="c256ci1,1,1,1,1,1,2a";

      // Analyze the data
      const int NR=1<<12;
      int pt[256]={0};  // position of last occurrence
      int r[NR]={0};    // count repetition gaps of length r
      const unsigned char* p=in->data();
      if (level>0) {
        for (unsigned i=0; i<n; ++i) {
          const int k=i-pt[p[i]];
          if (k>0 && k<NR) ++r[k];
          pt[p[i]]=i;
        }
      }

      // Add periodic models
      int n1=n-r[1]-r[2]-r[3];
      for (int i=0; i<2; ++i) {
        int period=0;
        double score=0;
        int t=0;
        for (int j=5; j<NR && t<n1; ++j) {
          const double s=r[j]/(256.0+n1-t);
          if (s>score) score=s, period=j;
          t+=r[j];
        }
        if (period>4 && score>0.1) {
          method+="c0,0,"+itos(999+period)+",255i1";
          if (period<=255)
            method+="c0,"+itos(period)+"i1";
          n1-=r[period];
          r[period]=0;
        }
        else
          break;
      }
      method+="c0,2,0,255i1c0,3,0,0,255i1c0,4,0,0,0,255i1mm16ts19t0";
    }
  }

  // Compress
  std::string config;
  int args[9]={0};
  config=makeConfig(method.c_str(), args);
  assert(n<=(0x100000u<<args[0])-4096);
  libzpaq::Compressor co;
  co.setOutput(out);
#ifdef DEBUG
  co.setVerify(true);
#endif
  StringBuffer pcomp_cmd;
  co.writeTag();
  co.startBlock(config.c_str(), args, &pcomp_cmd);
  std::string cs=itos(n);
  if (comment) cs=cs+" "+comment;
  co.startSegment(filename, cs.c_str());
  if (args[1]>=1 && args[1]<=7 && args[1]!=4) {  // LZ77 or BWT
    LZBuffer lz(*in, args);
    co.setInput(&lz);
    co.compress();
  }
  else {  // compress with e8e9 or no preprocessing
    if (args[1]>=4 && args[1]<=7)
      e8e9(in->data(), in->size());
    co.setInput(in);
    co.compress();
  }
#ifdef DEBUG  // verify pre-post processing are inverses
  int64_t outsize;
  const char* sha1result=co.endSegmentChecksum(&outsize, dosha1);
  assert(sha1result);
  assert(sha1ptr);
  if (memcmp(sha1result, sha1ptr, 20)!=0)
    error("Pre/post-processor test failed");
#else
  co.endSegment(sha1ptr);
#endif
  co.endBlock();
}

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x24120, %rsp          # imm = 0x24120
movb %r9b, %al
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
andb $0x1, %al
movb %al, -0x29(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x24068(%rbp)
leaq -0x51(%rbp), %rdi
movq %rdi, -0x24060(%rbp)
callq 0x54a0
movq -0x24068(%rbp), %rsi
movq -0x24060(%rbp), %rdx
leaq -0x50(%rbp), %rdi
callq 0x6070
jmp 0x16b0b
leaq -0x51(%rbp), %rdi
callq 0x52c0
movq -0x8(%rbp), %rdi
callq 0x31600
movq %rax, -0x24070(%rbp)
jmp 0x16b26
movq -0x24070(%rbp), %rax
movl %eax, -0x68(%rbp)
movl -0x68(%rbp), %edi
addl $0xfff, %edi            # imm = 0xFFF
callq 0x226a0
subl $0x14, %eax
cmpl $0x0, %eax
jle 0x16b5f
movl -0x68(%rbp), %edi
addl $0xfff, %edi            # imm = 0xFFF
callq 0x226a0
subl $0x14, %eax
movl %eax, -0x24074(%rbp)
jmp 0x16b69
xorl %eax, %eax
movl %eax, -0x24074(%rbp)
jmp 0x16b69
movl -0x24074(%rbp), %eax
movl %eax, -0x6c(%rbp)
movl $0x0, -0x70(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x24080(%rbp)
jmp 0x16b8f
movq -0x24080(%rbp), %rax
movsbl (%rax), %edi
callq 0x5230
cmpl $0x0, %eax
je 0x16d52
movl $0x0, -0x74(%rbp)
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x5150
movl $0x1, -0x94(%rbp)
movl -0x94(%rbp), %eax
movl %eax, -0x24088(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x51c0
movl -0x24088(%rbp), %ecx
movl %eax, %edx
xorl %eax, %eax
cmpl %edx, %ecx
movb %al, -0x24081(%rbp)
jge 0x16c01
cmpl $0x4, -0x74(%rbp)
setl %al
movb %al, -0x24081(%rbp)
movb -0x24081(%rbp), %al
testb $0x1, %al
jne 0x16c10
jmp 0x16d2f
movslq -0x94(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x24090(%rbp)
jmp 0x16c29
movq -0x24090(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2c, %eax
je 0x16c60
movslq -0x94(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x24098(%rbp)
jmp 0x16c51
movq -0x24098(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2e, %eax
jne 0x16c99
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x16d19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x51(%rbp), %rdi
callq 0x52c0
jmp 0x186e1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x186d8
movslq -0x94(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x240a0(%rbp)
jmp 0x16cb2
movq -0x240a0(%rbp), %rax
movsbl (%rax), %edi
callq 0x5230
cmpl $0x0, %eax
je 0x16d17
movslq -0x74(%rbp), %rax
movl -0x90(%rbp,%rax,4), %ecx
addl %ecx, %ecx
movl %ecx, %eax
leal (%rax,%rax,4), %eax
movl %eax, -0x240ac(%rbp)
movslq -0x94(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x240a8(%rbp)
jmp 0x16cf7
movl -0x240ac(%rbp), %ecx
movq -0x240a8(%rbp), %rax
movsbl (%rax), %eax
addl %eax, %ecx
subl $0x30, %ecx
movslq -0x74(%rbp), %rax
movl %ecx, -0x90(%rbp,%rax,4)
jmp 0x16d19
jmp 0x16d1b
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x16bcb
cmpl $0x0, -0x74(%rbp)
jne 0x16d3e
movl $0x200, -0x70(%rbp)     # imm = 0x200
jmp 0x16d50
movl -0x8c(%rbp), %eax
shll $0x2, %eax
addl -0x88(%rbp), %eax
movl %eax, -0x70(%rbp)
jmp 0x16d52
leaq -0x108(%rbp), %rdi
callq 0x31a20
jmp 0x16d60
movq $0x0, -0x110(%rbp)
testb $0x1, -0x29(%rbp)
je 0x16dc0
movq -0x8(%rbp), %rdi
callq 0x31a40
movq %rax, -0x240b8(%rbp)
jmp 0x16d83
movq -0x240b8(%rbp), %rsi
movl -0x68(%rbp), %eax
movl %eax, %edx
leaq -0x108(%rbp), %rdi
callq 0x6880
jmp 0x16d9d
leaq -0x108(%rbp), %rdi
callq 0x66f0
movq %rax, -0x240c0(%rbp)
jmp 0x16db2
movq -0x240c0(%rbp), %rax
movq %rax, -0x110(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x240c8(%rbp)
jmp 0x16dd6
movq -0x240c8(%rbp), %rax
movsbl (%rax), %edi
callq 0x5230
cmpl $0x0, %eax
je 0x18310
xorl %eax, %eax
movl %eax, %esi
leaq -0x50(%rbp), %rdi
callq 0x5520
movq %rax, -0x240d0(%rbp)
jmp 0x16e04
movq -0x240d0(%rbp), %rax
movsbl (%rax), %eax
addl $-0x30, %eax
movl %eax, -0x114(%rbp)
movl -0x70(%rbp), %eax
andl $0x2, %eax
addl %eax, %eax
movl %eax, -0x118(%rbp)
movslq -0x6c(%rbp), %rsi
leaq -0x158(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x16e3c
leaq 0x21408(%rip), %rsi     # 0x3824b
leaq -0x138(%rbp), %rdi
leaq -0x158(%rbp), %rdx
callq 0x31850
jmp 0x16e58
leaq -0x50(%rbp), %rdi
leaq -0x138(%rbp), %rsi
movq %rsi, -0x240d8(%rbp)
callq 0x5340
movq -0x240d8(%rbp), %rdi
callq 0x5548
leaq -0x158(%rbp), %rdi
callq 0x5548
movl -0x6c(%rbp), %ecx
movl %ecx, %eax
subl $0x7, %eax
setl %al
movzbl %al, %edx
movl %ecx, %eax
movl %edx, %ecx
leal 0x13(%rax,%rcx), %eax
movslq %eax, %rsi
leaq -0x198(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x16eb3
leaq 0x23ffe(%rip), %rsi     # 0x3aeb8
leaq -0x178(%rbp), %rdi
leaq -0x198(%rbp), %rdx
callq 0x31850
jmp 0x16ecf
leaq -0x198(%rbp), %rdi
callq 0x5548
movl -0x6c(%rbp), %eax
addl $0x15, %eax
movslq %eax, %rsi
leaq -0x1d8(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x16ef7
leaq 0x23fba(%rip), %rsi     # 0x3aeb8
leaq -0x1b8(%rbp), %rdi
leaq -0x1d8(%rbp), %rdx
callq 0x31850
jmp 0x16f13
leaq -0x1d8(%rbp), %rdi
callq 0x5548
cmpl $0x0, -0x114(%rbp)
jne 0x17064
movslq -0x6c(%rbp), %rsi
leaq -0x238(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x16f43
leaq 0x23ed3(%rip), %rsi     # 0x3ae1d
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rdx
callq 0x31850
jmp 0x16f5f
leaq 0x23eb6(%rip), %rdx     # 0x3ae1c
leaq -0x1f8(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x31730
jmp 0x16f7b
leaq -0x50(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x5340
leaq -0x1f8(%rbp), %rdi
callq 0x5548
leaq -0x218(%rbp), %rdi
callq 0x5548
leaq -0x238(%rbp), %rdi
callq 0x5548
jmp 0x182d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x5548
jmp 0x186d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x198(%rbp), %rdi
callq 0x5548
jmp 0x186d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x182ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x5548
jmp 0x182ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x182f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17053
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x5548
leaq -0x238(%rbp), %rdi
callq 0x5548
jmp 0x182f3
cmpl $0x1, -0x114(%rbp)
jne 0x172d5
cmpl $0x28, -0x70(%rbp)
jae 0x1708e
leaq 0x23d9e(%rip), %rsi     # 0x3ae1c
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17089
jmp 0x172d0
movl -0x118(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq -0x298(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x170ac
leaq 0x23e05(%rip), %rsi     # 0x3aeb8
leaq -0x278(%rbp), %rdi
leaq -0x298(%rbp), %rdx
callq 0x31850
jmp 0x170c8
leaq 0x23de9(%rip), %rdx     # 0x3aeb8
leaq -0x258(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x31730
jmp 0x170e4
leaq -0x50(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x5360
jmp 0x170f6
leaq -0x258(%rbp), %rdi
callq 0x5548
leaq -0x278(%rbp), %rdi
callq 0x5548
leaq -0x298(%rbp), %rdi
callq 0x5548
cmpl $0x50, -0x70(%rbp)
jae 0x17188
leaq 0x23cf8(%rip), %rsi     # 0x3ae1f
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17132
jmp 0x172ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17177
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1716b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x5548
leaq -0x278(%rbp), %rdi
callq 0x5548
leaq -0x298(%rbp), %rdi
callq 0x5548
jmp 0x182f3
cmpl $0x80, -0x70(%rbp)
jae 0x171a8
leaq 0x23c90(%rip), %rsi     # 0x3ae28
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x171a3
jmp 0x172cc
cmpl $0x100, -0x70(%rbp)     # imm = 0x100
jae 0x1720d
leaq 0x23c79(%rip), %rsi     # 0x3ae31
leaq -0x2b8(%rbp), %rdi
leaq -0x178(%rbp), %rdx
callq 0x31a60
jmp 0x171cd
leaq -0x50(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x5360
jmp 0x171df
leaq -0x2b8(%rbp), %rdi
callq 0x5548
jmp 0x172ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
cmpl $0x3c0, -0x70(%rbp)     # imm = 0x3C0
jae 0x1726f
leaq 0x23c1a(%rip), %rsi     # 0x3ae37
leaq -0x2d8(%rbp), %rdi
leaq -0x178(%rbp), %rdx
callq 0x31a60
jmp 0x17232
leaq -0x50(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x5360
jmp 0x17244
leaq -0x2d8(%rbp), %rdi
callq 0x5548
jmp 0x172c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
leaq 0x23bc7(%rip), %rsi     # 0x3ae3d
leaq -0x2f8(%rbp), %rdi
leaq -0x178(%rbp), %rdx
callq 0x31a60
jmp 0x1728b
leaq -0x50(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x5360
jmp 0x1729d
leaq -0x2f8(%rbp), %rdi
callq 0x5548
jmp 0x172c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
jmp 0x172ca
jmp 0x172cc
jmp 0x172ce
jmp 0x172d0
jmp 0x182d7
cmpl $0x2, -0x114(%rbp)
jne 0x174e4
cmpl $0x20, -0x70(%rbp)
jae 0x172ff
leaq 0x23b2d(%rip), %rsi     # 0x3ae1c
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x172fa
jmp 0x174df
movl -0x118(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq -0x358(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x1731d
leaq 0x23b94(%rip), %rsi     # 0x3aeb8
leaq -0x338(%rbp), %rdi
leaq -0x358(%rbp), %rdx
callq 0x31850
jmp 0x17339
leaq 0x23b78(%rip), %rdx     # 0x3aeb8
leaq -0x318(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0x31730
jmp 0x17355
leaq -0x50(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x5360
jmp 0x17367
leaq -0x318(%rbp), %rdi
callq 0x5548
leaq -0x338(%rbp), %rdi
callq 0x5548
leaq -0x358(%rbp), %rdi
callq 0x5548
cmpl $0x40, -0x70(%rbp)
jae 0x17442
leaq 0x23ab1(%rip), %rsi     # 0x3ae4d
leaq -0x378(%rbp), %rdi
leaq -0x178(%rbp), %rdx
callq 0x31a60
jmp 0x173b1
leaq -0x50(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x5360
jmp 0x173c3
leaq -0x378(%rbp), %rdi
callq 0x5548
jmp 0x174dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17414
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17408
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x318(%rbp), %rdi
callq 0x5548
leaq -0x338(%rbp), %rdi
callq 0x5548
leaq -0x358(%rbp), %rdi
callq 0x5548
jmp 0x182f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x378(%rbp), %rdi
callq 0x5548
jmp 0x182f3
leaq 0x239fa(%rip), %rsi     # 0x3ae43
leaq -0x3b8(%rbp), %rdi
leaq -0x1b8(%rbp), %rdx
callq 0x31a60
jmp 0x1745e
leaq 0x239e4(%rip), %rdx     # 0x3ae49
leaq -0x398(%rbp), %rdi
leaq -0x3b8(%rbp), %rsi
callq 0x31730
jmp 0x1747a
leaq -0x50(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x5360
jmp 0x1748c
leaq -0x398(%rbp), %rdi
callq 0x5548
leaq -0x3b8(%rbp), %rdi
callq 0x5548
jmp 0x174dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x174cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x398(%rbp), %rdi
callq 0x5548
leaq -0x3b8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
jmp 0x174df
jmp 0x182d5
cmpl $0x3, -0x114(%rbp)
jne 0x178a7
cmpl $0x14, -0x70(%rbp)
jae 0x1750e
leaq 0x2391e(%rip), %rsi     # 0x3ae1c
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17509
jmp 0x178a2
cmpl $0x30, -0x70(%rbp)
jae 0x1763c
movl -0x118(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq -0x438(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17536
leaq 0x2397b(%rip), %rsi     # 0x3aeb8
leaq -0x418(%rbp), %rdi
leaq -0x438(%rbp), %rdx
callq 0x31850
jmp 0x17552
leaq 0x238f3(%rip), %rdx     # 0x3ae4c
leaq -0x3f8(%rbp), %rdi
leaq -0x418(%rbp), %rsi
callq 0x31730
jmp 0x1756e
leaq -0x3d8(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
leaq -0x178(%rbp), %rdx
callq 0x31540
jmp 0x1758a
leaq -0x50(%rbp), %rdi
leaq -0x3d8(%rbp), %rsi
callq 0x5360
jmp 0x1759c
leaq -0x3d8(%rbp), %rdi
callq 0x5548
leaq -0x3f8(%rbp), %rdi
callq 0x5548
leaq -0x418(%rbp), %rdi
callq 0x5548
leaq -0x438(%rbp), %rdi
callq 0x5548
jmp 0x178a0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1762b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1761f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17613
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x3d8(%rbp), %rdi
callq 0x5548
leaq -0x3f8(%rbp), %rdi
callq 0x5548
leaq -0x418(%rbp), %rdi
callq 0x5548
leaq -0x438(%rbp), %rdi
callq 0x5548
jmp 0x182f3
cmpl $0x280, -0x70(%rbp)     # imm = 0x280
jae 0x17654
movl -0x70(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x17737
movl -0x118(%rbp), %eax
addl $0x3, %eax
movslq %eax, %rsi
leaq -0x498(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17673
leaq 0x2383e(%rip), %rsi     # 0x3aeb8
leaq -0x478(%rbp), %rdi
leaq -0x498(%rbp), %rdx
callq 0x31850
jmp 0x1768f
leaq 0x237bd(%rip), %rdx     # 0x3ae53
leaq -0x458(%rbp), %rdi
leaq -0x478(%rbp), %rsi
callq 0x31730
jmp 0x176ab
leaq -0x50(%rbp), %rdi
leaq -0x458(%rbp), %rsi
callq 0x5360
jmp 0x176bd
leaq -0x458(%rbp), %rdi
callq 0x5548
leaq -0x478(%rbp), %rdi
callq 0x5548
leaq -0x498(%rbp), %rdi
callq 0x5548
jmp 0x1789e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17726
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1771a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x458(%rbp), %rdi
callq 0x5548
leaq -0x478(%rbp), %rdi
callq 0x5548
leaq -0x498(%rbp), %rdi
callq 0x5548
jmp 0x182f3
movl -0x118(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
leaq -0x538(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17756
leaq 0x2375b(%rip), %rsi     # 0x3aeb8
leaq -0x518(%rbp), %rdi
leaq -0x538(%rbp), %rdx
callq 0x31850
jmp 0x17772
leaq 0x236de(%rip), %rdx     # 0x3ae57
leaq -0x4f8(%rbp), %rdi
leaq -0x518(%rbp), %rsi
callq 0x31730
jmp 0x1778e
leaq -0x4d8(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
leaq -0x1b8(%rbp), %rdx
callq 0x31540
jmp 0x177aa
leaq 0x236ae(%rip), %rdx     # 0x3ae5f
leaq -0x4b8(%rbp), %rdi
leaq -0x4d8(%rbp), %rsi
callq 0x31730
jmp 0x177c6
leaq -0x50(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0x5360
jmp 0x177d8
leaq -0x4b8(%rbp), %rdi
callq 0x5548
leaq -0x4d8(%rbp), %rdi
callq 0x5548
leaq -0x4f8(%rbp), %rdi
callq 0x5548
leaq -0x518(%rbp), %rdi
callq 0x5548
leaq -0x538(%rbp), %rdi
callq 0x5548
jmp 0x1789e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1788d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17881
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17875
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x4b8(%rbp), %rdi
callq 0x5548
leaq -0x4d8(%rbp), %rdi
callq 0x5548
leaq -0x4f8(%rbp), %rdi
callq 0x5548
leaq -0x518(%rbp), %rdi
callq 0x5548
leaq -0x538(%rbp), %rdi
callq 0x5548
jmp 0x182f3
jmp 0x178a0
jmp 0x178a2
jmp 0x182d3
cmpl $0x4, -0x114(%rbp)
jne 0x17d77
cmpl $0xc, -0x70(%rbp)
jae 0x178d1
leaq 0x2355b(%rip), %rsi     # 0x3ae1c
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x178cc
jmp 0x17d72
cmpl $0x18, -0x70(%rbp)
jae 0x179ff
movl -0x118(%rbp), %eax
incl %eax
movslq %eax, %rsi
leaq -0x5b8(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x178f9
leaq 0x235b8(%rip), %rsi     # 0x3aeb8
leaq -0x598(%rbp), %rdi
leaq -0x5b8(%rbp), %rdx
callq 0x31850
jmp 0x17915
leaq 0x23530(%rip), %rdx     # 0x3ae4c
leaq -0x578(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x31730
jmp 0x17931
leaq -0x558(%rbp), %rdi
leaq -0x578(%rbp), %rsi
leaq -0x178(%rbp), %rdx
callq 0x31540
jmp 0x1794d
leaq -0x50(%rbp), %rdi
leaq -0x558(%rbp), %rsi
callq 0x5360
jmp 0x1795f
leaq -0x558(%rbp), %rdi
callq 0x5548
leaq -0x578(%rbp), %rdi
callq 0x5548
leaq -0x598(%rbp), %rdi
callq 0x5548
leaq -0x5b8(%rbp), %rdi
callq 0x5548
jmp 0x17d70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x179ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x179e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x179d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x5548
leaq -0x578(%rbp), %rdi
callq 0x5548
leaq -0x598(%rbp), %rdi
callq 0x5548
leaq -0x5b8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
cmpl $0x30, -0x70(%rbp)
jae 0x17b70
movl -0x118(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
leaq -0x658(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17a28
leaq 0x23489(%rip), %rsi     # 0x3aeb8
leaq -0x638(%rbp), %rdi
leaq -0x658(%rbp), %rdx
callq 0x31850
jmp 0x17a44
leaq 0x23421(%rip), %rdx     # 0x3ae6c
leaq -0x618(%rbp), %rdi
leaq -0x638(%rbp), %rsi
callq 0x31730
jmp 0x17a60
leaq -0x5f8(%rbp), %rdi
leaq -0x618(%rbp), %rsi
leaq -0x1b8(%rbp), %rdx
callq 0x31540
jmp 0x17a7c
leaq 0x233f0(%rip), %rdx     # 0x3ae73
leaq -0x5d8(%rbp), %rdi
leaq -0x5f8(%rbp), %rsi
callq 0x31730
jmp 0x17a98
leaq -0x50(%rbp), %rdi
leaq -0x5d8(%rbp), %rsi
callq 0x5360
jmp 0x17aaa
leaq -0x5d8(%rbp), %rdi
callq 0x5548
leaq -0x5f8(%rbp), %rdi
callq 0x5548
leaq -0x618(%rbp), %rdi
callq 0x5548
leaq -0x638(%rbp), %rdi
callq 0x5548
leaq -0x658(%rbp), %rdi
callq 0x5548
jmp 0x17d6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17b5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17b53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17b47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17b3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x5d8(%rbp), %rdi
callq 0x5548
leaq -0x5f8(%rbp), %rdi
callq 0x5548
leaq -0x618(%rbp), %rdi
callq 0x5548
leaq -0x638(%rbp), %rdi
callq 0x5548
leaq -0x658(%rbp), %rdi
callq 0x5548
jmp 0x182f3
cmpl $0x384, -0x70(%rbp)     # imm = 0x384
jae 0x17c8c
movslq -0x118(%rbp), %rsi
leaq -0x6b8(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17b97
leaq 0x2331a(%rip), %rsi     # 0x3aeb8
leaq -0x698(%rbp), %rdi
leaq -0x6b8(%rbp), %rdx
callq 0x31850
jmp 0x17bb3
leaq 0x232c3(%rip), %rdx     # 0x3ae7d
leaq -0x678(%rbp), %rdi
leaq -0x698(%rbp), %rsi
callq 0x31730
jmp 0x17bcf
leaq -0x50(%rbp), %rdi
leaq -0x678(%rbp), %rsi
callq 0x5360
jmp 0x17be1
leaq -0x678(%rbp), %rdi
callq 0x5548
leaq -0x698(%rbp), %rdi
callq 0x5548
leaq -0x6b8(%rbp), %rdi
callq 0x5548
movl -0x70(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x17c75
leaq 0x20a5c(%rip), %rsi     # 0x38673
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17c22
jmp 0x17c75
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17c64
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17c58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x678(%rbp), %rdi
callq 0x5548
leaq -0x698(%rbp), %rdi
callq 0x5548
leaq -0x6b8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
leaq 0x2048b(%rip), %rsi     # 0x38107
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17c87
jmp 0x17d6c
movl -0x118(%rbp), %eax
addl $0x3, %eax
movslq %eax, %rsi
leaq -0x718(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17cab
leaq 0x23206(%rip), %rsi     # 0x3aeb8
leaq -0x6f8(%rbp), %rdi
leaq -0x718(%rbp), %rdx
callq 0x31850
jmp 0x17cc7
leaq 0x23185(%rip), %rdx     # 0x3ae53
leaq -0x6d8(%rbp), %rdi
leaq -0x6f8(%rbp), %rsi
callq 0x31730
jmp 0x17ce3
leaq -0x50(%rbp), %rdi
leaq -0x6d8(%rbp), %rsi
callq 0x5360
jmp 0x17cf5
leaq -0x6d8(%rbp), %rdi
callq 0x5548
leaq -0x6f8(%rbp), %rdi
callq 0x5548
leaq -0x718(%rbp), %rdi
callq 0x5548
jmp 0x17d6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17d5b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17d4f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x6d8(%rbp), %rdi
callq 0x5548
leaq -0x6f8(%rbp), %rdi
callq 0x5548
leaq -0x718(%rbp), %rdi
callq 0x5548
jmp 0x182f3
jmp 0x17d6e
jmp 0x17d70
jmp 0x17d72
jmp 0x182d1
movslq -0x118(%rbp), %rsi
leaq -0x758(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x17d91
leaq 0x23120(%rip), %rsi     # 0x3aeb8
leaq -0x738(%rbp), %rdi
leaq -0x758(%rbp), %rdx
callq 0x31850
jmp 0x17dad
leaq -0x50(%rbp), %rdi
leaq -0x738(%rbp), %rsi
callq 0x5360
jmp 0x17dbf
leaq -0x738(%rbp), %rdi
callq 0x5548
leaq -0x758(%rbp), %rdi
callq 0x5548
movl -0x70(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x17e2d
leaq 0x230a1(%rip), %rsi     # 0x3ae8a
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17df4
jmp 0x17e41
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x17e1c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x738(%rbp), %rdi
callq 0x5548
leaq -0x758(%rbp), %rdi
callq 0x5548
jmp 0x182f3
leaq 0x23066(%rip), %rsi     # 0x3ae9a
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17e3f
jmp 0x17e41
leaq 0x23057(%rip), %rsi     # 0x3ae9f
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x17e53
movl $0x1000, -0x75c(%rbp)   # imm = 0x1000
leaq -0xb60(%rbp), %rdi
xorl %esi, %esi
movl %esi, -0x240e4(%rbp)
movl $0x400, %edx            # imm = 0x400
callq 0x5150
movl -0x240e4(%rbp), %esi
leaq -0x4b60(%rbp), %rdi
movl $0x4000, %edx           # imm = 0x4000
callq 0x5150
movq -0x8(%rbp), %rdi
callq 0x313e0
movq %rax, -0x240e0(%rbp)
jmp 0x17e9f
movq -0x240e0(%rbp), %rax
movq %rax, -0x4b68(%rbp)
cmpl $0x0, -0x114(%rbp)
jle 0x17f58
movl $0x0, -0x4b6c(%rbp)
movl -0x4b6c(%rbp), %eax
cmpl -0x68(%rbp), %eax
jae 0x17f56
movl -0x4b6c(%rbp), %eax
movq -0x4b68(%rbp), %rcx
movl -0x4b6c(%rbp), %edx
movzbl (%rcx,%rdx), %ecx
subl -0xb60(%rbp,%rcx,4), %eax
movl %eax, -0x4b70(%rbp)
cmpl $0x0, -0x4b70(%rbp)
jle 0x17f24
cmpl $0x1000, -0x4b70(%rbp)  # imm = 0x1000
jge 0x17f24
movslq -0x4b70(%rbp), %rax
movl -0x4b60(%rbp,%rax,4), %ecx
addl $0x1, %ecx
movl %ecx, -0x4b60(%rbp,%rax,4)
movl -0x4b6c(%rbp), %ecx
movq -0x4b68(%rbp), %rax
movl -0x4b6c(%rbp), %edx
movzbl (%rax,%rdx), %eax
movl %ecx, -0xb60(%rbp,%rax,4)
movl -0x4b6c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4b6c(%rbp)
jmp 0x17ec4
jmp 0x17f58
movl -0x68(%rbp), %eax
subl -0x4b5c(%rbp), %eax
subl -0x4b58(%rbp), %eax
subl -0x4b54(%rbp), %eax
movl %eax, -0x4b74(%rbp)
movl $0x0, -0x4b78(%rbp)
cmpl $0x2, -0x4b78(%rbp)
jge 0x182bd
movl $0x0, -0x4b7c(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x4b88(%rbp)
movl $0x0, -0x4b8c(%rbp)
movl $0x5, -0x4b90(%rbp)
xorl %eax, %eax
cmpl $0x1000, -0x4b90(%rbp)  # imm = 0x1000
movb %al, -0x240e5(%rbp)
jge 0x17fdc
movl -0x4b8c(%rbp), %eax
cmpl -0x4b74(%rbp), %eax
setl %al
movb %al, -0x240e5(%rbp)
movb -0x240e5(%rbp), %al
testb $0x1, %al
jne 0x17feb
jmp 0x18083
movslq -0x4b90(%rbp), %rax
cvtsi2sdl -0x4b60(%rbp,%rax,4), %xmm0
cvtsi2sdl -0x4b74(%rbp), %xmm2
movsd 0x1c36d(%rip), %xmm1    # 0x34378
addsd %xmm2, %xmm1
cvtsi2sdl -0x4b8c(%rbp), %xmm2
subsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x4b98(%rbp)
movsd -0x4b98(%rbp), %xmm0
ucomisd -0x4b88(%rbp), %xmm0
jbe 0x18055
movsd -0x4b98(%rbp), %xmm0
movsd %xmm0, -0x4b88(%rbp)
movl -0x4b90(%rbp), %eax
movl %eax, -0x4b7c(%rbp)
movslq -0x4b90(%rbp), %rax
movl -0x4b60(%rbp,%rax,4), %eax
addl -0x4b8c(%rbp), %eax
movl %eax, -0x4b8c(%rbp)
movl -0x4b90(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4b90(%rbp)
jmp 0x17fb3
cmpl $0x4, -0x4b7c(%rbp)
jle 0x182a5
movsd -0x4b88(%rbp), %xmm0
movsd 0x1c2d0(%rip), %xmm1    # 0x34370
ucomisd %xmm1, %xmm0
jbe 0x182a5
movl -0x4b7c(%rbp), %eax
addl $0x3e7, %eax            # imm = 0x3E7
movslq %eax, %rsi
leaq -0x4bf8(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x180cb
leaq 0x22de2(%rip), %rsi     # 0x3aeb4
leaq -0x4bd8(%rbp), %rdi
leaq -0x4bf8(%rbp), %rdx
callq 0x31850
jmp 0x180e7
leaq 0x22da5(%rip), %rdx     # 0x3ae93
leaq -0x4bb8(%rbp), %rdi
leaq -0x4bd8(%rbp), %rsi
callq 0x31730
jmp 0x18103
leaq -0x50(%rbp), %rdi
leaq -0x4bb8(%rbp), %rsi
callq 0x5360
jmp 0x18115
leaq -0x4bb8(%rbp), %rdi
callq 0x5548
leaq -0x4bd8(%rbp), %rdi
callq 0x5548
leaq -0x4bf8(%rbp), %rdi
callq 0x5548
cmpl $0xff, -0x4b7c(%rbp)
jg 0x18275
movslq -0x4b7c(%rbp), %rsi
leaq -0x4c58(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x18163
leaq 0x22d50(%rip), %rsi     # 0x3aeba
leaq -0x4c38(%rbp), %rdi
leaq -0x4c58(%rbp), %rdx
callq 0x31850
jmp 0x1817f
leaq 0x22d16(%rip), %rdx     # 0x3ae9c
leaq -0x4c18(%rbp), %rdi
leaq -0x4c38(%rbp), %rsi
callq 0x31730
jmp 0x1819b
leaq -0x50(%rbp), %rdi
leaq -0x4c18(%rbp), %rsi
callq 0x5360
jmp 0x181ad
leaq -0x4c18(%rbp), %rdi
callq 0x5548
leaq -0x4c38(%rbp), %rdi
callq 0x5548
leaq -0x4c58(%rbp), %rdi
callq 0x5548
jmp 0x18275
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x18216
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1820a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x4bb8(%rbp), %rdi
callq 0x5548
leaq -0x4bd8(%rbp), %rdi
callq 0x5548
leaq -0x4bf8(%rbp), %rdi
callq 0x5548
jmp 0x182f3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x18267
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x1825b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x4c18(%rbp), %rdi
callq 0x5548
leaq -0x4c38(%rbp), %rdi
callq 0x5548
leaq -0x4c58(%rbp), %rdi
callq 0x5548
jmp 0x182f3
movslq -0x4b7c(%rbp), %rax
movl -0x4b60(%rbp,%rax,4), %ecx
movl -0x4b74(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x4b74(%rbp)
movslq -0x4b7c(%rbp), %rax
movl $0x0, -0x4b60(%rbp,%rax,4)
jmp 0x182a7
jmp 0x182bd
jmp 0x182a9
movl -0x4b78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4b78(%rbp)
jmp 0x17f7d
leaq 0x22bfa(%rip), %rsi     # 0x3aebe
leaq -0x50(%rbp), %rdi
callq 0x5250
jmp 0x182cf
jmp 0x182d1
jmp 0x182d3
jmp 0x182d5
jmp 0x182d7
jmp 0x182d9
leaq -0x1b8(%rbp), %rdi
callq 0x5548
leaq -0x178(%rbp), %rdi
callq 0x5548
jmp 0x18310
leaq -0x1b8(%rbp), %rdi
callq 0x5548
leaq -0x178(%rbp), %rdi
callq 0x5548
jmp 0x186d8
leaq -0x4c78(%rbp), %rdi
callq 0x53a0
xorps %xmm0, %xmm0
movaps %xmm0, -0x4c90(%rbp)
movaps %xmm0, -0x4ca0(%rbp)
movl $0x0, -0x4c80(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x5110
movq %rax, %rsi
leaq -0x4cc0(%rbp), %rdi
leaq -0x4ca0(%rbp), %rdx
callq 0x23cf0
jmp 0x18358
leaq -0x4c78(%rbp), %rdi
leaq -0x4cc0(%rbp), %rsi
movq %rsi, -0x240f0(%rbp)
callq 0x5340
movq -0x240f0(%rbp), %rdi
callq 0x5548
leaq -0x1ff28(%rbp), %rdi
callq 0x31b70
jmp 0x1838c
movq -0x10(%rbp), %rsi
leaq -0x1ff28(%rbp), %rdi
callq 0x31c50
jmp 0x1839e
xorl %eax, %eax
movl %eax, %esi
leaq -0x1ff68(%rbp), %rdi
callq 0x312c0
jmp 0x183b0
leaq -0x1ff28(%rbp), %rdi
callq 0x15c70
jmp 0x183be
leaq -0x4c78(%rbp), %rdi
callq 0x5110
movq %rax, -0x24108(%rbp)
leaq -0x4ca0(%rbp), %rax
movq %rax, -0x24100(%rbp)
xorl %eax, %eax
leaq -0x1ff68(%rbp), %rcx
cmpq $0x0, %rcx
movq %rax, -0x240f8(%rbp)
je 0x18407
leaq -0x1ff68(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x240f8(%rbp)
movq -0x24100(%rbp), %rdx
movq -0x24108(%rbp), %rsi
movq -0x240f8(%rbp), %rcx
leaq -0x1ff28(%rbp), %rdi
callq 0x15fa0
jmp 0x1842a
movl -0x68(%rbp), %eax
movl %eax, %esi
leaq -0x1ff88(%rbp), %rdi
movl $0x1, %edx
callq 0x22420
jmp 0x18442
cmpq $0x0, -0x28(%rbp)
je 0x18510
leaq 0x228d6(%rip), %rdx     # 0x3ad2a
leaq -0x1ffc8(%rbp), %rdi
leaq -0x1ff88(%rbp), %rsi
callq 0x31c70
jmp 0x18469
movq -0x28(%rbp), %rdx
leaq -0x1ffa8(%rbp), %rdi
leaq -0x1ffc8(%rbp), %rsi
callq 0x31730
jmp 0x18482
leaq -0x1ff88(%rbp), %rdi
leaq -0x1ffa8(%rbp), %rsi
callq 0x5340
leaq -0x1ffa8(%rbp), %rdi
callq 0x5548
leaq -0x1ffc8(%rbp), %rdi
callq 0x5548
jmp 0x18510
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x186cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x186c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x186b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x186a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1ffc8(%rbp), %rdi
callq 0x5548
jmp 0x186a8
movq -0x20(%rbp), %rax
movq %rax, -0x24110(%rbp)
leaq -0x1ff88(%rbp), %rdi
callq 0x5110
movq -0x24110(%rbp), %rsi
movq %rax, %rdx
leaq -0x1ff28(%rbp), %rdi
callq 0x160e0
jmp 0x1853f
cmpl $0x1, -0x4c9c(%rbp)
jl 0x185d1
cmpl $0x7, -0x4c9c(%rbp)
jg 0x185d1
cmpl $0x4, -0x4c9c(%rbp)
je 0x185d1
movq -0x8(%rbp), %rsi
xorl %eax, %eax
movl %eax, %ecx
leaq -0x24058(%rbp), %rdi
leaq -0x4ca0(%rbp), %rdx
callq 0x233f0
jmp 0x1857b
leaq -0x1ff28(%rbp), %rdi
leaq -0x24058(%rbp), %rsi
callq 0x31cf0
jmp 0x18590
leaq -0x1ff28(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x16390
jmp 0x185a3
leaq -0x24058(%rbp), %rdi
callq 0x31d10
jmp 0x18643
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x24058(%rbp), %rdi
callq 0x31d10
jmp 0x186a8
cmpl $0x4, -0x4c9c(%rbp)
jl 0x1861c
cmpl $0x7, -0x4c9c(%rbp)
jg 0x1861c
movq -0x8(%rbp), %rdi
callq 0x313e0
movq %rax, -0x24118(%rbp)
jmp 0x185f5
movq -0x8(%rbp), %rdi
callq 0x31600
movq %rax, -0x24120(%rbp)
jmp 0x18607
movq -0x24118(%rbp), %rdi
movq -0x24120(%rbp), %rax
movl %eax, %esi
callq 0x225a0
movq -0x8(%rbp), %rsi
leaq -0x1ff28(%rbp), %rdi
callq 0x31cf0
jmp 0x1862e
leaq -0x1ff28(%rbp), %rdi
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
callq 0x16390
jmp 0x18641
jmp 0x18643
movq -0x110(%rbp), %rsi
leaq -0x1ff28(%rbp), %rdi
callq 0x16550
jmp 0x18658
leaq -0x1ff28(%rbp), %rdi
callq 0x16890
jmp 0x18666
leaq -0x1ff88(%rbp), %rdi
callq 0x5548
leaq -0x1ff68(%rbp), %rdi
callq 0x31440
leaq -0x1ff28(%rbp), %rdi
callq 0x31d50
leaq -0x4c78(%rbp), %rdi
callq 0x5548
leaq -0x50(%rbp), %rdi
callq 0x5548
addq $0x24120, %rsp          # imm = 0x24120
popq %rbp
retq
leaq -0x1ff88(%rbp), %rdi
callq 0x5548
leaq -0x1ff68(%rbp), %rdi
callq 0x31440
leaq -0x1ff28(%rbp), %rdi
callq 0x31d50
leaq -0x4c78(%rbp), %rdi
callq 0x5548
leaq -0x50(%rbp), %rdi
callq 0x5548
movq -0x60(%rbp), %rdi
callq 0x5490
nopw (%rax,%rax)