// File: temelmertcan[P]multgen/src/pp_gen.cpp
// Function: create_br2pp(int, int, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>**&, int&, int&, std::__cxx11::list<int, std::allocator<int>>&, bool, std::queue<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::deque<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>&)
void create_br2pp (int m, int n, bool signed_mul,
                   string**& pp_matrix,
                   int& pp_dim1,
                   int& pp_dim2,
                   std::list<int>& extra_ones_indices,
		   bool allowXes,
                   std::queue<string>& verilog){

  // m multiplier size,
  // n multiplicand size,

  if (signed_mul) {
    verilog.push ("wire [" + to_string(m-1) + ":0] mult = IN1;");
    verilog.push ("wire [" + to_string(n-1) + ":0] mcand = IN2;");
  } else {
    verilog.push ("wire [" + to_string(m) + ":0] mult = {1'b0, IN1};");
    verilog.push ("wire [" + to_string(n) + ":0] mcand = {1'b0, IN2};");
    m++;
    n++;
  }

  int pp_msb = n-1;
  pp_dim1 = m+2; // number of rows
  int size_to_fit_all_pp = pp_msb + m;
  pp_dim2 = max(n+m, size_to_fit_all_pp); // number of columns

  pp_matrix = new string*[pp_dim1];
  // make sure it starts empty.
  for (int i = 0; i < pp_dim1; i++){
    pp_matrix[i] = new string[pp_dim2];
    for (int j = 0; j < pp_dim2; j++)
      pp_matrix[i][j] = "";
  }

  /////
  // verilog.push ("wire [" + to_string(pp_msb) + ":0] mcand_1x;");
  // verilog.push ("assign mcand_1x = {{"+to_string(pp_msb - n + 1)+"{mcand["+ to_string(n-1) +"]}},  mcand};");

  /////

  for (int i = 0; i < m; i++){
    verilog.push ("");
    string m0 = (i == 0 ? "1'b0" : "mult[" + to_string(i-1) + "]");
    string m1 = "mult[" + to_string(i) + "]";

    verilog.push ("// Booth Radix-2 Partial Products. Multiplier selectors: " + m1 + " " + m0);

    string select_e = "select_e_" + to_string(i);
    string select_ne = "select_ne_" + to_string(i);
    string cmp = "tcomp" + to_string(i);

    verilog.push ( "wire logic " + select_e
                   + ", " + cmp
                   + ", " + select_ne
                   + ";");

    verilog.push ("assign " + select_e +
                  " = ~" + m1 + " & " + m0 + ";");// +
    //" | ((~ " + m2 + ") & (~ " + m0 + ") & " + m1 + ");");

    verilog.push ("assign " + select_ne +
                  " = " + m1 + " & ~" + m0 + ";");// +

    //////
    string cur_pp = "pp_" + to_string(i);
    verilog.push ("wire ["+ to_string(pp_msb) +":0] " + cur_pp + ";");
    verilog.push ("assign " + cur_pp + " = (1<<" + to_string(pp_msb) + ") ^ // flip the MSB ");
    verilog.push ("               ((" +  select_e   + " ? mcand : 0) | ");
    verilog.push ("                (" +  select_ne  + " ? (~ mcand) : 0)); " );

    verilog.push ("assign " + cmp + " = " + select_ne + ";");

  }

  for (int i = 0; i < pp_dim1-2; i++){
    pp_matrix[i] = new string[pp_dim2];
    for (int j = 0; j < i; j++){
      pp_matrix[i][j] = "";
    }
    for (int j = 0; j <= pp_msb && j+i < pp_dim2 ; j++){
      string cur;
      cur = "pp_" + to_string(i) + "[" + to_string(j) + "]";
      pp_matrix[i][j+i] = cur;
    }
  }

  // add tcomps for the extra 1 needed for twos complemented partial products
  pp_matrix[pp_dim1-2] = new string[pp_dim2];
  for (int j = 0; j < m; j+=1){
    pp_matrix[pp_dim1-2][j] = "tcomp"  + to_string(j);
  }

  for (int j = pp_msb; j < size_to_fit_all_pp; j += 1){
    extra_ones_indices.push_back(j);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb30, %rsp            # imm = 0xB30
movq 0x20(%rbp), %rax
movb 0x18(%rbp), %al
movq 0x10(%rbp), %r10
movl %edi, -0x4(%rbp)
movl %esi, -0x8(%rbp)
andb $0x1, %dl
movb %dl, -0x9(%rbp)
movq %rcx, -0x18(%rbp)
movq %r8, -0x20(%rbp)
movq %r9, -0x28(%rbp)
andb $0x1, %al
movb %al, -0x29(%rbp)
testb $0x1, -0x9(%rbp)
je 0x30a18
movq 0x20(%rbp), %rax
movq %rax, -0xa00(%rbp)
movl -0x4(%rbp), %esi
decl %esi
leaq -0x90(%rbp), %rdi
movq %rdi, -0x9f8(%rbp)
callq 0x1e700
movq -0x9f8(%rbp), %rdx
leaq 0x274f3(%rip), %rsi     # 0x57d61
leaq -0x70(%rbp), %rdi
callq 0x1e930
jmp 0x30879
leaq 0x28702(%rip), %rdx     # 0x58f82
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x1e560
jmp 0x3088f
movq -0xa00(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x1e3c0
jmp 0x308a1
leaq -0x50(%rbp), %rdi
callq 0x31a0
leaq -0x70(%rbp), %rdi
callq 0x31a0
leaq -0x90(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa10(%rbp)
movl -0x8(%rbp), %esi
decl %esi
leaq -0x100(%rbp), %rdi
movq %rdi, -0xa08(%rbp)
callq 0x1e700
movq -0xa08(%rbp), %rdx
leaq 0x27471(%rip), %rsi     # 0x57d61
leaq -0xe0(%rbp), %rdi
callq 0x1e930
jmp 0x308fe
leaq 0x2868d(%rip), %rdx     # 0x58f92
leaq -0xc0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x1e560
jmp 0x3091a
movq -0xa10(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x1e3c0
jmp 0x3092f
leaq -0xc0(%rbp), %rdi
callq 0x31a0
leaq -0xe0(%rbp), %rdi
callq 0x31a0
leaq -0x100(%rbp), %rdi
callq 0x31a0
jmp 0x30c19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x309a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3099b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x31a0
leaq -0x70(%rbp), %rdi
callq 0x31a0
leaq -0x90(%rbp), %rdi
callq 0x31a0
jmp 0x32542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x30a07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x309fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x31a0
leaq -0xe0(%rbp), %rdi
callq 0x31a0
leaq -0x100(%rbp), %rdi
callq 0x31a0
jmp 0x32542
movq 0x20(%rbp), %rax
movq %rax, -0xa20(%rbp)
movl -0x4(%rbp), %esi
leaq -0x160(%rbp), %rdi
movq %rdi, -0xa18(%rbp)
callq 0x1e700
movq -0xa18(%rbp), %rdx
leaq 0x2731a(%rip), %rsi     # 0x57d61
leaq -0x140(%rbp), %rdi
callq 0x1e930
jmp 0x30a55
leaq 0x28547(%rip), %rdx     # 0x58fa3
leaq -0x120(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x1e560
jmp 0x30a71
movq -0xa20(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x1e3c0
jmp 0x30a86
leaq -0x120(%rbp), %rdi
callq 0x31a0
leaq -0x140(%rbp), %rdi
callq 0x31a0
leaq -0x160(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa30(%rbp)
movl -0x8(%rbp), %esi
leaq -0x1c0(%rbp), %rdi
movq %rdi, -0xa28(%rbp)
callq 0x1e700
movq -0xa28(%rbp), %rdx
leaq 0x27288(%rip), %rsi     # 0x57d61
leaq -0x1a0(%rbp), %rdi
callq 0x1e930
jmp 0x30ae7
leaq 0x284cd(%rip), %rdx     # 0x58fbb
leaq -0x180(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x1e560
jmp 0x30b03
movq -0xa30(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x1e3c0
jmp 0x30b18
leaq -0x180(%rbp), %rdi
callq 0x31a0
leaq -0x1a0(%rbp), %rdi
callq 0x31a0
leaq -0x1c0(%rbp), %rdi
callq 0x31a0
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0x30c19
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x30ba5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x30b99
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x31a0
leaq -0x140(%rbp), %rdi
callq 0x31a0
leaq -0x160(%rbp), %rdi
callq 0x31a0
jmp 0x32542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x30c08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x30bfc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x31a0
leaq -0x1a0(%rbp), %rdi
callq 0x31a0
leaq -0x1c0(%rbp), %rdi
callq 0x31a0
jmp 0x32542
movl -0x8(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x1c4(%rbp)
movl -0x4(%rbp), %ecx
addl $0x2, %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl -0x1c4(%rbp), %eax
addl -0x4(%rbp), %eax
movl %eax, -0x1c8(%rbp)
movl -0x8(%rbp), %eax
addl -0x4(%rbp), %eax
movl %eax, -0x1cc(%rbp)
leaq -0x1cc(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x1e520
movl (%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
movslq (%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movl $0x0, -0x1d0(%rbp)
movl -0x1d0(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x30de6
movq -0x28(%rbp), %rax
movslq (%rax), %rax
movq %rax, -0xa40(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0xa40(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0xa38(%rbp)
cmpq $0x0, %rax
je 0x30d62
movq -0xa38(%rbp), %rax
movq -0xa40(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0xa50(%rbp)
movq %rax, -0xa48(%rbp)
movq -0xa48(%rbp), %rdi
movq %rdi, -0xa58(%rbp)
callq 0x3330
movq -0xa58(%rbp), %rax
movq -0xa50(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0xa48(%rbp)
jne 0x30d31
movq -0xa38(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rax
movslq -0x1d0(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, -0x1d4(%rbp)
movl -0x1d4(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x30dd0
movq -0x18(%rbp), %rax
movq (%rax), %rax
movslq -0x1d0(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x1d4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq 0x28827(%rip), %rsi     # 0x595e1
callq 0x3310
movl -0x1d4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1d4(%rbp)
jmp 0x30d85
jmp 0x30dd2
movl -0x1d0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1d0(%rbp)
jmp 0x30ca3
movl $0x0, -0x1d8(%rbp)
movl -0x1d8(%rbp), %eax
cmpl -0x4(%rbp), %eax
jge 0x31fa6
movq 0x20(%rbp), %rax
movq %rax, -0xa68(%rbp)
leaq -0x1f9(%rbp), %rdi
movq %rdi, -0xa60(%rbp)
callq 0x3430
movq -0xa60(%rbp), %rdx
leaq 0x287b6(%rip), %rsi     # 0x595e1
leaq -0x1f8(%rbp), %rdi
callq 0x3320
jmp 0x30e39
movq -0xa68(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x1e3c0
jmp 0x30e4e
leaq -0x1f8(%rbp), %rdi
callq 0x31a0
leaq -0x1f9(%rbp), %rdi
callq 0x32a0
movl -0x1d8(%rbp), %eax
movb $0x0, -0x222(%rbp)
movb $0x0, -0x269(%rbp)
movb $0x0, -0x26a(%rbp)
cmpl $0x0, %eax
jne 0x30ebe
leaq -0x221(%rbp), %rdi
movq %rdi, -0xa70(%rbp)
callq 0x3430
movq -0xa70(%rbp), %rdx
movb $0x1, -0x222(%rbp)
leaq 0x28126(%rip), %rsi     # 0x58fd4
leaq -0x220(%rbp), %rdi
callq 0x3320
jmp 0x30ebc
jmp 0x30f1c
movl -0x1d8(%rbp), %esi
decl %esi
leaq -0x268(%rbp), %rdi
callq 0x1e700
jmp 0x30ed4
movb $0x1, -0x269(%rbp)
leaq 0x280f7(%rip), %rsi     # 0x58fd9
leaq -0x248(%rbp), %rdi
leaq -0x268(%rbp), %rdx
callq 0x1e930
jmp 0x30ef7
movb $0x1, -0x26a(%rbp)
leaq 0x26f17(%rip), %rdx     # 0x57e1c
leaq -0x220(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x1e560
jmp 0x30f1a
jmp 0x30f1c
testb $0x1, -0x26a(%rbp)
jne 0x30f27
jmp 0x30f33
leaq -0x248(%rbp), %rdi
callq 0x31a0
testb $0x1, -0x269(%rbp)
jne 0x30f3e
jmp 0x30f4a
leaq -0x268(%rbp), %rdi
callq 0x31a0
testb $0x1, -0x222(%rbp)
jne 0x30f55
jmp 0x30f61
leaq -0x221(%rbp), %rdi
callq 0x32a0
movl -0x1d8(%rbp), %esi
leaq -0x2d0(%rbp), %rdi
callq 0x1e700
jmp 0x30f75
leaq 0x2805d(%rip), %rsi     # 0x58fd9
leaq -0x2b0(%rbp), %rdi
leaq -0x2d0(%rbp), %rdx
callq 0x1e930
jmp 0x30f91
leaq 0x26e84(%rip), %rdx     # 0x57e1c
leaq -0x290(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x1e560
jmp 0x30fad
leaq -0x2b0(%rbp), %rdi
callq 0x31a0
leaq -0x2d0(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa78(%rbp)
leaq 0x28008(%rip), %rsi     # 0x58fdf
leaq -0x330(%rbp), %rdi
leaq -0x290(%rbp), %rdx
callq 0x1e820
jmp 0x30fec
leaq 0x25c24(%rip), %rdx     # 0x56c17
leaq -0x310(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x1e560
jmp 0x31008
leaq -0x2f0(%rbp), %rdi
leaq -0x310(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0x1e980
jmp 0x31024
movq -0xa78(%rbp), %rdi
leaq -0x2f0(%rbp), %rsi
callq 0x1e3c0
jmp 0x31039
leaq -0x2f0(%rbp), %rdi
callq 0x31a0
leaq -0x310(%rbp), %rdi
callq 0x31a0
leaq -0x330(%rbp), %rdi
callq 0x31a0
movl -0x1d8(%rbp), %esi
leaq -0x370(%rbp), %rdi
callq 0x1e700
jmp 0x31071
leaq 0x27fa1(%rip), %rsi     # 0x59019
leaq -0x350(%rbp), %rdi
leaq -0x370(%rbp), %rdx
callq 0x1e930
jmp 0x3108d
leaq -0x370(%rbp), %rdi
callq 0x31a0
movl -0x1d8(%rbp), %esi
leaq -0x3b0(%rbp), %rdi
callq 0x1e700
jmp 0x310ad
leaq 0x27f6f(%rip), %rsi     # 0x59023
leaq -0x390(%rbp), %rdi
leaq -0x3b0(%rbp), %rdx
callq 0x1e930
jmp 0x310c9
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
movl -0x1d8(%rbp), %esi
leaq -0x3f0(%rbp), %rdi
callq 0x1e700
jmp 0x310e9
leaq 0x27f3e(%rip), %rsi     # 0x5902e
leaq -0x3d0(%rbp), %rdi
leaq -0x3f0(%rbp), %rdx
callq 0x1e930
jmp 0x31105
leaq -0x3f0(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa80(%rbp)
leaq 0x27b46(%rip), %rsi     # 0x58c69
leaq -0x4b0(%rbp), %rdi
leaq -0x350(%rbp), %rdx
callq 0x1e820
jmp 0x31138
leaq 0x274ba(%rip), %rdx     # 0x585f9
leaq -0x490(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
callq 0x1e560
jmp 0x31154
leaq -0x470(%rbp), %rdi
leaq -0x490(%rbp), %rsi
leaq -0x3d0(%rbp), %rdx
callq 0x1e980
jmp 0x31170
leaq 0x27482(%rip), %rdx     # 0x585f9
leaq -0x450(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x1e560
jmp 0x3118c
leaq -0x430(%rbp), %rdi
leaq -0x450(%rbp), %rsi
leaq -0x390(%rbp), %rdx
callq 0x1e980
jmp 0x311a8
leaq 0x2855c(%rip), %rdx     # 0x5970b
leaq -0x410(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x1e560
jmp 0x311c4
movq -0xa80(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x1e3c0
jmp 0x311d9
leaq -0x410(%rbp), %rdi
callq 0x31a0
leaq -0x430(%rbp), %rdi
callq 0x31a0
leaq -0x450(%rbp), %rdi
callq 0x31a0
leaq -0x470(%rbp), %rdi
callq 0x31a0
leaq -0x490(%rbp), %rdi
callq 0x31a0
leaq -0x4b0(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa88(%rbp)
leaq 0x2737f(%rip), %rsi     # 0x585b2
leaq -0x570(%rbp), %rdi
leaq -0x350(%rbp), %rdx
callq 0x1e820
jmp 0x31248
leaq 0x27fe5(%rip), %rdx     # 0x59234
leaq -0x550(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x1e560
jmp 0x31264
leaq -0x530(%rbp), %rdi
leaq -0x550(%rbp), %rsi
leaq -0x290(%rbp), %rdx
callq 0x1e980
jmp 0x31280
leaq 0x27f0e(%rip), %rdx     # 0x59195
leaq -0x510(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0x1e560
jmp 0x3129c
leaq -0x4f0(%rbp), %rdi
leaq -0x510(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0x1e980
jmp 0x312b8
leaq 0x2844c(%rip), %rdx     # 0x5970b
leaq -0x4d0(%rbp), %rdi
leaq -0x4f0(%rbp), %rsi
callq 0x1e560
jmp 0x312d4
movq -0xa88(%rbp), %rdi
leaq -0x4d0(%rbp), %rsi
callq 0x1e3c0
jmp 0x312e9
leaq -0x4d0(%rbp), %rdi
callq 0x31a0
leaq -0x4f0(%rbp), %rdi
callq 0x31a0
leaq -0x510(%rbp), %rdi
callq 0x31a0
leaq -0x530(%rbp), %rdi
callq 0x31a0
leaq -0x550(%rbp), %rdi
callq 0x31a0
leaq -0x570(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa90(%rbp)
leaq 0x2726f(%rip), %rsi     # 0x585b2
leaq -0x630(%rbp), %rdi
leaq -0x390(%rbp), %rdx
callq 0x1e820
jmp 0x31358
leaq 0x26ef7(%rip), %rdx     # 0x58256
leaq -0x610(%rbp), %rdi
leaq -0x630(%rbp), %rsi
callq 0x1e560
jmp 0x31374
leaq -0x5f0(%rbp), %rdi
leaq -0x610(%rbp), %rsi
leaq -0x290(%rbp), %rdx
callq 0x1e980
jmp 0x31390
leaq 0x27c9d(%rip), %rdx     # 0x59034
leaq -0x5d0(%rbp), %rdi
leaq -0x5f0(%rbp), %rsi
callq 0x1e560
jmp 0x313ac
leaq -0x5b0(%rbp), %rdi
leaq -0x5d0(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0x1e980
jmp 0x313c8
leaq 0x2833c(%rip), %rdx     # 0x5970b
leaq -0x590(%rbp), %rdi
leaq -0x5b0(%rbp), %rsi
callq 0x1e560
jmp 0x313e4
movq -0xa90(%rbp), %rdi
leaq -0x590(%rbp), %rsi
callq 0x1e3c0
jmp 0x313f9
leaq -0x590(%rbp), %rdi
callq 0x31a0
leaq -0x5b0(%rbp), %rdi
callq 0x31a0
leaq -0x5d0(%rbp), %rdi
callq 0x31a0
leaq -0x5f0(%rbp), %rdi
callq 0x31a0
leaq -0x610(%rbp), %rdi
callq 0x31a0
leaq -0x630(%rbp), %rdi
callq 0x31a0
movl -0x1d8(%rbp), %esi
leaq -0x670(%rbp), %rdi
callq 0x1e700
jmp 0x31455
leaq 0x27bdd(%rip), %rsi     # 0x59039
leaq -0x650(%rbp), %rdi
leaq -0x670(%rbp), %rdx
callq 0x1e930
jmp 0x31471
leaq -0x670(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xa98(%rbp)
movl -0x1c4(%rbp), %esi
leaq -0x710(%rbp), %rdi
callq 0x1e700
jmp 0x3149c
leaq 0x268be(%rip), %rsi     # 0x57d61
leaq -0x6f0(%rbp), %rdi
leaq -0x710(%rbp), %rdx
callq 0x1e930
jmp 0x314b8
leaq 0x27133(%rip), %rdx     # 0x585f2
leaq -0x6d0(%rbp), %rdi
leaq -0x6f0(%rbp), %rsi
callq 0x1e560
jmp 0x314d4
leaq -0x6b0(%rbp), %rdi
leaq -0x6d0(%rbp), %rsi
leaq -0x650(%rbp), %rdx
callq 0x1e980
jmp 0x314f0
leaq 0x28214(%rip), %rdx     # 0x5970b
leaq -0x690(%rbp), %rdi
leaq -0x6b0(%rbp), %rsi
callq 0x1e560
jmp 0x3150c
movq -0xa98(%rbp), %rdi
leaq -0x690(%rbp), %rsi
callq 0x1e3c0
jmp 0x31521
leaq -0x690(%rbp), %rdi
callq 0x31a0
leaq -0x6b0(%rbp), %rdi
callq 0x31a0
leaq -0x6d0(%rbp), %rdi
callq 0x31a0
leaq -0x6f0(%rbp), %rdi
callq 0x31a0
leaq -0x710(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xaa0(%rbp)
leaq 0x27043(%rip), %rsi     # 0x585b2
leaq -0x790(%rbp), %rdi
leaq -0x650(%rbp), %rdx
callq 0x1e820
jmp 0x31584
leaq 0x27ab2(%rip), %rdx     # 0x5903d
leaq -0x770(%rbp), %rdi
leaq -0x790(%rbp), %rsi
callq 0x1e560
jmp 0x315a0
movl -0x1c4(%rbp), %esi
leaq -0x7b0(%rbp), %rdi
callq 0x1e700
jmp 0x315b4
leaq -0x750(%rbp), %rdi
leaq -0x770(%rbp), %rsi
leaq -0x7b0(%rbp), %rdx
callq 0x1e5b0
jmp 0x315d0
leaq 0x27a6e(%rip), %rdx     # 0x59045
leaq -0x730(%rbp), %rdi
leaq -0x750(%rbp), %rsi
callq 0x1e560
jmp 0x315ec
movq -0xaa0(%rbp), %rdi
leaq -0x730(%rbp), %rsi
callq 0x1e3c0
jmp 0x31601
leaq -0x730(%rbp), %rdi
callq 0x31a0
leaq -0x750(%rbp), %rdi
callq 0x31a0
leaq -0x7b0(%rbp), %rdi
callq 0x31a0
leaq -0x770(%rbp), %rdi
callq 0x31a0
leaq -0x790(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xaa8(%rbp)
leaq 0x27a0b(%rip), %rsi     # 0x5905a
leaq -0x7f0(%rbp), %rdi
leaq -0x350(%rbp), %rdx
callq 0x1e820
jmp 0x31664
leaq 0x27a01(%rip), %rdx     # 0x5906c
leaq -0x7d0(%rbp), %rdi
leaq -0x7f0(%rbp), %rsi
callq 0x1e560
jmp 0x31680
movq -0xaa8(%rbp), %rdi
leaq -0x7d0(%rbp), %rsi
callq 0x1e3c0
jmp 0x31695
leaq -0x7d0(%rbp), %rdi
callq 0x31a0
leaq -0x7f0(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xab0(%rbp)
leaq 0x279be(%rip), %rsi     # 0x5907d
leaq -0x830(%rbp), %rdi
leaq -0x390(%rbp), %rdx
callq 0x1e820
jmp 0x316d4
leaq 0x279b4(%rip), %rdx     # 0x5908f
leaq -0x810(%rbp), %rdi
leaq -0x830(%rbp), %rsi
callq 0x1e560
jmp 0x316f0
movq -0xab0(%rbp), %rdi
leaq -0x810(%rbp), %rsi
callq 0x1e3c0
jmp 0x31705
leaq -0x810(%rbp), %rdi
callq 0x31a0
leaq -0x830(%rbp), %rdi
callq 0x31a0
movq 0x20(%rbp), %rax
movq %rax, -0xab8(%rbp)
leaq 0x26e83(%rip), %rsi     # 0x585b2
leaq -0x8b0(%rbp), %rdi
leaq -0x3d0(%rbp), %rdx
callq 0x1e820
jmp 0x31744
leaq 0x26b0b(%rip), %rdx     # 0x58256
leaq -0x890(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x1e560
jmp 0x31760
leaq -0x870(%rbp), %rdi
leaq -0x890(%rbp), %rsi
leaq -0x390(%rbp), %rdx
callq 0x1e980
jmp 0x3177c
leaq 0x27f88(%rip), %rdx     # 0x5970b
leaq -0x850(%rbp), %rdi
leaq -0x870(%rbp), %rsi
callq 0x1e560
jmp 0x31798
movq -0xab8(%rbp), %rdi
leaq -0x850(%rbp), %rsi
callq 0x1e3c0
jmp 0x317ad
leaq -0x850(%rbp), %rdi
callq 0x31a0
leaq -0x870(%rbp), %rdi
callq 0x31a0
leaq -0x890(%rbp), %rdi
callq 0x31a0
leaq -0x8b0(%rbp), %rdi
callq 0x31a0
leaq -0x650(%rbp), %rdi
callq 0x31a0
leaq -0x3d0(%rbp), %rdi
callq 0x31a0
leaq -0x390(%rbp), %rdi
callq 0x31a0
leaq -0x350(%rbp), %rdi
callq 0x31a0
leaq -0x290(%rbp), %rdi
callq 0x31a0
leaq -0x220(%rbp), %rdi
callq 0x31a0
movl -0x1d8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1d8(%rbp)
jmp 0x30df0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3186b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0x31a0
leaq -0x1f9(%rbp), %rdi
callq 0x32a0
jmp 0x32542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x318e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x318cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
testb $0x1, -0x26a(%rbp)
jne 0x318c1
jmp 0x318cd
leaq -0x248(%rbp), %rdi
callq 0x31a0
jmp 0x318cf
testb $0x1, -0x269(%rbp)
jne 0x318da
jmp 0x318e6
leaq -0x268(%rbp), %rdi
callq 0x31a0
jmp 0x318e8
testb $0x1, -0x222(%rbp)
jne 0x318f3
jmp 0x318ff
leaq -0x221(%rbp), %rdi
callq 0x32a0
jmp 0x32542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3194d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x31a0
leaq -0x2d0(%rbp), %rdi
callq 0x31a0
jmp 0x31f95
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x319c7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x319bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x2f0(%rbp), %rdi
callq 0x31a0
leaq -0x310(%rbp), %rdi
callq 0x31a0
leaq -0x330(%rbp), %rdi
callq 0x31a0
jmp 0x31f89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x370(%rbp), %rdi
callq 0x31a0
jmp 0x31f89
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x31a0
jmp 0x31f7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f71
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x31a0
jmp 0x31f71
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31b3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31b2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31b23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31b17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31b0b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x31a0
leaq -0x430(%rbp), %rdi
callq 0x31a0
leaq -0x450(%rbp), %rdi
callq 0x31a0
leaq -0x470(%rbp), %rdi
callq 0x31a0
leaq -0x490(%rbp), %rdi
callq 0x31a0
leaq -0x4b0(%rbp), %rdi
callq 0x31a0
jmp 0x31f65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31c01
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31bf5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31be9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31bdd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31bd1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x31a0
leaq -0x4f0(%rbp), %rdi
callq 0x31a0
leaq -0x510(%rbp), %rdi
callq 0x31a0
leaq -0x530(%rbp), %rdi
callq 0x31a0
leaq -0x550(%rbp), %rdi
callq 0x31a0
leaq -0x570(%rbp), %rdi
callq 0x31a0
jmp 0x31f65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31cc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31cbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31caf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31ca3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31c97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x590(%rbp), %rdi
callq 0x31a0
leaq -0x5b0(%rbp), %rdi
callq 0x31a0
leaq -0x5d0(%rbp), %rdi
callq 0x31a0
leaq -0x5f0(%rbp), %rdi
callq 0x31a0
leaq -0x610(%rbp), %rdi
callq 0x31a0
leaq -0x630(%rbp), %rdi
callq 0x31a0
jmp 0x31f65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x670(%rbp), %rdi
callq 0x31a0
jmp 0x31f65
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31da4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31d98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31d8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31d80
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x690(%rbp), %rdi
callq 0x31a0
leaq -0x6b0(%rbp), %rdi
callq 0x31a0
leaq -0x6d0(%rbp), %rdi
callq 0x31a0
leaq -0x6f0(%rbp), %rdi
callq 0x31a0
leaq -0x710(%rbp), %rdi
callq 0x31a0
jmp 0x31f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31e47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31e3b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31e2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31e23
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x730(%rbp), %rdi
callq 0x31a0
leaq -0x750(%rbp), %rdi
callq 0x31a0
leaq -0x7b0(%rbp), %rdi
callq 0x31a0
leaq -0x770(%rbp), %rdi
callq 0x31a0
leaq -0x790(%rbp), %rdi
callq 0x31a0
jmp 0x31f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31e8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x7d0(%rbp), %rdi
callq 0x31a0
leaq -0x7f0(%rbp), %rdi
callq 0x31a0
jmp 0x31f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31ecd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x810(%rbp), %rdi
callq 0x31a0
leaq -0x830(%rbp), %rdi
callq 0x31a0
jmp 0x31f59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f41
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x31f35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x850(%rbp), %rdi
callq 0x31a0
leaq -0x870(%rbp), %rdi
callq 0x31a0
leaq -0x890(%rbp), %rdi
callq 0x31a0
leaq -0x8b0(%rbp), %rdi
callq 0x31a0
leaq -0x650(%rbp), %rdi
callq 0x31a0
leaq -0x3d0(%rbp), %rdi
callq 0x31a0
leaq -0x390(%rbp), %rdi
callq 0x31a0
leaq -0x350(%rbp), %rdi
callq 0x31a0
leaq -0x290(%rbp), %rdi
callq 0x31a0
leaq -0x220(%rbp), %rdi
callq 0x31a0
jmp 0x32542
movl $0x0, -0x8b4(%rbp)
movl -0x8b4(%rbp), %eax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
cmpl %ecx, %eax
jge 0x32368
movq -0x28(%rbp), %rax
movslq (%rax), %rax
movq %rax, -0xac8(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0xac8(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0xac0(%rbp)
cmpq $0x0, %rax
je 0x32074
movq -0xac0(%rbp), %rax
movq -0xac8(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0xad8(%rbp)
movq %rax, -0xad0(%rbp)
movq -0xad0(%rbp), %rdi
movq %rdi, -0xae0(%rbp)
callq 0x3330
movq -0xae0(%rbp), %rax
movq -0xad8(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0xad0(%rbp)
jne 0x32043
movq -0xac0(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rax
movslq -0x8b4(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, -0x8b8(%rbp)
movl -0x8b8(%rbp), %eax
cmpl -0x8b4(%rbp), %eax
jge 0x320e2
movq -0x18(%rbp), %rax
movq (%rax), %rax
movslq -0x8b4(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x8b8(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq 0x27515(%rip), %rsi     # 0x595e1
callq 0x3310
movl -0x8b8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8b8(%rbp)
jmp 0x32097
movl $0x0, -0x8bc(%rbp)
movl -0x8bc(%rbp), %ecx
xorl %eax, %eax
cmpl -0x1c4(%rbp), %ecx
movb %al, -0xae1(%rbp)
jg 0x3211d
movl -0x8bc(%rbp), %eax
addl -0x8b4(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl (%rcx), %eax
setl %al
movb %al, -0xae1(%rbp)
movb -0xae1(%rbp), %al
testb $0x1, %al
jne 0x3212c
jmp 0x32352
leaq -0x8e0(%rbp), %rdi
callq 0x3330
movl -0x8b4(%rbp), %esi
leaq -0x980(%rbp), %rdi
callq 0x1e700
jmp 0x3214c
leaq 0x26ee6(%rip), %rsi     # 0x59039
leaq -0x960(%rbp), %rdi
leaq -0x980(%rbp), %rdx
callq 0x1e930
jmp 0x32168
leaq 0x2631e(%rip), %rdx     # 0x5848d
leaq -0x940(%rbp), %rdi
leaq -0x960(%rbp), %rsi
callq 0x1e560
jmp 0x32184
movl -0x8bc(%rbp), %esi
leaq -0x9a0(%rbp), %rdi
callq 0x1e700
jmp 0x32198
leaq -0x920(%rbp), %rdi
leaq -0x940(%rbp), %rsi
leaq -0x9a0(%rbp), %rdx
callq 0x1e5b0
jmp 0x321b4
leaq 0x25c61(%rip), %rdx     # 0x57e1c
leaq -0x900(%rbp), %rdi
leaq -0x920(%rbp), %rsi
callq 0x1e560
jmp 0x321d0
leaq -0x8e0(%rbp), %rdi
movq %rdi, -0xaf0(%rbp)
leaq -0x900(%rbp), %rsi
movq %rsi, -0xaf8(%rbp)
callq 0x32b0
movq -0xaf8(%rbp), %rdi
callq 0x31a0
leaq -0x920(%rbp), %rdi
callq 0x31a0
leaq -0x9a0(%rbp), %rdi
callq 0x31a0
leaq -0x940(%rbp), %rdi
callq 0x31a0
leaq -0x960(%rbp), %rdi
callq 0x31a0
leaq -0x980(%rbp), %rdi
callq 0x31a0
movq -0xaf0(%rbp), %rsi
movq -0x18(%rbp), %rax
movq (%rax), %rax
movslq -0x8b4(%rbp), %rdx
movl %edx, %ecx
movq (%rax,%rdx,8), %rdi
movl -0x8bc(%rbp), %eax
addl %ecx, %eax
cltq
shlq $0x5, %rax
addq %rax, %rdi
callq 0x3050
jmp 0x3226c
leaq -0x8e0(%rbp), %rdi
callq 0x31a0
movl -0x8bc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8bc(%rbp)
jmp 0x320ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x32341
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x32335
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x32329
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x3231d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0x32311
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x920(%rbp), %rdi
callq 0x31a0
leaq -0x9a0(%rbp), %rdi
callq 0x31a0
leaq -0x940(%rbp), %rdi
callq 0x31a0
leaq -0x960(%rbp), %rdi
callq 0x31a0
leaq -0x980(%rbp), %rdi
callq 0x31a0
leaq -0x8e0(%rbp), %rdi
callq 0x31a0
jmp 0x32542
jmp 0x32354
movl -0x8b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8b4(%rbp)
jmp 0x31fb0
movq -0x28(%rbp), %rax
movslq (%rax), %rax
movq %rax, -0xb08(%rbp)
movl $0x20, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
addq $0x8, %rdi
setb %al
orb %al, %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x3030
movq %rax, %rcx
movq -0xb08(%rbp), %rax
movq %rax, (%rcx)
addq $0x8, %rcx
movq %rcx, -0xb00(%rbp)
cmpq $0x0, %rax
je 0x32415
movq -0xb00(%rbp), %rax
movq -0xb08(%rbp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, -0xb18(%rbp)
movq %rax, -0xb10(%rbp)
movq -0xb10(%rbp), %rdi
movq %rdi, -0xb20(%rbp)
callq 0x3330
movq -0xb20(%rbp), %rax
movq -0xb18(%rbp), %rcx
addq $0x20, %rax
cmpq %rcx, %rax
movq %rax, -0xb10(%rbp)
jne 0x323e4
movq -0xb00(%rbp), %rdx
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, -0x9a4(%rbp)
movl -0x9a4(%rbp), %eax
cmpl -0x4(%rbp), %eax
jge 0x324fe
movl -0x9a4(%rbp), %esi
leaq -0x9e8(%rbp), %rdi
movq %rdi, -0xb28(%rbp)
callq 0x1e700
movq -0xb28(%rbp), %rdx
leaq 0x26bbb(%rip), %rsi     # 0x5902e
leaq -0x9c8(%rbp), %rdi
callq 0x1e930
jmp 0x32481
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rcx
movl (%rcx), %ecx
subl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
movslq -0x9a4(%rbp), %rax
shlq $0x5, %rax
addq %rax, %rdi
leaq -0x9c8(%rbp), %rsi
callq 0x32b0
leaq -0x9c8(%rbp), %rdi
callq 0x31a0
leaq -0x9e8(%rbp), %rdi
callq 0x31a0
movl -0x9a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9a4(%rbp)
jmp 0x3243d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x9e8(%rbp), %rdi
callq 0x31a0
jmp 0x32542
movl -0x1c4(%rbp), %eax
movl %eax, -0x9ec(%rbp)
movl -0x9ec(%rbp), %eax
cmpl -0x1c8(%rbp), %eax
jge 0x32539
movq 0x10(%rbp), %rdi
leaq -0x9ec(%rbp), %rsi
callq 0x46d70
movl -0x9ec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x9ec(%rbp)
jmp 0x3250a
addq $0xb30, %rsp            # imm = 0xB30
popq %rbp
retq
movq -0x98(%rbp), %rdi
callq 0x3420
nop