// File: /workspace/github_cpp_makefile_star2_O1/Luthaf[P]zeopp/net.cc
// Function: recursive_find_loops(int, int, int, int, XYZ, std::vector<CONNECTION, std::allocator<CONNECTION>>*, std::vector<MOLECULE, std::allocator<MOLECULE>>*, std::vector<bool, std::allocator<bool>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<XYZ, std::allocator<XYZ>>*, std::vector<bool, std::allocator<bool>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<int, std::allocator<int>>*, std::vector<XYZ, std::allocator<XYZ>>*, std::vector<int, std::allocator<int>>*, std::vector<XYZ, std::allocator<XYZ>>*, int)
bool recursive_find_loops(int this_v, int a, int b, int c, XYZ xyz, vector<CONNECTION> *two_way_connections, vector<MOLECULE> *assembled_molecules, vector<bool> *edge_traversed, vector<int> *vertex_visit_a, vector<int> *vertex_visit_b, vector<int> *vertex_visit_c, vector<XYZ> *vertex_visit_xyz, vector<bool> *vertex_visited, vector<int> *loops_a, vector<int> *loops_b, vector<int> *loops_c, vector<XYZ> *loops_xyz, vector<int> *unit_cell_vector_IDs, vector<XYZ> *unit_cell_vectors, int dimensionality) {
  bool verbose = false;
  //visit this vertex
  if(vertex_visited->at(this_v)) {
    //previously visited this vertex - have we made a loop?
    int old_a = vertex_visit_a->at(this_v);
    int old_b = vertex_visit_b->at(this_v);
    int old_c = vertex_visit_c->at(this_v);
    XYZ old_xyz = vertex_visit_xyz->at(this_v);
    int period_a = a-old_a;
    int period_b = b-old_b;
    int period_c = c-old_c;
    XYZ period_xyz = xyz-old_xyz;
    if(period_a!=0 || period_b!=0 || period_c!=0) { //it's a loop!
if(verbose) printf("DEBUG: a loop was found with periodicity (%d %d %d) and shift %.3f %.3f %.3f\n", period_a, period_b, period_c, period_xyz.x, period_xyz.y, period_xyz.z);
      bool found_all_uc_vectors = false;
      //is this new loop unique?
      if(loop_is_unique(period_a, period_b, period_c, loops_a, loops_b, loops_c)) {
if(verbose) printf("DEBUG: new loop is unique, testing for unit cell vector assignment ... \n");
        //does this new loop allow us to define a unit cell vector?
        found_all_uc_vectors = try_unit_cell_vector_assign(period_a, period_b, period_c, period_xyz, loops_a, loops_b, loops_c, loops_xyz, unit_cell_vector_IDs, unit_cell_vectors, dimensionality);
        //push loop
if(verbose) printf("DEBUG: ... pushing the new loop\n");
        loops_a->push_back(period_a);
        loops_b->push_back(period_b);
        loops_c->push_back(period_c);
        loops_xyz->push_back(period_xyz);
      } else {
if(verbose) printf("DEBUG: new loop is a duplicate\n");
      }
      return found_all_uc_vectors; //quit the recursive method here - we have a loop, time to try and find some other loops
    } else {
      //else do nothing - it's not a loop, so just proceed with journey from this vertex
    }
  } else {
    //haven't previously visited this vertex; visit it
    vertex_visited->at(this_v) = true;
    vertex_visit_a->at(this_v) = a;
    vertex_visit_b->at(this_v) = b;
    vertex_visit_c->at(this_v) = c;
    vertex_visit_xyz->at(this_v) = xyz;
  }
  //at this point, we have either completed a loop, or visited a vertex that did not complete a loop; only if a loop was found do we quit out - else proceed to recursively traverse other connections
  bool found_all_uc_vectors = false; //if we find them all during this run, terminate early
  int num_c = two_way_connections->size();
  for(int i=0; i<num_c && !found_all_uc_vectors; i++) {
    if(!edge_traversed->at(i)) {
      //only traverse new edges
      CONNECTION con = two_way_connections->at(i);
      if(con.v1==this_v) {
        //traverse this edge
        edge_traversed->at(i) = true;
        //don't visit the vertex - that will happen in next call
        int new_a = a+con.a;
        int new_b = b+con.b;
        int new_c = c+con.c;
        int a_edge_index = con.e1;
        int b_edge_index = con.e2;
        int a_vertex_index = con.v1;
        int b_vertex_index = con.v2;
        MOLECULE a_mol = assembled_molecules->at(a_vertex_index);
        int a_site_index = a_mol.permutation.at(a_edge_index);
        int a_atom_index = a_mol.sites.at(a_site_index);
        XYZ a_site = a_mol.atoms_xyz.at(a_atom_index);
        MOLECULE b_mol = assembled_molecules->at(b_vertex_index);
        int b_site_index = b_mol.permutation.at(b_edge_index);
        int b_atom_index = b_mol.sites.at(b_site_index);
        XYZ b_site = b_mol.atoms_xyz.at(b_atom_index);
        XYZ shift = b_site-a_site;
        XYZ new_xyz = xyz-shift;
        found_all_uc_vectors = recursive_find_loops(con.v2, new_a, new_b, new_c, new_xyz, two_way_connections, assembled_molecules, edge_traversed, vertex_visit_a, vertex_visit_b, vertex_visit_c, vertex_visit_xyz, vertex_visited, loops_a, loops_b, loops_c, loops_xyz, unit_cell_vector_IDs, unit_cell_vectors, dimensionality);
      } else if(con.v2==this_v) {
        //traverse this edge, pointing the other way
        edge_traversed->at(i) = true;
        //don't visit the vertex - that will happen in next call
        int new_a = a-con.a;
        int new_b = b-con.b;
        int new_c = c-con.c;
        int a_edge_index = con.e1;
        int b_edge_index = con.e2;
        int a_vertex_index = con.v1;
        int b_vertex_index = con.v2;
        MOLECULE a_mol = assembled_molecules->at(a_vertex_index);
        int a_site_index = a_mol.permutation.at(a_edge_index);
        int a_atom_index = a_mol.sites.at(a_site_index);
        XYZ a_site = a_mol.atoms_xyz.at(a_atom_index);
        MOLECULE b_mol = assembled_molecules->at(b_vertex_index);
        int b_site_index = b_mol.permutation.at(b_edge_index);
        int b_atom_index = b_mol.sites.at(b_site_index);
        XYZ b_site = b_mol.atoms_xyz.at(b_atom_index);
        XYZ shift = b_site-a_site;
        XYZ new_xyz = xyz+shift;
        found_all_uc_vectors = recursive_find_loops(con.v1, new_a, new_b, new_c, new_xyz, two_way_connections, assembled_molecules, edge_traversed, vertex_visit_a, vertex_visit_b, vertex_visit_c, vertex_visit_xyz, vertex_visited, loops_a, loops_b, loops_c, loops_xyz, unit_cell_vector_IDs, unit_cell_vectors, dimensionality);
      }
    }
  }
  return found_all_uc_vectors;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2a8, %rsp            # imm = 0x2A8
movq %r9, 0x98(%rsp)
movq %r8, 0xb0(%rsp)
movl %ecx, 0x8c(%rsp)
movl %edx, 0x94(%rsp)
movl %esi, 0x90(%rsp)
movl %edi, 0xbc(%rsp)
movq 0x340(%rsp), %r14
movq 0x338(%rsp), %r15
movq 0x330(%rsp), %r13
movq 0x320(%rsp), %r12
movq 0x300(%rsp), %rbp
movslq %edi, %rbx
movq %r12, %rdi
movq %rbx, %rsi
callq 0xedb6
testq %rdx, (%rax)
je 0xa06e8
movq (%rbp), %rax
movq 0x8(%rbp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movq 0x308(%rsp), %rdx
movq (%rdx), %rcx
movq 0x8(%rdx), %rdx
subq %rcx, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movq 0x310(%rsp), %rdx
movq (%rdx), %rsi
movq 0x8(%rdx), %rdx
subq %rsi, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movq 0x318(%rsp), %rdx
movq (%rdx), %rdi
movq 0x8(%rdx), %rdx
subq %rdi, %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %r8 # imm = 0xAAAAAAAAAAAAAAAB
imulq %r8, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movl (%rax,%rbx,4), %eax
movl (%rcx,%rbx,4), %ecx
movl (%rsi,%rbx,4), %esi
leaq (%rbx,%rbx,2), %r8
movq 0x10(%rdi,%r8,8), %r9
leaq 0x200(%rsp), %rdx
movq %r9, 0x10(%rdx)
movups (%rdi,%r8,8), %xmm0
movaps %xmm0, (%rdx)
movl 0x90(%rsp), %edi
subl %eax, %edi
movl %edi, 0xe0(%rsp)
movl 0x94(%rsp), %eax
subl %ecx, %eax
movl %eax, 0xc0(%rsp)
movl 0x8c(%rsp), %eax
subl %esi, %eax
movl %eax, 0x110(%rsp)
leaq 0x158(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
callq 0x85da6
movl 0xe0(%rsp), %edi
movl 0xc0(%rsp), %esi
movl %edi, %eax
orl %esi, %eax
movl 0x110(%rsp), %edx
orl %edx, %eax
sete %bl
je 0xa085f
movq 0x328(%rsp), %r12
movq %r12, %rcx
movq %r13, %r8
movq %r15, %r9
callq 0xa122c
testb %al, %al
je 0xa07b8
movl 0xe0(%rsp), %edi
movl 0xc0(%rsp), %esi
movl 0x110(%rsp), %edx
movq 0x168(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x158(%rsp), %xmm0
movups %xmm0, (%rsp)
movl 0x358(%rsp), %eax
movl %eax, 0x30(%rsp)
movq 0x350(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x348(%rsp), %rax
movq %rax, 0x20(%rsp)
movq %r14, 0x18(%rsp)
movq %r12, %rcx
movq %r13, %r8
movq %r15, %r9
callq 0xa1635
movq %r12, %rdi
movl %eax, %r12d
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xa07c0
movl 0xe0(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xa07cd
movq %r12, %rdi
movq %rbx, %rsi
callq 0xedb6
orq %rdx, (%rax)
movq (%rbp), %rax
movq 0x8(%rbp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movl 0x90(%rsp), %ecx
movl %ecx, (%rax,%rbx,4)
movq 0x308(%rsp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movl 0x94(%rsp), %ecx
movl %ecx, (%rax,%rbx,4)
movq 0x310(%rsp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
movl 0x8c(%rsp), %ecx
movl %ecx, (%rax,%rbx,4)
movq 0x318(%rsp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
cmpq %rbx, %rdx
jbe 0xa10df
leaq (%rbx,%rbx,2), %rcx
leaq 0x2e0(%rsp), %rsi
movq 0x10(%rsi), %rdx
movq %rdx, 0x10(%rax,%rcx,8)
movups (%rsi), %xmm0
movups %xmm0, (%rax,%rcx,8)
jmp 0xa0867
xorl %r12d, %r12d
jmp 0xa085f
leaq 0xe0(%rsp), %rdx
callq 0xf7b4
movq 0x8(%r13), %rsi
cmpq 0x10(%r13), %rsi
je 0xa07ea
movl 0xc0(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%r13)
jmp 0xa07fa
leaq 0xc0(%rsp), %rdx
movq %r13, %rdi
callq 0xf7b4
movq 0x8(%r15), %rsi
cmpq 0x10(%r15), %rsi
je 0xa0817
movl 0x110(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%r15)
jmp 0xa0827
leaq 0x110(%rsp), %rdx
movq %r15, %rdi
callq 0xf7b4
movq 0x8(%r14), %rsi
cmpq 0x10(%r14), %rsi
je 0xa084f
movq 0x168(%rsp), %rax
movq %rax, 0x10(%rsi)
movups 0x158(%rsp), %xmm0
movups %xmm0, (%rsi)
addq $0x18, 0x8(%r14)
jmp 0xa085f
leaq 0x158(%rsp), %rdx
movq %r14, %rdi
callq 0x6a5be
testb %bl, %bl
je 0xa10b7
movq 0xb0(%rsp), %rax
movq 0x8(%rax), %rcx
subq (%rax), %rcx
sarq $0x2, %rcx
movabsq $0x6db6db6db6db6db7, %rax # imm = 0x6DB6DB6DB6DB6DB7
imulq %rax, %rcx
testl %ecx, %ecx
jle 0xa10b4
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movl $0x18, %ebp
xorl %r15d, %r15d
xorl %r12d, %r12d
movq %rcx, 0x138(%rsp)
movq 0x2f8(%rsp), %rdi
movq %r15, %rsi
callq 0xedb6
testq %rdx, (%rax)
jne 0xa1094
movq 0xb0(%rsp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
movabsq $0x6db6db6db6db6db7, %rcx # imm = 0x6DB6DB6DB6DB6DB7
imulq %rcx, %rdx
cmpq %r15, %rdx
jbe 0xa10d0
movslq -0x18(%rax,%rbp), %r14
movq %rbp, %rdx
movslq -0x14(%rax,%rbp), %rbp
movslq -0x10(%rax,%rdx), %r13
movslq -0xc(%rax,%rdx), %rbx
movl -0x8(%rax,%rdx), %ecx
movl %ecx, 0xa4(%rsp)
movl -0x4(%rax,%rdx), %ecx
movl %ecx, 0xa8(%rsp)
movq %rdx, 0x108(%rsp)
movl (%rax,%rdx), %eax
movl %eax, 0xac(%rsp)
movl 0xbc(%rsp), %eax
cmpl %eax, %r14d
jne 0xa0c3f
movq 0x2f8(%rsp), %rdi
movq %r15, %rsi
callq 0xedb6
orq %rdx, (%rax)
movq 0x98(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
subq %rsi, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %r12 # imm = 0xCF3CF3CF3CF3CF3D
imulq %r12, %rdx
cmpq %r14, %rdx
jbe 0xa111b
imulq $0xa8, %r14, %rax
addq %rax, %rsi
leaq 0x200(%rsp), %rdi
callq 0x67f48
movq 0x278(%rsp), %rax
movq 0x280(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %r13, %rdx
jbe 0xa1127
movslq (%rax,%r13,4), %rsi
movq 0x248(%rsp), %rax
movq 0x250(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0xa1138
movslq (%rax,%rsi,4), %rsi
movq 0x200(%rsp), %rax
movq 0x208(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
cmpq %rsi, %rdx
jbe 0xa1146
leaq (%rsi,%rsi,2), %rcx
movq 0x10(%rax,%rcx,8), %rdx
movq %rdx, 0xf0(%rsp)
movups (%rax,%rcx,8), %xmm0
movaps %xmm0, 0xe0(%rsp)
movq 0x98(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
subq %rsi, %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
movq %rbp, %r12
cmpq %rbp, %rdx
jbe 0xa1154
imulq $0xa8, %r12, %rax
addq %rax, %rsi
leaq 0x158(%rsp), %rdi
callq 0x67f48
leaq 0x110(%rsp), %r14
movq 0x108(%rsp), %rbp
movq 0x1d0(%rsp), %rax
movq 0x1d8(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rbx, %rdx
jbe 0xa10ee
movslq (%rax,%rbx,4), %rsi
movq 0x1a0(%rsp), %rax
movq 0x1a8(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0xa10ff
movslq (%rax,%rsi,4), %rsi
movq 0x158(%rsp), %rax
movq 0x160(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
cmpq %rsi, %rdx
jbe 0xa110d
leaq (%rsi,%rsi,2), %rcx
movq 0x10(%rax,%rcx,8), %rdx
movq %rdx, 0xd0(%rsp)
movups (%rax,%rcx,8), %xmm0
movaps %xmm0, 0xc0(%rsp)
movq %r14, %rdi
leaq 0xc0(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x85da6
leaq 0x140(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
movq %r14, %rdx
callq 0x85da6
movl 0xa4(%rsp), %esi
addl 0x90(%rsp), %esi
movl 0xa8(%rsp), %edx
addl 0x94(%rsp), %edx
movl 0xac(%rsp), %ecx
addl 0x8c(%rsp), %ecx
movq 0x150(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x140(%rsp), %xmm0
movups %xmm0, (%rsp)
movl 0x358(%rsp), %eax
movl %eax, 0x78(%rsp)
movq 0x350(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x348(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x340(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x338(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x330(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x328(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x320(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x318(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x310(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x308(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x300(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x2f8(%rsp), %rax
movq %rax, 0x18(%rsp)
movl %r12d, %edi
movq 0xb0(%rsp), %r8
movq 0x98(%rsp), %r9
callq 0xa04ac
jmp 0xa0f75
movq %r14, 0x100(%rsp)
movq %rbp, 0x130(%rsp)
cmpl %eax, %ebp
movq 0x108(%rsp), %rbp
jne 0xa1094
movq %rbx, 0x128(%rsp)
movq 0x2f8(%rsp), %rdi
movq %r15, %rsi
callq 0xedb6
orq %rdx, (%rax)
movq 0x98(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
subq %rsi, %rdx
sarq $0x3, %rdx
movabsq $-0x30c30c30c30c30c3, %r12 # imm = 0xCF3CF3CF3CF3CF3D
imulq %r12, %rdx
movq 0x100(%rsp), %rax
cmpq %rax, %rdx
jbe 0xa1181
imulq $0xa8, %rax, %rax
addq %rax, %rsi
leaq 0x200(%rsp), %rdi
callq 0x67f48
movq 0x278(%rsp), %rax
movq 0x280(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %r13, %rdx
jbe 0xa1192
movslq (%rax,%r13,4), %rsi
movq 0x248(%rsp), %rax
movq 0x250(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0xa11a3
movslq (%rax,%rsi,4), %rsi
movq 0x200(%rsp), %rax
movq 0x208(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
cmpq %rsi, %rdx
jbe 0xa11b1
leaq (%rsi,%rsi,2), %rcx
movq 0x10(%rax,%rcx,8), %rdx
movq %rdx, 0xf0(%rsp)
movups (%rax,%rcx,8), %xmm0
movaps %xmm0, 0xe0(%rsp)
movq 0x98(%rsp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
subq %rsi, %rdx
sarq $0x3, %rdx
imulq %r12, %rdx
movq 0x130(%rsp), %rax
cmpq %rax, %rdx
jbe 0xa11bf
imulq $0xa8, %rax, %rax
addq %rax, %rsi
leaq 0x158(%rsp), %rdi
callq 0x67f48
leaq 0x110(%rsp), %rbx
movq 0x1d0(%rsp), %rax
movq 0x1d8(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
movq 0x128(%rsp), %rsi
cmpq %rsi, %rdx
jbe 0xa11d0
movslq (%rax,%rsi,4), %rsi
movq 0x1a0(%rsp), %rax
movq 0x1a8(%rsp), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %rsi, %rdx
jbe 0xa1165
movslq (%rax,%rsi,4), %rsi
movq 0x158(%rsp), %rax
movq 0x160(%rsp), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rdx
cmpq %rsi, %rdx
jbe 0xa1173
leaq (%rsi,%rsi,2), %rcx
movq 0x10(%rax,%rcx,8), %rdx
movq %rdx, 0xd0(%rsp)
movups (%rax,%rcx,8), %xmm0
movaps %xmm0, 0xc0(%rsp)
movq %rbx, %rdi
leaq 0xc0(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x85da6
leaq 0x140(%rsp), %rdi
leaq 0x2e0(%rsp), %rsi
movq %rbx, %rdx
callq 0x85dd4
movl 0x90(%rsp), %esi
subl 0xa4(%rsp), %esi
movl 0x94(%rsp), %edx
subl 0xa8(%rsp), %edx
movl 0x8c(%rsp), %ecx
subl 0xac(%rsp), %ecx
movq 0x150(%rsp), %rax
movq %rax, 0x10(%rsp)
movups 0x140(%rsp), %xmm0
movups %xmm0, (%rsp)
movl 0x358(%rsp), %eax
movl %eax, 0x78(%rsp)
movq 0x350(%rsp), %rax
movq %rax, 0x70(%rsp)
movq 0x348(%rsp), %rax
movq %rax, 0x68(%rsp)
movq 0x340(%rsp), %rax
movq %rax, 0x60(%rsp)
movq 0x338(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x330(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x328(%rsp), %rax
movq %rax, 0x48(%rsp)
movq 0x320(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x318(%rsp), %rax
movq %rax, 0x38(%rsp)
movq 0x310(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x308(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x300(%rsp), %rax
movq %rax, 0x20(%rsp)
movq 0x2f8(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x100(%rsp), %rdi
movq 0xb0(%rsp), %r8
movq 0x98(%rsp), %r9
callq 0xa04ac
movl %eax, %r12d
movq 0x1d0(%rsp), %rdi
testq %rdi, %rdi
je 0xa0f95
movq 0x1e0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1b8(%rsp), %rdi
testq %rdi, %rdi
je 0xa0fb2
movq 0x1c8(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa0fcf
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
leaq 0x188(%rsp), %rdi
callq 0x2f6f0
leaq 0x170(%rsp), %rdi
callq 0x2f6f0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0xa1006
movq 0x168(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x278(%rsp), %rdi
testq %rdi, %rdi
je 0xa1023
movq 0x288(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x260(%rsp), %rdi
testq %rdi, %rdi
je 0xa1040
movq 0x270(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
movq 0x248(%rsp), %rdi
testq %rdi, %rdi
je 0xa105d
movq 0x258(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
leaq 0x230(%rsp), %rdi
callq 0x2f6f0
leaq 0x218(%rsp), %rdi
callq 0x2f6f0
movq 0x200(%rsp), %rdi
testq %rdi, %rdi
je 0xa1094
movq 0x210(%rsp), %rsi
subq %rdi, %rsi
callq 0x4470
incq %r15
movq 0x138(%rsp), %rcx
cmpq %rcx, %r15
jae 0xa10b7
addq $0x1c, %rbp
testb $0x1, %r12b
je 0xa08a9
jmp 0xa10b7
xorl %r12d, %r12d
andb $0x1, %r12b
movl %r12d, %eax
addq $0x2a8, %rsp            # imm = 0x2A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xae5ce(%rip), %rdi     # 0x14f6a5
movq %r15, %rsi
jmp 0xa118b
leaq 0xae5bf(%rip), %rdi     # 0x14f6a5
movq %rbx, %rsi
jmp 0xa118b
leaq 0xae5b0(%rip), %rdi     # 0x14f6a5
movq %rbx, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0xae59f(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae591(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae583(%rip), %rdi     # 0x14f6a5
movq %r14, %rsi
jmp 0xa118b
leaq 0xae577(%rip), %rdi     # 0x14f6a5
movq %r13, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0xae566(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae558(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae54a(%rip), %rdi     # 0x14f6a5
movq %r12, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0xae539(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae52b(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae51d(%rip), %rdi     # 0x14f6a5
movq %rax, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0xae50c(%rip), %rdi     # 0x14f6a5
movq %r13, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0xae4fb(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae4ed(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
leaq 0xae4df(%rip), %rdi     # 0x14f6a5
movq %rax, %rsi
xorl %eax, %eax
callq 0x4630
leaq 0xae4ce(%rip), %rdi     # 0x14f6a5
xorl %eax, %eax
callq 0x4630
jmp 0xa1207
jmp 0xa1202
jmp 0xa1202
jmp 0xa1202
jmp 0xa1202
jmp 0xa1202
jmp 0xa1207
jmp 0xa1207
jmp 0xa1207
jmp 0xa1202
jmp 0xa1202
jmp 0xa1202
jmp 0xa1202
jmp 0xa1207
jmp 0xa1207
jmp 0xa1207
jmp 0xa1207
jmp 0xa1207
movq %rax, %rbx
jmp 0xa1217
movq %rax, %rbx
leaq 0x158(%rsp), %rdi
callq 0x6804c
leaq 0x200(%rsp), %rdi
callq 0x6804c
movq %rbx, %rdi
callq 0x4780