// File: /workspace/github_cpp_makefile_star2_O2/temelmertcan[P]multgen/src/dadda.cpp
// Function: create_daddatree(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>**, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, int, int&, int, bool, 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>>>>>&, int&, bool**&)
void create_daddatree (string** pp_matrix,
		       string final_stage_adder,
		       int pp_dim1,
		       int pp_dim2,
		       int& out_size,
		       int shift_amount,
		       bool create_fin_adder,
		       bool signed_mult,
		       std::queue<string>& verilog,
		       int& adder_size,
		       bool**& zeros_in_output
		       ){


  //out_size = create_fin_adder ? out_size : pp_dim2;

  
  std::queue<string>* main_queue = new std::queue<string>[out_size];
  std::queue<string>* temp_queue = new std::queue<string>[out_size];

  // create the initial queue
  //for (int i = pp_dim1; i >= 0; i--)
  for (int i = 0; i < pp_dim1; i++)
    for (int j = 0; j < pp_dim2 && j< out_size; j++)
      if (pp_matrix[i][j] != "")
	main_queue[j].push (pp_matrix[i][j]);

  int cnt = 0;

  int* coeffs = 0;
  int coeffs_size;
  
  get_dadda_coeffs(get_max_queue_size(main_queue, out_size), coeffs, coeffs_size);
  


  // cout << "out_size " << out_size << endl;
  
  //print_queue(main_queue, out_size);

  //cout << "Dadda summmation stage count: " << coeffs_size << endl; 
  
  
  for (int phase = 0; phase < coeffs_size; phase++) {
    
    // Step 1: sum the stuff in main_queue with fa/ha
    verilog.push("");
    verilog.push("// Dadda Summation Stage " + to_string(phase+1));
    int carrysize = 0;
    
    for (int j = 0; j < out_size; j++){
      std::queue<string>& cur = main_queue[j];
      int sumsize = 0;
      while (((cur.size() + carrysize + sumsize) > coeffs[phase]) && (cur.size() >= 2)){
	if ((cur.size() + carrysize + sumsize) - coeffs[phase] > 1){
	  string var1 = cur.front();
	  cur.pop();
	  string var2 = cur.front();
	  cur.pop();
	  string var3 = cur.front();
	  cur.pop();
	  string inst = "logic s" + to_string(cnt)
	    + " ,c" + to_string(cnt) + "; \n";
	  inst += "    fa fa" + to_string(cnt)
	    + " (" + var1 + ", " + var2 + ", " + var3
	    + ", s" + to_string(cnt) + ", c" + to_string(cnt) + ");";

	  verilog.push(inst);

	  temp_queue[j].push("s" + to_string(cnt));

	  if (j+1 < out_size)
	    temp_queue[j+1].push("c" + to_string(cnt));
	  cnt++;
	  

	}else{
	  string var1 = cur.front();
	  cur.pop();
	  string var2 = cur.front();
	  cur.pop();
	  string inst = "logic s" + to_string(cnt)
	    + " ,c" + to_string(cnt) + ";\n";
	  inst += "    ha ha" + to_string(cnt)
	    + " (" + var1 + ", " + var2
	    + ", s" + to_string(cnt) + ", c" + to_string(cnt) + ");";

	  verilog.push(inst);

	  temp_queue[j].push("s" + to_string(cnt));

	  if (j+1 < out_size)
	    temp_queue[j+1].push("c" + to_string(cnt));
	  cnt++;
	}
	sumsize++;
      }
      carrysize = sumsize;
    }

    // Step 2; Move stuff from temp_queue to main_queue
    move_to_main_queue(temp_queue, main_queue, out_size);

    //print_queue(main_queue, out_size);

  }

  verilog.push("");

  if (create_fin_adder)
    create_finaladder_inst (main_queue,
			    final_stage_adder,
			    out_size,
			    shift_amount,
			    verilog,
			    adder_size);
  else
    create_two_result_vectors (main_queue,
			       out_size,
			       verilog,
			       signed_mult,
			       adder_size,
			       zeros_in_output);
  

   delete[] temp_queue;
   //delete[] coeffs;
  // delete[] main_queue;

   
  // cout << "adder size " << adder_size << endl;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x328, %rsp            # imm = 0x328
movl %r9d, -0xd4(%rbp)
movl %ecx, -0x60(%rbp)
movq %rdx, -0x38(%rbp)
movq %rsi, -0x198(%rbp)
movq %r8, -0x30(%rbp)
movslq (%r8), %r15
pushq $0x50
popq %rbx
movq %r15, %rax
mulq %rbx
movq %rdi, -0x48(%rbp)
seto %cl
orq $0x8, %rax
pushq $-0x1
popq %r12
testb %cl, %cl
cmovneq %r12, %rax
movq %rax, %rdi
callq 0x2030
movq %rax, %r13
addq $0x8, %rax
movq %r15, (%r13)
testq %r15, %r15
movq %rax, -0x58(%rbp)
je 0x27b98
imulq $-0x50, %r15, %r14
xorl %ebx, %ebx
movq %rax, %r15
movq %r15, %rdi
callq 0x11e0c
addq $-0x50, %rbx
addq $0x50, %r15
cmpq %rbx, %r14
jne 0x27b78
movq -0x30(%rbp), %rax
movl (%rax), %eax
pushq $0x50
popq %rbx
jmp 0x27b9a
xorl %eax, %eax
movslq %eax, %r15
movq %r15, %rax
mulq %rbx
seto %cl
orq $0x8, %rax
movq -0x58(%rbp), %rdx
movq %rdx, -0x170(%rbp)
testb %cl, %cl
cmoveq %rax, %r12
movq %r12, %rdi
callq 0x2030
movq %r15, (%rax)
movq %rax, -0x40(%rbp)
addq $0x8, %rax
movq %rax, -0xa8(%rbp)
testl %r15d, %r15d
je 0x27bfc
imulq $-0x50, %r15, %r14
xorl %ebx, %ebx
movq -0xa8(%rbp), %r15
movq %r15, %rdi
callq 0x11e0c
addq $-0x50, %rbx
addq $0x50, %r15
cmpq %rbx, %r14
jne 0x27be7
movslq -0x60(%rbp), %r13
xorl %ebx, %ebx
movq -0x38(%rbp), %rax
testl %eax, %eax
cmovlel %ebx, %eax
movq %rax, -0x38(%rbp)
cmpq -0x38(%rbp), %rbx
je 0x27c70
movq -0x58(%rbp), %r12
xorl %r15d, %r15d
xorl %r14d, %r14d
cmpq %r13, %r14
jge 0x27c6b
movq -0x30(%rbp), %rax
movslq (%rax), %rax
cmpq %rax, %r14
jge 0x27c6b
movq -0x48(%rbp), %rax
movq (%rax,%rbx,8), %rdi
addq %r15, %rdi
leaq 0xb98f(%rip), %rsi      # 0x335d1
callq 0x11b84
testb %al, %al
je 0x27c5e
movq -0x48(%rbp), %rax
movq (%rax,%rbx,8), %rsi
addq %r15, %rsi
movq %r12, %rdi
callq 0x19602
incq %r14
addq $0x20, %r15
addq $0x50, %r12
jmp 0x27c1f
incq %rbx
jmp 0x27c0f
leaq -0x1e0(%rbp), %rbx
andq $0x0, (%rbx)
movq -0x30(%rbp), %rax
movl (%rax), %esi
movq -0x58(%rbp), %r15
movq %r15, %rdi
callq 0x2b0e0
leaq -0x1e4(%rbp), %r14
movl %eax, %edi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x279bc
movslq (%r14), %rax
movq %rax, -0x1a0(%rbp)
xorl %r13d, %r13d
leaq -0xd0(%rbp), %rbx
movl $0x0, -0x4c(%rbp)
cmpq -0x1a0(%rbp), %r13
jge 0x28598
movq %rbx, %rdi
leaq 0xb8fe(%rip), %rsi      # 0x335d1
leaq -0x138(%rbp), %rdx
callq 0x20b0
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq 0x1(%r13), %rsi
leaq -0x138(%rbp), %r14
movq %r14, %rdi
movq %rsi, -0x1a8(%rbp)
callq 0x11c73
movq %rbx, %rdi
leaq 0xb8bb(%rip), %rsi      # 0x335d2
movq %r14, %rdx
callq 0x11d49
movq 0x20(%rbp), %rdi
movq %rbx, %rsi
callq 0x120e4
movq %rbx, %rdi
callq 0x20f0
leaq -0x138(%rbp), %rdi
callq 0x20f0
xorl %r14d, %r14d
xorl %ecx, %ecx
movq %r13, -0x60(%rbp)
movq -0x30(%rbp), %rax
movslq (%rax), %rdx
cmpq %rdx, %r14
jge 0x2857d
imulq $0x50, %r14, %rax
leaq (%r15,%rax), %rbx
movl %ecx, %ecx
movq %rcx, -0x1b8(%rbp)
movq -0xa8(%rbp), %rcx
leaq (%rcx,%rax), %rdx
movq %rdx, -0x148(%rbp)
incq %r14
addq %rcx, %rax
addq $0x50, %rax
movq %rax, -0x140(%rbp)
movq -0x1e0(%rbp), %rax
movq %rax, -0x38(%rbp)
movl -0x4c(%rbp), %eax
movq %rax, -0x1b0(%rbp)
xorl %r15d, %r15d
movq %r14, -0xb0(%rbp)
movq %rbx, %rdi
callq 0x1219a
movq -0x1b8(%rbp), %rcx
leaq (%rcx,%r15), %r13
addq %r13, %rax
movq -0x60(%rbp), %rcx
movq -0x38(%rbp), %rdx
movslq (%rdx,%rcx,4), %rcx
cmpq %rcx, %rax
movq %r15, %rcx
jbe 0x2856a
movq %rbx, %rdi
movq %rcx, -0x48(%rbp)
callq 0x1219a
movq -0x48(%rbp), %rcx
cmpq $0x2, %rax
jb 0x2856a
movq -0x1b0(%rbp), %rax
leaq (%rax,%rcx), %r15
movq %rbx, %rdi
callq 0x1219a
movq -0x60(%rbp), %rcx
movq -0x38(%rbp), %rdx
movslq (%rdx,%rcx,4), %rcx
subq %rcx, %rax
addq %rax, %r13
cmpq $0x2, %r13
jb 0x281db
movq 0x10(%rbx), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x2250
movq %rbx, %rdi
callq 0x125d4
movq 0x10(%rbx), %rsi
leaq -0x138(%rbp), %rdi
callq 0x2250
movq %rbx, %rdi
callq 0x125d4
movq 0x10(%rbx), %rsi
leaq -0x1d8(%rbp), %rdi
callq 0x2250
movq %rbx, %rdi
callq 0x125d4
leaq -0xf8(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x118(%rbp), %r12
movq %r12, %rdi
leaq 0xb75f(%rip), %rsi      # 0x335ec
movq %r14, %rdx
callq 0x11d49
leaq -0xa0(%rbp), %rdi
movq %r12, %rsi
leaq 0xb74e(%rip), %rdx      # 0x335f4
callq 0x11ba1
leaq -0x190(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x80(%rbp), %r12
movq %r12, %rdi
leaq -0xa0(%rbp), %rsi
movq %r14, %rdx
callq 0x11bca
leaq -0x168(%rbp), %rdi
movq %r12, %rsi
leaq 0xb714(%rip), %rdx      # 0x335f8
callq 0x11ba1
movq %r12, %rdi
callq 0x20f0
leaq -0x190(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x348(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x208(%rbp), %r12
movq %r12, %rdi
leaq 0xb6b8(%rip), %rsi      # 0x335fc
movq %r14, %rdx
callq 0x11d49
leaq -0x228(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
leaq 0xb11c(%rip), %rdx      # 0x3307c
callq 0x11ba1
leaq -0x248(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq -0xd0(%rbp), %rdx
callq 0x11d77
leaq -0x268(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
leaq 0xa664(%rip), %rdx      # 0x325f6
callq 0x11ba1
leaq -0x288(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq -0x138(%rbp), %rdx
callq 0x11d77
leaq -0x2a8(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
leaq 0xa632(%rip), %rdx      # 0x325f6
callq 0x11ba1
leaq -0x2c8(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq -0x1d8(%rbp), %rdx
callq 0x11d77
leaq -0x190(%rbp), %rdi
movq %r12, %rsi
leaq 0xb613(%rip), %rdx      # 0x33606
callq 0x11ba1
leaq -0x328(%rbp), %r12
movq %r12, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0xf8(%rbp), %r14
movq %r14, %rdi
leaq -0x190(%rbp), %rsi
movq %r12, %rdx
callq 0x11bca
leaq -0x118(%rbp), %rdi
movq %r14, %rsi
leaq 0xb5d6(%rip), %rdx      # 0x3360a
callq 0x11ba1
leaq -0x308(%rbp), %r12
movq %r12, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0xa0(%rbp), %r14
movq %r14, %rdi
leaq -0x118(%rbp), %rsi
movq %r12, %rdx
callq 0x11bca
leaq -0x80(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0xb66b(%rip), %rdx      # 0x336e0
callq 0x11ba1
leaq -0x168(%rbp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x2360
movq %r12, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0x308(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x328(%rbp), %rdi
callq 0x20f0
leaq -0x190(%rbp), %rdi
callq 0x20f0
leaq -0x2c8(%rbp), %rdi
callq 0x20f0
leaq -0x2a8(%rbp), %rdi
callq 0x20f0
leaq -0x288(%rbp), %rdi
callq 0x20f0
leaq -0x268(%rbp), %rdi
callq 0x20f0
leaq -0x248(%rbp), %rdi
callq 0x20f0
leaq -0x228(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0x348(%rbp), %rdi
callq 0x20f0
movq 0x20(%rbp), %rdi
movq %r13, %rsi
callq 0x19602
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
movq %r12, %rdi
leaq 0xb4af(%rip), %rsi      # 0x33608
movq %r14, %rdx
callq 0x11d49
movq -0x148(%rbp), %rdi
movq %r12, %rsi
callq 0x120e4
movq %r12, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
movq -0x30(%rbp), %rax
movq -0xb0(%rbp), %rcx
cmpl %ecx, (%rax)
jle 0x281cf
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x80(%rbp), %r15
movq %r15, %rdi
leaq 0xb464(%rip), %rsi      # 0x3360c
movq %r14, %rdx
callq 0x11d49
movq -0x140(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
jmp 0x2852e
movq 0x10(%rbx), %rsi
leaq -0xd0(%rbp), %rdi
callq 0x2250
movq %rbx, %rdi
callq 0x125d4
movq 0x10(%rbx), %rsi
leaq -0x138(%rbp), %rdi
callq 0x2250
movq %rbx, %rdi
callq 0x125d4
leaq -0x118(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0xa0(%rbp), %r12
movq %r12, %rdi
leaq 0xb3be(%rip), %rsi      # 0x335ec
movq %r14, %rdx
callq 0x11d49
leaq -0x80(%rbp), %rdi
movq %r12, %rsi
leaq 0xb3b0(%rip), %rdx      # 0x335f4
callq 0x11ba1
leaq -0xf8(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x168(%rbp), %r12
movq %r12, %rdi
leaq -0x80(%rbp), %rsi
movq %r14, %rdx
callq 0x11bca
leaq -0x1d8(%rbp), %rdi
movq %r12, %rsi
leaq 0xb38c(%rip), %rdx      # 0x3360e
callq 0x11ba1
movq %r12, %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0x248(%rbp), %r14
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x268(%rbp), %r12
movq %r12, %rdi
leaq 0xb332(%rip), %rsi      # 0x33611
movq %r14, %rdx
callq 0x11d49
leaq -0x288(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
leaq 0xad81(%rip), %rdx      # 0x3307c
callq 0x11ba1
leaq -0x2a8(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq -0xd0(%rbp), %rdx
callq 0x11d77
leaq -0x2c8(%rbp), %r13
movq %r13, %rdi
movq %r12, %rsi
leaq 0xa2c9(%rip), %rdx      # 0x325f6
callq 0x11ba1
leaq -0x190(%rbp), %r14
movq %r14, %rdi
movq %r13, %rsi
leaq -0x138(%rbp), %rdx
callq 0x11d77
leaq -0xf8(%rbp), %rdi
movq %r14, %rsi
leaq 0xb2aa(%rip), %rdx      # 0x33606
callq 0x11ba1
leaq -0x228(%rbp), %r12
movq %r12, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x118(%rbp), %r14
movq %r14, %rdi
leaq -0xf8(%rbp), %rsi
movq %r12, %rdx
callq 0x11bca
leaq -0xa0(%rbp), %rdi
movq %r14, %rsi
leaq 0xb26d(%rip), %rdx      # 0x3360a
callq 0x11ba1
leaq -0x208(%rbp), %r12
movq %r12, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x80(%rbp), %r14
movq %r14, %rdi
leaq -0xa0(%rbp), %rsi
movq %r12, %rdx
callq 0x11bca
leaq -0x168(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
leaq 0xb302(%rip), %rdx      # 0x336e0
callq 0x11ba1
leaq -0x1d8(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x2360
movq %r12, %rdi
callq 0x20f0
leaq -0x80(%rbp), %r12
movq %r12, %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0x228(%rbp), %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x190(%rbp), %rdi
callq 0x20f0
leaq -0x2c8(%rbp), %rdi
callq 0x20f0
leaq -0x2a8(%rbp), %rdi
callq 0x20f0
leaq -0x288(%rbp), %rdi
callq 0x20f0
leaq -0x268(%rbp), %rdi
callq 0x20f0
leaq -0x248(%rbp), %rdi
callq 0x20f0
movq 0x20(%rbp), %rdi
movq %r14, %rsi
callq 0x19602
movq %r12, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x168(%rbp), %r14
movq %r14, %rdi
leaq 0xb153(%rip), %rsi      # 0x33608
movq %r12, %rdx
callq 0x11d49
movq -0x148(%rbp), %rdi
movq %r14, %rsi
callq 0x120e4
movq %r14, %rdi
callq 0x20f0
leaq -0x80(%rbp), %r14
movq %r14, %rdi
callq 0x20f0
movq -0x30(%rbp), %rax
movq -0xb0(%rbp), %rcx
cmpl %ecx, (%rax)
jle 0x28533
movq %r14, %rdi
movl %r15d, %esi
callq 0x11c73
leaq -0x168(%rbp), %r15
movq %r15, %rdi
leaq 0xb101(%rip), %rsi      # 0x3360c
movq %r14, %rdx
callq 0x11d49
movq -0x140(%rbp), %rdi
movq %r15, %rsi
callq 0x120e4
movq %r15, %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x1d8(%rbp), %rdi
callq 0x20f0
leaq -0x138(%rbp), %rdi
callq 0x20f0
leaq -0xd0(%rbp), %rdi
callq 0x20f0
movq -0x48(%rbp), %r15
incq %r15
movq -0xb0(%rbp), %r14
jmp 0x27dab
addl %ecx, -0x4c(%rbp)
movq -0x58(%rbp), %r15
leaq -0xd0(%rbp), %rbx
jmp 0x27d48
movq -0xa8(%rbp), %rdi
movq %r15, %rsi
callq 0x2af64
movq -0x1a8(%rbp), %r13
jmp 0x27cbc
leaq 0xb032(%rip), %rsi      # 0x335d1
leaq -0xd0(%rbp), %rdi
leaq -0x138(%rbp), %rdx
callq 0x20b0
leaq -0xd0(%rbp), %rsi
movq 0x20(%rbp), %rdi
callq 0x120e4
leaq -0xd0(%rbp), %rdi
callq 0x20f0
cmpb $0x0, 0x10(%rbp)
je 0x2861b
leaq -0x2e8(%rbp), %rbx
movq %rbx, %rdi
movq -0x198(%rbp), %rsi
callq 0x2250
movq -0x30(%rbp), %rax
movl (%rax), %edx
leaq -0x170(%rbp), %rdi
movq %rbx, %rsi
movl -0xd4(%rbp), %ecx
movq 0x20(%rbp), %r8
movq 0x28(%rbp), %r9
callq 0x2bc1e
leaq -0x2e8(%rbp), %rdi
callq 0x20f0
jmp 0x2863d
movq -0x30(%rbp), %rax
movl (%rax), %esi
movzbl 0x18(%rbp), %ecx
leaq -0x170(%rbp), %rdi
movq 0x20(%rbp), %rdx
movq 0x28(%rbp), %r8
movq 0x30(%rbp), %r9
callq 0x2b124
movq -0x40(%rbp), %rax
movq (%rax), %rax
testq %rax, %rax
je 0x28664
imulq $0x50, %rax, %rbx
movq -0x40(%rbp), %r14
addq $-0x48, %r14
leaq (%r14,%rbx), %rdi
callq 0x11f3e
addq $-0x50, %rbx
jne 0x28655
movq -0x40(%rbp), %rdi
callq 0x2230
addq $0x328, %rsp            # imm = 0x328
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq -0x2e8(%rbp), %rdi
jmp 0x28a4e
jmp 0x288ff
jmp 0x286f5
movq %rax, %r14
testq %rbx, %rbx
je 0x286b7
negq %rbx
movq -0x40(%rbp), %r15
addq $-0x48, %r15
leaq (%r15,%rbx), %rdi
callq 0x11f3e
addq $-0x50, %rbx
jne 0x286a8
movq -0x40(%rbp), %rdi
jmp 0x286e1
movq %rax, %r14
testq %rbx, %rbx
je 0x286de
negq %rbx
movq %r13, %r15
addq $-0x48, %r15
leaq (%r15,%rbx), %rdi
callq 0x11f3e
addq $-0x50, %rbx
jne 0x286cf
movq %r13, %rdi
callq 0x2230
jmp 0x28a53
jmp 0x288ff
movq %rax, %r14
jmp 0x2870c
movq %rax, %r14
jmp 0x28a53
movq %rax, %r14
leaq -0xd0(%rbp), %rdi
callq 0x20f0
leaq -0x138(%rbp), %rdi
jmp 0x28a4e
jmp 0x287e0
jmp 0x28971
jmp 0x287ca
jmp 0x288c5
jmp 0x287a5
jmp 0x287a0
movq %rax, %r14
jmp 0x28a6f
movq %rax, %r14
jmp 0x28a17
movq %rax, %r14
jmp 0x28a78
jmp 0x288ff
jmp 0x28971
jmp 0x28754
movq %rax, %r14
jmp 0x28a3b
movq %rax, %r14
jmp 0x289b7
jmp 0x287a5
movq %rax, %r14
jmp 0x289e7
movq %rax, %r14
jmp 0x289c3
movq %rax, %r14
jmp 0x28884
movq %rax, %r14
jmp 0x28a0b
movq %rax, %r14
jmp 0x28890
movq %rax, %r14
jmp 0x28824
movq %rax, %r14
jmp 0x28830
jmp 0x287a5
movq %rax, %r14
jmp 0x287ef
movq %rax, %r14
jmp 0x288b4
movq %rax, %r14
jmp 0x2886c
movq %rax, %r14
jmp 0x28878
movq %rax, %r14
jmp 0x289db
movq %rax, %r14
jmp 0x28818
movq %rax, %r14
leaq -0x80(%rbp), %rdi
callq 0x20f0
jmp 0x288c8
movq %rax, %r14
jmp 0x2880c
movq %rax, %r14
leaq -0x168(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
jmp 0x28a2a
movq %rax, %r14
jmp 0x28947
movq %rax, %r14
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x308(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x328(%rbp), %rdi
callq 0x20f0
leaq -0x190(%rbp), %rdi
callq 0x20f0
leaq -0x2c8(%rbp), %rdi
callq 0x20f0
leaq -0x2a8(%rbp), %rdi
callq 0x20f0
leaq -0x288(%rbp), %rdi
callq 0x20f0
leaq -0x268(%rbp), %rdi
callq 0x20f0
leaq -0x248(%rbp), %rdi
callq 0x20f0
leaq -0x228(%rbp), %rdi
callq 0x20f0
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0x348(%rbp), %rdi
callq 0x20f0
leaq -0x168(%rbp), %rdi
jmp 0x28a2a
movq %rax, %r14
jmp 0x28848
movq %rax, %r14
leaq -0xa0(%rbp), %rdi
jmp 0x288af
movq %rax, %r14
jmp 0x288a8
movq %rax, %r14
jmp 0x28854
movq %rax, %r14
jmp 0x2892f
movq %rax, %r14
jmp 0x289cf
movq %rax, %r14
leaq -0x168(%rbp), %rdi
callq 0x20f0
jmp 0x28a63
movq %rax, %r14
jmp 0x28a47
movq %rax, %r14
jmp 0x2883c
movq %rax, %r14
jmp 0x2893b
jmp 0x28971
movq %rax, %r14
jmp 0x28953
movq %rax, %r14
jmp 0x28860
movq %rax, %r14
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0x190(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
jmp 0x28a2a
jmp 0x28971
movq %rax, %r14
jmp 0x289ff
movq %rax, %r14
jmp 0x2889c
movq %rax, %r14
jmp 0x28a2f
movq %rax, %r14
jmp 0x2898d
movq %rax, %r14
leaq -0x168(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
jmp 0x289ab
movq %rax, %r14
jmp 0x28a23
movq %rax, %r14
jmp 0x28a84
movq %rax, %r14
leaq -0x208(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
callq 0x20f0
leaq -0x228(%rbp), %rdi
callq 0x20f0
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x190(%rbp), %rdi
callq 0x20f0
leaq -0x2c8(%rbp), %rdi
callq 0x20f0
leaq -0x2a8(%rbp), %rdi
callq 0x20f0
leaq -0x288(%rbp), %rdi
callq 0x20f0
leaq -0x268(%rbp), %rdi
callq 0x20f0
leaq -0x248(%rbp), %rdi
callq 0x20f0
leaq -0x1d8(%rbp), %rdi
callq 0x20f0
leaq -0x138(%rbp), %rdi
callq 0x20f0
leaq -0xd0(%rbp), %rdi
callq 0x20f0
movq %r14, %rdi
callq 0x2330
movq %rax, %r14
jmp 0x289f3
movq %rax, %r14
leaq -0xf8(%rbp), %rdi
callq 0x20f0
leaq -0x80(%rbp), %rdi
callq 0x20f0
leaq -0xa0(%rbp), %rdi
callq 0x20f0
leaq -0x118(%rbp), %rdi
jmp 0x28a36
nop