// File: /workspace/github_cpp_makefile_star2_O1/temelmertcan[P]multgen/src/adders.cpp
// Function: create_ks_adder(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_ks_adder (int size, bool carryin, std::queue<string>& verilog){

  int index = 0;

  string* g = new string[size];
  string* p = new string[size];

  string* gtmp = new string[size];
  string* ptmp = new string[size];

  ppx_preprocess(size,  carryin, index, "KS", gtmp, ptmp, verilog);
  pgtmp_to_pg(size, gtmp, g);
  pgtmp_to_pg(size, ptmp, p);

  verilog.push("\n// Kogge-Stone Adder \n");

  int stage=0;

  // ks steps
  for (int diff = 1; diff < size; diff *= 2){
    verilog.push("");
    verilog.push("// KS stage " + to_string(++stage));

    for (int i=diff; i < size; i++){

      string new_p = "p_" + to_string(stage)+ "_" + to_string(i);
      string new_g = "g_" + to_string(stage)+ "_" + to_string(i);

      verilog.push ("wire logic "+ new_p + ";");
      verilog.push ("wire logic "+ new_g + ";");

      verilog.push ("assign "+ new_p + " = " + p[i] + " & " + p[i-diff] + ";");
      verilog.push ("assign "+ new_g + " = (" + p[i] + " & " + g[i-diff] + ") | " + g[i] + ";");

      gtmp[i] =  new_g;
      ptmp[i] =  new_p;
    }

    pgtmp_to_pg(size, gtmp, g);
    pgtmp_to_pg(size, ptmp, p);
  }

  verilog.push("");
  verilog.push("// KS postprocess ");

  ppx_postprocess (size, index, g, p, verilog);

  delete[] p;
  delete[] g;

  delete[] ptmp;
  delete[] gtmp;

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1d8, %rsp            # imm = 0x1D8
movq %rdx, -0x58(%rbp)
movl %esi, -0x118(%rbp)
movl %edi, -0x2c(%rbp)
movslq %edi, %rbx
movq %rbx, %r15
shlq $0x5, %r15
leaq 0x8(%r15), %rax
testl %ebx, %ebx
movq $-0x1, %r13
cmovnsq %rax, %r13
movq %r13, %rdi
callq 0x3030
leaq 0x8(%rax), %r14
movq %rbx, (%rax)
testl %ebx, %ebx
je 0x354f8
addq $0x18, %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %r15
jne 0x354df
movq %r14, -0x158(%rbp)
movq %r13, %rdi
callq 0x3030
movq %rax, -0x108(%rbp)
movq %rbx, (%rax)
testl %ebx, %ebx
je 0x35540
movq -0x108(%rbp), %rax
addq $0x18, %rax
movq %rbx, %rcx
shlq $0x5, %rcx
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rcx
jne 0x35527
movq %r13, %rdi
callq 0x3030
leaq 0x8(%rax), %r12
movq %rbx, (%rax)
testl %ebx, %ebx
je 0x35577
addq $0x18, %rax
movq %rbx, %rcx
shlq $0x5, %rcx
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rcx
jne 0x3555e
movq %r12, -0x150(%rbp)
movq %r13, %rdi
callq 0x3030
leaq 0x8(%rax), %r13
movq %rbx, (%rax)
testl %ebx, %ebx
je 0x355b2
addq $0x18, %rax
shlq $0x5, %rbx
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
addq $0x20, %rax
addq $-0x20, %rbx
jne 0x35599
leaq -0x188(%rbp), %rbx
movq %r13, (%rbx)
leaq -0x1c0(%rbp), %rax
movq %rax, -0x10(%rax)
leaq 0x43114(%rip), %rsi     # 0x786e2
leaq 0x4310f(%rip), %rdx     # 0x786e4
leaq -0x1d0(%rbp), %r15
movq %r15, %rdi
callq 0x2b022
movq -0x58(%rbp), %rax
movq %rax, (%rsp)
movzbl -0x118(%rbp), %esi
leaq -0x150(%rbp), %r8
movl -0x2c(%rbp), %edi
movq %r15, %rcx
movq %rbx, %r9
callq 0x2df1f
movq -0x1d0(%rbp), %rdi
leaq -0x1c0(%rbp), %rax
cmpq %rax, %rdi
je 0x35620
callq 0x31d0
movq -0x108(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x110(%rbp)
movl -0x2c(%rbp), %eax
movl %eax, %ecx
movq %rcx, -0x128(%rbp)
testl %eax, %eax
jle 0x3568d
movq -0x128(%rbp), %rbx
movq %r14, %rdi
movq %r12, %rsi
callq 0x3120
addq $0x20, %r14
addq $0x20, %r12
decq %rbx
jne 0x35649
cmpl $0x0, -0x2c(%rbp)
jle 0x3568d
movq -0x110(%rbp), %rbx
movq -0x128(%rbp), %r14
movq %rbx, %rdi
movq %r13, %rsi
callq 0x3120
addq $0x20, %rbx
addq $0x20, %r13
decq %r14
jne 0x35675
leaq -0x88(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x44654(%rip), %rsi     # 0x79cf3
leaq 0x44664(%rip), %rdx     # 0x79d0a
leaq -0x98(%rbp), %rdi
callq 0x2b022
leaq -0x98(%rbp), %rsi
movq -0x58(%rbp), %rdi
callq 0x2ad60
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x356d3
callq 0x31d0
cmpl $0x2, -0x2c(%rbp)
jl 0x366ae
movq $0x0, -0xa0(%rbp)
movl $0x1, %r12d
leaq -0x98(%rbp), %rbx
leaq -0x78(%rbp), %r13
movq -0xa0(%rbp), %rax
movq %rax, -0x180(%rbp)
movq %r14, -0x98(%rbp)
movq %rbx, %rdi
leaq 0x44ee9(%rip), %rdx     # 0x7a601
movq %rdx, %rsi
callq 0x2b022
movq -0x58(%rbp), %rdi
movq %rbx, %rsi
callq 0x2ad60
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x3573d
callq 0x31d0
movq -0x180(%rbp), %rax
leal 0x1(%rax), %r14d
movl $0x1, %ebx
cmpl $0x9, %eax
movq %r14, -0xa0(%rbp)
jb 0x357a2
movl $0x4, %ebx
movl %r14d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x35794
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x35799
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x3579b
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x35766
addl $-0x3, %ebx
jmp 0x3579b
addl $-0x2, %ebx
jmp 0x3579b
decl %ebx
movq -0xa0(%rbp), %r14
movl %ebx, %esi
leaq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
leaq -0xe0(%rbp), %r15
movq %r15, %rdi
movl $0x2d, %edx
callq 0x3250
movq -0xe0(%rbp), %rdi
movl %ebx, %esi
movl %r14d, %edx
callq 0x2aad9
movl $0xc, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x44520(%rip), %rcx     # 0x79d0b
callq 0x3230
leaq -0x88(%rbp), %r14
movq %r14, -0x98(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x98(%rbp), %rsi
je 0x35827
movq %rdx, -0x98(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x88(%rbp)
jmp 0x3582e
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, -0x90(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x58(%rbp), %rdi
callq 0x2ad60
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x35862
callq 0x31d0
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x3587a
callq 0x31d0
movl %r12d, -0x11c(%rbp)
cmpl -0x2c(%rbp), %r12d
movq -0xa0(%rbp), %r12
jge 0x36626
movslq -0x11c(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq %rax, %r14
movl $0x1, %ebx
cmpl $0x9, -0x180(%rbp)
leaq -0x68(%rbp), %rdx
jb 0x358f7
movl $0x4, %ebx
movl %r12d, %eax
movl $0xd1b71759, %esi       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x358f0
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x358f5
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x358f7
movl %eax, %ecx
imulq %rsi, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x358c2
addl $-0x3, %ebx
jmp 0x358f7
addl $-0x2, %ebx
jmp 0x358f7
decl %ebx
movl %ebx, %esi
movq %rdx, -0x78(%rbp)
movq %r13, %rdi
movl $0x2d, %edx
callq 0x3250
movq -0x78(%rbp), %rdi
movl %ebx, %esi
movl %r12d, %edx
callq 0x2aad9
movl $0x2, %r8d
movq %r13, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x43c90(%rip), %rcx     # 0x795bc
callq 0x3230
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x35955
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x3595b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x50(%rbp), %rdi
leaq 0x447f9(%rip), %rsi     # 0x7a176
callq 0x33d0
leaq -0xd0(%rbp), %rsi
movq %rsi, -0xe0(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x359b2
movq %rdx, -0xe0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xd0(%rbp)
jmp 0x359b8
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movl $0xd1b71759, %esi       # imm = 0xD1B71759
movq 0x8(%rax), %rdx
movq %rdx, -0xd8(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl %r14d, %r13d
negl %r13d
cmovsl %r14d, %r13d
movl $0x1, %ebx
cmpl $0xa, %r13d
jb 0x35a29
movl $0x4, %ebx
movl %r13d, %eax
cmpl $0x63, %eax
jbe 0x35a22
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x35a27
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x35a29
movl %eax, %ecx
imulq %rsi, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x359f4
addl $-0x3, %ebx
jmp 0x35a29
addl $-0x2, %ebx
jmp 0x35a29
decl %ebx
movq %r14, -0x118(%rbp)
shrl $0x1f, %r14d
leal (%rbx,%r14), %esi
leaq -0xb0(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0xc0(%rbp), %rdi
movl $0x2d, %edx
callq 0x3250
movl %r14d, %r15d
movq -0xc0(%rbp), %rdi
addq %r15, %rdi
movl %ebx, %esi
movl %r13d, %edx
callq 0x2aad9
movq -0xe0(%rbp), %rcx
movl $0xf, %esi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rcx
je 0x35a8d
movq -0xd0(%rbp), %rsi
movq -0xd8(%rbp), %r8
movq -0xb8(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x35ac5
movl $0xf, %esi
leaq -0xb0(%rbp), %rdi
cmpq %rdi, -0xc0(%rbp)
je 0x35ac0
movq -0xb0(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x35ada
movq -0xc0(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x30a0
jmp 0x35aea
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0x88(%rbp), %rsi
movq %rsi, -0x98(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x35b17
movq %rdx, -0x98(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x88(%rbp)
jmp 0x35b1d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x90(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x35b54
callq 0x31d0
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x35b6c
callq 0x31d0
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x35b7e
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x35b90
callq 0x31d0
movl $0x1, %ebx
cmpl $0x9, -0x180(%rbp)
jb 0x35be0
movl $0x4, %ebx
movl %r12d, %eax
movl $0xd1b71759, %edx       # imm = 0xD1B71759
cmpl $0x63, %eax
jbe 0x35bd9
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x35bde
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x35be0
movl %eax, %ecx
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x35bab
addl $-0x3, %ebx
jmp 0x35be0
addl $-0x2, %ebx
jmp 0x35be0
decl %ebx
movl %ebx, %esi
leaq -0xb0(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0xc0(%rbp), %r12
movq %r12, %rdi
movl $0x2d, %edx
callq 0x3250
movq -0xc0(%rbp), %rdi
movl %ebx, %esi
movq -0xa0(%rbp), %rdx
callq 0x2aad9
movl $0x2, %r8d
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x44075(%rip), %rcx     # 0x79ca2
callq 0x3230
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x35c56
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x35c5c
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
leaq -0x100(%rbp), %r12
movq 0x8(%rax), %rdx
movq %rdx, -0x70(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x78(%rbp), %rdi
leaq 0x444f1(%rip), %rsi     # 0x7a176
callq 0x33d0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x35cae
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x35cb4
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movl $0xd1b71759, %esi       # imm = 0xD1B71759
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movl $0x1, %ebx
cmpl $0xa, %r13d
jb 0x35d18
movl $0x4, %ebx
movl %r13d, %eax
cmpl $0x63, %eax
jbe 0x35d11
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x35d16
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x35d18
movl %eax, %ecx
imulq %rsi, %rcx
shrq $0x2d, %rcx
addl $0x4, %ebx
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x35ce3
addl $-0x3, %ebx
jmp 0x35d18
addl $-0x2, %ebx
jmp 0x35d18
decl %ebx
addl %ebx, %r14d
leaq -0xf0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq %r12, %rdi
movq %r14, %rsi
movl $0x2d, %edx
callq 0x3250
addq -0x100(%rbp), %r15
movq %r15, %rdi
movl %ebx, %esi
movl %r13d, %edx
callq 0x2aad9
movq -0x50(%rbp), %rcx
movl $0xf, %esi
leaq -0x40(%rbp), %rax
cmpq %rax, %rcx
je 0x35d63
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %r8
movq -0xf8(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
leaq -0x198(%rbp), %r14
leaq -0x98(%rbp), %rbx
leaq -0x78(%rbp), %r13
jbe 0x35daa
movl $0xf, %esi
leaq -0xf0(%rbp), %rdi
cmpq %rdi, -0x100(%rbp)
je 0x35da5
movq -0xf0(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x35dbc
movq -0x100(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x30a0
jmp 0x35dc8
movq %r12, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3230
leaq -0xd0(%rbp), %rsi
movq %rsi, -0xe0(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x35df5
movq %rdx, -0xe0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xd0(%rbp)
jmp 0x35dfb
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0xd8(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x35e32
callq 0x31d0
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x35e44
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x35e56
callq 0x31d0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x35e6e
callq 0x31d0
movq %r13, %rdi
leaq 0x43e11(%rip), %rsi     # 0x79c89
movq %rbx, %rdx
callq 0x2a99b
movq %r13, %rdi
leaq 0x44887(%rip), %rsi     # 0x7a711
callq 0x33d0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x35eb3
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x35eb9
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x58(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2ad60
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x35eef
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x35f01
callq 0x31d0
movq %r13, %rdi
leaq 0x43d7e(%rip), %rsi     # 0x79c89
leaq -0xe0(%rbp), %rdx
callq 0x2a99b
movq %r13, %rdi
leaq 0x447f0(%rip), %rsi     # 0x7a711
callq 0x33d0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x35f4a
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x35f50
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x58(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2ad60
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x35f86
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x35f98
callq 0x31d0
leaq -0x1a8(%rbp), %r13
movq %r13, %rdi
leaq 0x43609(%rip), %rsi     # 0x795b2
movq %rbx, %rdx
callq 0x2a99b
movq %r13, %rdi
leaq 0x4329b(%rip), %rsi     # 0x79256
callq 0x33d0
leaq -0x138(%rbp), %rsi
movq %rsi, -0x148(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x35ff0
movq %rdx, -0x148(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x138(%rbp)
jmp 0x35ff6
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x140(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x118(%rbp), %r13
shlq $0x5, %r13
movq -0x110(%rbp), %rax
movq (%rax,%r13), %rsi
movq 0x8(%rax,%r13), %rdx
leaq -0x148(%rbp), %rdi
callq 0x30a0
leaq -0xf0(%rbp), %rsi
movq %rsi, -0x100(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x36067
movq %rdx, -0x100(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xf0(%rbp)
jmp 0x3606d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xf8(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
leaq 0x44124(%rip), %rsi     # 0x7a1b5
callq 0x33d0
leaq -0xb0(%rbp), %rsi
movq %rsi, -0xc0(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x360c6
movq %rdx, -0xc0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xb0(%rbp)
jmp 0x360cc
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0xb8(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x118(%rbp), %rbx
subq -0x1b0(%rbp), %rbx
shlq $0x5, %rbx
movq -0x110(%rbp), %rax
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
leaq -0xc0(%rbp), %rdi
callq 0x30a0
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x36138
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x3613e
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x70(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x78(%rbp), %rdi
leaq 0x445b1(%rip), %rsi     # 0x7a711
callq 0x33d0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x36189
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x3618f
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x58(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2ad60
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x361c5
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x361d7
callq 0x31d0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x361ef
callq 0x31d0
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x36207
callq 0x31d0
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x3621f
callq 0x31d0
movq -0x1a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x36230
callq 0x31d0
leaq -0x1f0(%rbp), %r15
movq %r15, %rdi
leaq 0x43371(%rip), %rsi     # 0x795b2
leaq -0xe0(%rbp), %rdx
callq 0x2a99b
movq %r15, %rdi
leaq 0x43253(%rip), %rsi     # 0x794aa
callq 0x33d0
leaq -0x168(%rbp), %rsi
movq %rsi, -0x178(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x3628c
movq %rdx, -0x178(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x168(%rbp)
jmp 0x36292
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x170(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x110(%rbp), %rax
movq (%rax,%r13), %rsi
movq 0x8(%rax,%r13), %rdx
leaq -0x178(%rbp), %rdi
callq 0x30a0
movq %r14, -0x1a8(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x362f1
movq %rdx, -0x1a8(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x198(%rbp)
jmp 0x362f8
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rdx, -0x1a0(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x1a8(%rbp), %rdi
leaq 0x43e95(%rip), %rsi     # 0x7a1b5
callq 0x33d0
leaq -0x138(%rbp), %rsi
movq %rsi, -0x148(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x36355
movq %rdx, -0x148(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x138(%rbp)
jmp 0x3635b
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x140(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x158(%rbp), %r14
movq (%r14,%rbx), %rsi
movq 0x8(%r14,%rbx), %rdx
leaq -0x148(%rbp), %rdi
callq 0x30a0
leaq -0xf0(%rbp), %rsi
movq %rsi, -0x100(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x363c1
movq %rdx, -0x100(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xf0(%rbp)
jmp 0x363c7
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
leaq -0x98(%rbp), %rbx
movq 0x8(%rax), %rdx
movq %rdx, -0xf8(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq %r12, %rdi
leaq 0x43ca6(%rip), %rsi     # 0x7a098
callq 0x33d0
leaq -0xb0(%rbp), %rsi
movq %rsi, -0xc0(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x36427
movq %rdx, -0xc0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0xb0(%rbp)
jmp 0x3642d
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq -0xa0(%rbp), %r12
movq 0x8(%rax), %rdx
movq %rdx, -0xb8(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%r14,%r13), %rsi
movq 0x8(%r14,%r13), %rdx
leaq -0xc0(%rbp), %rdi
callq 0x30a0
leaq -0x68(%rbp), %rsi
movq %rsi, -0x78(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
leaq -0x198(%rbp), %r14
je 0x3648e
movq %rdx, -0x78(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x68(%rbp)
jmp 0x36494
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x70(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0x78(%rbp), %rdi
leaq 0x4425b(%rip), %rsi     # 0x7a711
callq 0x33d0
leaq -0x40(%rbp), %rsi
movq %rsi, -0x50(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x364df
movq %rdx, -0x50(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x40(%rbp)
jmp 0x364e5
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x48(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x58(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2ad60
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x3651b
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x3652d
callq 0x31d0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x36545
callq 0x31d0
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x3655d
callq 0x31d0
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x36575
callq 0x31d0
movq -0x1a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x36586
callq 0x31d0
movq -0x178(%rbp), %rdi
leaq -0x168(%rbp), %rax
cmpq %rax, %rdi
movq -0x118(%rbp), %r14
je 0x365a5
callq 0x31d0
movq -0x1f0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
cmpq %rax, %rdi
je 0x365bd
callq 0x31d0
movq -0x150(%rbp), %rdi
addq %r13, %rdi
leaq -0xe0(%rbp), %rsi
callq 0x3120
addq -0x188(%rbp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x3120
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x365fd
callq 0x31d0
movq -0x98(%rbp), %rdi
leaq -0x88(%rbp), %rax
cmpq %rax, %rdi
leaq -0x78(%rbp), %r13
je 0x36619
callq 0x31d0
incq %r14
cmpl -0x2c(%rbp), %r14d
jne 0x358a3
cmpl $0x0, -0x2c(%rbp)
movl -0x11c(%rbp), %r12d
jle 0x36693
movq -0x150(%rbp), %rbx
movq -0x158(%rbp), %r14
movq -0x128(%rbp), %r15
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3120
addq $0x20, %r14
addq $0x20, %rbx
decq %r15
jne 0x36648
cmpl $0x0, -0x2c(%rbp)
jle 0x36693
movq -0x188(%rbp), %rbx
movq -0x110(%rbp), %r14
movq -0x128(%rbp), %r15
movq %r14, %rdi
movq %rbx, %rsi
callq 0x3120
addq $0x20, %r14
addq $0x20, %rbx
decq %r15
jne 0x3667b
addl %r12d, %r12d
cmpl -0x2c(%rbp), %r12d
leaq -0x88(%rbp), %r14
leaq -0x98(%rbp), %rbx
jl 0x356f9
leaq -0x98(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x43f42(%rip), %rdx     # 0x7a601
movq %rdx, %rsi
callq 0x2b022
leaq -0x98(%rbp), %rsi
movq -0x58(%rbp), %rdi
callq 0x2ad60
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x366e8
callq 0x31d0
leaq -0x98(%rbp), %rdi
movq %r14, (%rdi)
leaq 0x4361f(%rip), %rsi     # 0x79d18
leaq 0x4362a(%rip), %rdx     # 0x79d2a
callq 0x2b022
leaq -0x98(%rbp), %rsi
movq -0x58(%rbp), %rdi
callq 0x2ad60
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x36726
callq 0x31d0
leaq -0x158(%rbp), %rdx
movl -0x2c(%rbp), %edi
movq -0x58(%rbp), %r8
callq 0x2fc54
movq -0x108(%rbp), %rax
movq (%rax), %rbx
testq %rbx, %rbx
je 0x36776
shlq $0x5, %rbx
movq -0x108(%rbp), %rax
leaq (%rbx,%rax), %r14
addq $-0x8, %r14
negq %rbx
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x3676c
callq 0x31d0
addq $-0x20, %r14
addq $0x20, %rbx
jne 0x3675e
movq -0x108(%rbp), %rdi
callq 0x3280
movq -0x158(%rbp), %rax
testq %rax, %rax
je 0x367ca
leaq -0x8(%rax), %rbx
movq -0x8(%rax), %r14
testq %r14, %r14
je 0x367c2
shlq $0x5, %r14
leaq (%r14,%rax), %r15
addq $-0x10, %r15
negq %r14
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x367b8
callq 0x31d0
addq $-0x20, %r15
addq $0x20, %r14
jne 0x367aa
movq %rbx, %rdi
callq 0x3280
movq -0x188(%rbp), %rax
testq %rax, %rax
je 0x36812
leaq -0x8(%rax), %rbx
movq -0x8(%rax), %r14
testq %r14, %r14
je 0x3680a
shlq $0x5, %r14
leaq (%r14,%rax), %r15
addq $-0x10, %r15
negq %r14
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x36800
callq 0x31d0
addq $-0x20, %r15
addq $0x20, %r14
jne 0x367f2
movq %rbx, %rdi
callq 0x3280
movq -0x150(%rbp), %rax
testq %rax, %rax
je 0x3685a
leaq -0x8(%rax), %rbx
movq -0x8(%rax), %r14
testq %r14, %r14
je 0x36852
shlq $0x5, %r14
leaq (%r14,%rax), %r15
addq $-0x10, %r15
negq %r14
movq -0x10(%r15), %rdi
cmpq %rdi, %r15
je 0x36848
callq 0x31d0
addq $-0x20, %r15
addq $0x20, %r14
jne 0x3683a
movq %rbx, %rdi
callq 0x3280
addq $0x1d8, %rsp            # imm = 0x1D8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x36896
jmp 0x3688e
jmp 0x36896
jmp 0x3688e
jmp 0x36896
jmp 0x3688e
movq %rax, %rbx
movq -0x1d0(%rbp), %rdi
leaq -0x1c0(%rbp), %rax
jmp 0x36b68
movq %rax, %rbx
jmp 0x36bd2
movq %rax, %rbx
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
jne 0x36bcd
jmp 0x36bd2
movq %rax, %rbx
jmp 0x368c7
movq %rax, %rbx
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x368c7
callq 0x31d0
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
jmp 0x36b68
movq %rax, %rbx
leaq -0x168(%rbp), %r12
jmp 0x36a45
movq %rax, %rbx
jmp 0x36a67
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x36929
callq 0x31d0
jmp 0x36929
movq %rax, %rbx
jmp 0x3693b
movq %rax, %rbx
leaq -0x168(%rbp), %r12
jmp 0x36a56
jmp 0x36b9f
movq %rax, %rbx
jmp 0x36970
movq %rax, %rbx
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x3693b
callq 0x31d0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x36958
callq 0x31d0
jmp 0x36958
movq %rax, %rbx
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x36970
callq 0x31d0
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x36a9f
callq 0x31d0
jmp 0x36a9f
movq %rax, %rbx
leaq -0x198(%rbp), %r14
leaq -0x168(%rbp), %r12
jmp 0x36a15
movq %rax, %rbx
jmp 0x369e4
movq %rax, %rbx
leaq -0x198(%rbp), %r14
leaq -0x168(%rbp), %r12
jmp 0x369fd
movq %rax, %rbx
leaq -0x198(%rbp), %r14
leaq -0x168(%rbp), %r12
jmp 0x36a2d
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x369e4
callq 0x31d0
leaq -0x168(%rbp), %r12
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x369fd
callq 0x31d0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x36a15
callq 0x31d0
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x36a2d
callq 0x31d0
movq -0x148(%rbp), %rdi
leaq -0x138(%rbp), %rax
cmpq %rax, %rdi
je 0x36a45
callq 0x31d0
movq -0x1a8(%rbp), %rdi
cmpq %r14, %rdi
je 0x36a56
callq 0x31d0
movq -0x178(%rbp), %rdi
cmpq %r12, %rdi
je 0x36a67
callq 0x31d0
movq -0x1f0(%rbp), %rdi
leaq -0x1e0(%rbp), %rax
jmp 0x36b8c
movq %rax, %rbx
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
cmpq %rax, %rdi
je 0x36add
callq 0x31d0
jmp 0x36add
jmp 0x36b9f
movq %rax, %rbx
movq -0x1a8(%rbp), %rdi
cmpq %r14, %rdi
jne 0x36b91
jmp 0x36ba2
jmp 0x36b9f
jmp 0x36ac5
movq %rax, %rbx
jmp 0x36b29
movq %rax, %rbx
jmp 0x36b3b
movq %rax, %rbx
jmp 0x36b84
movq %rax, %rbx
jmp 0x36b60
jmp 0x36b6f
movq %rax, %rbx
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x36b4e
callq 0x31d0
jmp 0x36b4e
movq %rax, %rbx
movq -0x100(%rbp), %rdi
leaq -0xf0(%rbp), %rax
cmpq %rax, %rdi
je 0x36b17
callq 0x31d0
jmp 0x36b17
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x36b29
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x36b3b
callq 0x31d0
movq -0xc0(%rbp), %rdi
leaq -0xb0(%rbp), %rax
jmp 0x36bb0
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x36b60
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
jne 0x36bcd
jmp 0x36bd2
movq %rax, %rbx
movq -0x50(%rbp), %rdi
leaq -0x40(%rbp), %rax
cmpq %rax, %rdi
je 0x36b84
callq 0x31d0
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0x36ba2
callq 0x31d0
jmp 0x36ba2
jmp 0x36b9f
movq %rax, %rbx
jmp 0x36bba
movq %rax, %rbx
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x36bba
callq 0x31d0
leaq -0x88(%rbp), %r15
movq -0x98(%rbp), %rdi
cmpq %r15, %rdi
je 0x36bd2
callq 0x31d0
movq %rbx, %rdi
callq 0x33a0