// File: /workspace/github_cpp_makefile_star2_O3/atfrank[P]PCASA/lib/Select.cpp
// Function: Select::recursiveDescentParser(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::vector<Atom*, std::allocator<Atom*>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
std::vector<Atom *> Select::recursiveDescentParser (const std::string &str, const std::vector<Atom *> &ref, const std::string &group){
  std::vector<Atom *> cmpCurr, cmpNext;
  std::vector<Atom *> out;
  std::vector<Atom *>::iterator it;
  std::vector<Atom *>::const_iterator iter;
  std::string curr, next, start, end;
  size_t pos;
  double angstrom;

  //For memory efficiency, always parse "next" first!
  if (str.length() == 0){
    return ref;
  }
  else if ((pos=str.find("&")) != std::string::npos){
    //Logical AND between expressions: A:1-10.CA&A:5-15.CA = A:5-10.CA
    out.clear();
    next=str.substr(pos+1, std::string::npos);
    cmpNext=Select::recursiveDescentParser(next, ref, group);
    if (cmpNext.size() == 0){
//      std::cerr << std::endl << "Warning: Selection \"";
//      std::cerr << next << "\" did not match any atoms";
//      std::cerr << std::endl << std::endl;
      return out;
    }
    std::sort(cmpNext.begin(), cmpNext.end());    

    curr=str.substr(0, pos);
    cmpCurr=Select::recursiveDescentParser(curr, ref, group);
    if (cmpCurr.size() == 0){
      return out;
    }
    std::sort(cmpCurr.begin(), cmpCurr.end());

    std::set_intersection(cmpCurr.begin(), cmpCurr.end(), cmpNext.begin(), cmpNext.end(), back_inserter(out));
  }
  else if ((pos=str.find("_")) != std::string::npos){
    //Logical OR between expressions: A:1-5.CA_B:10-15.CA
    next=str.substr(pos+1, std::string::npos);
    cmpNext=Select::recursiveDescentParser(next, ref, group);
    if (cmpNext.size() == 0){
//      std::cerr << std::endl << "Warning: Selection \"";
//      std::cerr << next << "\" did not match any atoms";
//      std::cerr << std::endl << std::endl;
    }
    std::sort(cmpNext.begin(), cmpNext.end());

    curr=str.substr(0, pos);
    cmpCurr=Select::recursiveDescentParser(curr, ref, group);
    std::sort(cmpCurr.begin(), cmpCurr.end());

    out.resize(cmpCurr.size()+cmpNext.size());
    it=std::set_union(cmpCurr.begin(), cmpCurr.end(), cmpNext.begin(), cmpNext.end(), out.begin());
    out.resize(it-out.begin());

    it=std::unique(out.begin(), out.end());
    out.resize(std::distance(out.begin(),it));
  }
  else if ((pos=str.find("!")) == 0){
    //Expression negation: !A:1-5.CA
    curr=str.substr(pos+1, std::string::npos);
    cmpCurr=Select::recursiveDescentParser(curr, ref, group);
    std::sort(cmpCurr.begin(), cmpCurr.end());

    out.clear();
    std::set_difference(ref.begin(), ref.end(), cmpCurr.begin(), cmpCurr.end(), back_inserter(out));
  }
  else if ((pos=str.find_last_of("~#$")) != std::string::npos){
    //Around (~), Expand (#), By Residue ($)

    //N Angstroms around selection X. The final selection does NOT include X
    //A:10+20.CA~1.5

    //Expand selection X by N Angstroms. The final selection includes X
    //A:10+20.CA#2

    //By residue
    //A:10+20.CA$

    //Around, Expand, and By Residue can be chained together
    //A:10+20.CA~1.5#2$

    out.clear();

    next=str.substr(pos+1, std::string::npos);
    std::stringstream(next) >> angstrom;

    if (pos > 0){
      curr=str.substr(0, pos);
      cmpCurr=Select::recursiveDescentParser(curr, ref, group);
      if (cmpCurr.size() == 0){
        return out;
      }
      else if (angstrom <= 0.0){
        return out;
      }
      else{
        //Compute pairwise distances
        if (str.substr(pos, 1).compare("~") == 0){
          for (it=cmpCurr.begin(); it != cmpCurr.end(); ++it){
            for (iter=ref.begin(); iter != ref.end(); ++iter){
              //Distance calculation
              if ((*it) != (*iter) && Analyze::distance((*it)->getCoor() , (*iter)->getCoor()) <= angstrom){
                //out.push_back((*iter));
                cmpNext.push_back((*iter));
              } 
            }
          }
          //Sort, remove duplicates, and find difference
          std::sort(cmpNext.begin(), cmpNext.end());
          cmpNext.erase(unique(cmpNext.begin(), cmpNext.end()), cmpNext.end());
          std::set_difference(cmpNext.begin(), cmpNext.end(), cmpCurr.begin(), cmpCurr.end(), back_inserter(out));
        }
        else if (str.substr(pos, 1).compare("#") == 0){
          for (it=cmpCurr.begin(); it != cmpCurr.end(); ++it){
            for (iter=ref.begin(); iter != ref.end(); ++iter){
              //Distance calculation
              if (Analyze::distance((*it)->getCoor() , (*iter)->getCoor()) <= angstrom){
                out.push_back((*iter));
              }
            }
          }
          //Sort and remove duplicates
          std::sort(out.begin(), out.end());
          out.erase(unique(out.begin(), out.end()), out.end());
        }
        else if (str.substr(pos, 1).compare("$") == 0){
          for (it=cmpCurr.begin(); it != cmpCurr.end(); ++it){
            out.insert(out.end(), (*it)->getResidue()->getAtmVec().begin(), (*it)->getResidue()->getAtmVec().end());
          }
          //Sort and remove duplicates
          std::sort(out.begin(), out.end());
          out.erase(unique(out.begin(), out.end()), out.end());
        }
        else{
          //Do Nothing
        }
        std::sort(out.begin(), out.end());
        return out;
      }
    }
    else{
      return out;
    }
  }
  else if ((pos=str.find(":")) != std::string::npos){
    //Logical AND between Chains and Residues: A:GLY.
    next=str.substr(pos+1, std::string::npos);
    cmpNext=Select::recursiveDescentParser(next, ref, group);
    std::sort(cmpNext.begin(), cmpNext.end());

    if (pos > 0){
      curr=str.substr(0, pos);
      cmpCurr=Select::recursiveDescentParser(curr, ref, "chain");
    }
    else{
      cmpCurr=ref;
    }
    std::sort(cmpCurr.begin(), cmpCurr.end());

    out.clear();
    std::set_intersection(cmpCurr.begin(), cmpCurr.end(), cmpNext.begin(), cmpNext.end(), back_inserter(out));
  }
  else if ((pos=str.find(".")) != std::string::npos && group.compare("atom") != 0){
    //Logical AND between Residues and Atoms: :GLY.CA
    out.clear();
    next=str.substr(pos+1, std::string::npos);
    cmpNext=Select::recursiveDescentParser(next, ref, "atom");
    if (cmpNext.size() == 0){
      return out;
    }
    std::sort(cmpNext.begin(), cmpNext.end());

    if (pos > 0){
      curr=str.substr(0, pos);
      cmpCurr=Select::recursiveDescentParser(curr, ref, "residue");
      if (cmpCurr.size() == 0){
        return out;
      }
    }
    else{
      cmpCurr=ref;
    }
    std::sort(cmpCurr.begin(), cmpCurr.end());

    std::set_intersection(cmpCurr.begin(), cmpCurr.end(), cmpNext.begin(), cmpNext.end(), back_inserter(out));
  }
  else if ((pos=str.find("+")) != std::string::npos){
    //Logical OR between Chains, or between Residues, or between Atoms: 
    //A+B:., :GLY+ALA., :1+2+3., :.CA+CB+C+N
    next=str.substr(pos+1, std::string::npos);
    cmpNext=Select::recursiveDescentParser(next, ref, group);
    std::sort(cmpNext.begin(), cmpNext.end());

    curr=str.substr(0, pos);
    cmpCurr=Select::recursiveDescentParser(curr, ref, group);
    std::sort(cmpCurr.begin(), cmpCurr.end());

    out.resize(cmpCurr.size()+cmpNext.size());
    it=std::set_union(cmpCurr.begin(), cmpCurr.end(), cmpNext.begin(), cmpNext.end(), out.begin());
    out.resize(it-out.begin());

    it=std::unique(out.begin(), out.end());
    out.resize(std::distance(out.begin(),it));
  }
  else if ((pos=str.find("/")) != std::string::npos){
    //Logical AND between Chains, or between Residues, or between Atoms:
    //A/B:., :GLY/ALA., :1/2/3., :.CA/CB/C/N
    out.clear();
    next=str.substr(pos+1, std::string::npos);
    cmpNext=Select::recursiveDescentParser(next, ref, group);
    if (cmpNext.size() == 0){
      return out;
    }
    std::sort(cmpNext.begin(), cmpNext.end());

    curr=str.substr(0, pos);
    cmpCurr=Select::recursiveDescentParser(curr, ref, group);
    if (cmpCurr.size() == 0){
      return out;
    }
    std::sort(cmpCurr.begin(), cmpCurr.end());

    std::set_intersection(cmpCurr.begin(), cmpCurr.end(), cmpNext.begin(), cmpNext.end(), back_inserter(out));
  }
  else if ((pos=str.find("-")) != std::string::npos){
    //Residue identifier range: :1-10.
    start=str.substr(0, pos);
    end=str.substr(pos+1, std::string::npos);
    if (Misc::isdigit(start) && Misc::isdigit(end)){
      out=Select::recursiveDescentParser(Misc::processRange(start, end), ref, group);
    }
    else{
      return ref;
    }
  }
  else if ((pos=str.find("^")) == 0){
    //Chain, Residue, or Atom negation: ^A:., :^GLY., :^2., :.^CA
    curr=str.substr(pos+1, std::string::npos);
    cmpCurr=Select::recursiveDescentParser(curr, ref, group);
    std::sort(cmpCurr.begin(), cmpCurr.end());

    out.clear();
    std::set_difference(ref.begin(), ref.end(), cmpCurr.begin(), cmpCurr.end(), back_inserter(out));
  }
  else if (selKeysRes.find(str) != selKeysRes.end() && group.compare("residue") == 0){
    out.clear();
    if (selKeysRes[str].length() > 0){
      out=Select::recursiveDescentParser(selKeysRes[str], ref, group);
    }
  }
  else if (selKeysAtm.find(str) != selKeysAtm.end() && group.compare("atom") == 0){
    out.clear();
    if (selKeysAtm[str].length() > 0){
      out=Select::recursiveDescentParser(selKeysAtm[str], ref, group);
    }
  }
  else{
    out.clear();
    if (group.compare("chain") == 0){
      for (iter=ref.begin(); iter != ref.end(); ++iter){
        if (str.compare((*iter)->getChainId()) == 0){
          out.push_back(*iter);
        }
        else if (str.compare((*iter)->getSegId()) == 0){
          out.push_back(*iter);
        }
        else{
          continue;
        }
      }
    }
    else if (group.compare("residue") == 0){
      int resnum;
      std::stringstream(str) >> resnum;
      bool digitFlag=Misc::isdigit(str);
      for (iter=ref.begin(); iter != ref.end(); ++iter){
        if (digitFlag){
          if (resnum == (*iter)->getResId()){
            out.push_back(*iter);
          }
          else{
            continue;
          }
        }
        else{
          if (str.compare((*iter)->getResName()) == 0){
            out.push_back(*iter);
          }
          else if (str.compare(Misc::trim((*iter)->getRecName())) == 0){
            out.push_back(*iter);
          }
          else{
            continue;
          }
        }
      }
    }
    else if (group.compare("atom") == 0){
      for (iter=ref.begin(); iter != ref.end(); ++iter){
        if (str.compare(Misc::trim((*iter)->getAtmName())) == 0){
          out.push_back(*iter);
        }
        else if (Misc::toupper(str).compare(Misc::trim(Misc::toupper((*iter)->getAtmType()))) == 0){
          out.push_back(*iter);
        }
        else{
          continue;
        }
      }
    }
    else{
      //Do Nothing
    }
  }

  return out;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x328, %rsp            # imm = 0x328
movq %r8, 0x48(%rsp)
movq %rcx, %r14
movq %rsi, 0x40(%rsp)
xorl %eax, %eax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x20(%rsp)
movq %rax, 0x60(%rsp)
movapd %xmm0, 0x50(%rsp)
movq %rax, 0x10(%rsp)
movapd %xmm0, (%rsp)
leaq 0xa0(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0xc0(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x298(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x278(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
cmpq %rax, 0x8(%rdx)
movq %rdi, 0x68(%rsp)
je 0x35914
movq %rdx, %r15
leaq 0x8834(%rip), %rsi      # 0x3c8e7
movl $0x1, %ecx
movq %rdx, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x34328
movq %rax, %rbp
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x340df
movq %rax, 0x8(%rsp)
leaq 0x1(%rbp), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r13
cmpq %r13, %rdi
je 0x34132
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x50(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x60(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x341bd
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x341bd
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %r12
movq 0x58(%rsp), %rbx
movq %rbx, %rax
subq %r12, %rax
je 0x352b9
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r12, %rdi
movq %rbx, %rsi
callq 0x366ca
movq %r12, %rdi
movq %rbx, %rsi
callq 0x367b3
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r13, %rdi
je 0x3423f
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x342ca
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x342ca
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %r14
movq 0x28(%rsp), %rbx
movq %rbx, %rax
subq %r14, %rax
je 0x352b9
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x366ca
movq %r14, %rdi
movq %rbx, %rsi
callq 0x367b3
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq %rsp, %r8
callq 0x36a24
jmp 0x352b9
leaq 0x8001(%rip), %rsi      # 0x3c330
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x34584
movq %rax, %rbp
leaq 0x1(%rax), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r13
cmpq %r13, %rdi
je 0x3439e
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x50(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x60(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x34429
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x34429
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %r12
movq 0x58(%rsp), %rbx
cmpq %rbx, %r12
je 0x34465
movq %rbx, %rax
subq %r12, %rax
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r12, %rdi
movq %rbx, %rsi
callq 0x366ca
movq %r12, %rdi
movq %rbx, %rsi
callq 0x367b3
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r13, %rdi
je 0x344aa
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x34535
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x34535
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %r14
movq 0x28(%rsp), %rbx
cmpq %rbx, %r14
je 0x34930
movq %rbx, %rax
subq %r14, %rax
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x366ca
movq %r14, %rdi
movq %rbx, %rsi
callq 0x367b3
movq 0x20(%rsp), %r14
movq 0x28(%rsp), %rax
jmp 0x34933
leaq 0x81da(%rip), %rsi      # 0x3c765
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
testq %rax, %rax
je 0x349d7
leaq 0x833f(%rip), %rsi      # 0x3c8e9
movl $0x3, %ecx
movq %r15, %rdi
movq $-0x1, %rdx
callq 0x45c0
cmpq $-0x1, %rax
je 0x34b20
movq %rax, %rbp
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x345db
movq %rax, 0x8(%rsp)
leaq 0x1(%rbp), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r13
cmpq %r13, %rdi
je 0x3462e
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
movl $0x18, %edx
callq 0x4490
leaq 0xd0(%rsp), %rdi
leaq 0x260(%rsp), %rsi
callq 0x41d0
movq 0x3bb944(%rip), %rsi    # 0x3effa8
leaq 0xd0(%rsp), %rdi
callq 0x4240
leaq 0x150(%rsp), %rdi
callq 0x4110
testq %rbp, %rbp
je 0x352b9
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r13, %rdi
je 0x346cc
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x34757
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x34757
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x28(%rsp), %rax
cmpq 0x20(%rsp), %rax
je 0x352b9
xorpd %xmm0, %xmm0
ucomisd 0x260(%rsp), %xmm0
jae 0x352b9
leaq 0xd0(%rsp), %rdi
movl $0x1, %ecx
movq %r15, %rsi
movq %rbp, %rdx
callq 0x4300
leaq 0x8154(%rip), %rsi      # 0x3c8ed
leaq 0xd0(%rsp), %r12
movq %r12, %rdi
callq 0x40e0
movl %eax, %ebx
movq (%r12), %rdi
cmpq %r13, %rdi
je 0x347c4
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
testl %ebx, %ebx
je 0x352ee
leaq 0xd0(%rsp), %rdi
movl $0x1, %ecx
movq %r15, %rsi
movq %rbp, %rdx
callq 0x4300
leaq 0x8104(%rip), %rsi      # 0x3c8ef
leaq 0xd0(%rsp), %r12
movq %r12, %rdi
callq 0x40e0
movl %eax, %ebx
movq (%r12), %rdi
cmpq %r13, %rdi
je 0x34816
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
testl %ebx, %ebx
je 0x35610
leaq 0xd0(%rsp), %rdi
movl $0x1, %ecx
movq %r15, %rsi
movq %rbp, %rdx
callq 0x4300
leaq 0x80ae(%rip), %rsi      # 0x3c8eb
leaq 0xd0(%rsp), %r14
movq %r14, %rdi
callq 0x40e0
movl %eax, %ebx
movq (%r14), %rdi
cmpq %r13, %rdi
je 0x34867
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
testl %ebx, %ebx
jne 0x3572f
movq 0x20(%rsp), %r12
cmpq 0x28(%rsp), %r12
je 0x348c5
movq %rsp, %r14
movq 0x8(%rsp), %r15
movq (%r12), %rdi
callq 0x1490e
movq %rax, %rdi
callq 0x2f5be
movq (%rax), %rbx
movq (%r12), %rdi
callq 0x1490e
movq %rax, %rdi
callq 0x2f5be
movq 0x8(%rax), %rcx
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
callq 0x36e00
addq $0x8, %r12
cmpq 0x28(%rsp), %r12
jne 0x3487e
movq (%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x36544
movq (%rsp), %rax
movq 0x8(%rsp), %rcx
cmpq %rcx, %rax
je 0x3572f
addq $0x8, %rax
cmpq %rcx, %rax
je 0x3572f
movq -0x8(%rax), %rdx
leaq 0x8(%rax), %rsi
cmpq (%rax), %rdx
movq %rsi, %rax
jne 0x348e9
leaq -0x10(%rsi), %rax
cmpq %rcx, %rsi
je 0x356fd
movq %rdx, %rdi
movq (%rsi), %rdx
cmpq %rdx, %rdi
je 0x34922
movq %rdx, 0x8(%rax)
addq $0x8, %rax
addq $0x8, %rsi
cmpq %rcx, %rsi
jne 0x3490f
jmp 0x356f8
movq %r14, %rax
subq %r14, %rax
sarq $0x3, %rax
movq 0x58(%rsp), %rsi
subq 0x50(%rsp), %rsi
sarq $0x3, %rsi
addq %rax, %rsi
movq %rsp, %rdi
callq 0x36582
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq (%rsp), %r8
callq 0x36bb0
movq %rsp, %rdi
subq (%rdi), %rax
sarq $0x3, %rax
movq %rax, %rsi
callq 0x36582
movq (%rsp), %rax
movq 0x8(%rsp), %rsi
cmpq %rsi, %rax
je 0x3529e
leaq 0x8(%rax), %rcx
cmpq %rsi, %rcx
je 0x352aa
movq -0x8(%rcx), %rdx
leaq 0x8(%rcx), %rdi
cmpq (%rcx), %rdx
movq %rdi, %rcx
jne 0x34998
leaq -0x10(%rdi), %rcx
cmpq %rsi, %rdi
je 0x352a3
movq %rdx, %r8
movq (%rdi), %rdx
cmpq %rdx, %r8
je 0x349d1
movq %rdx, 0x8(%rcx)
addq $0x8, %rcx
addq $0x8, %rdi
jmp 0x349b5
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x34a2b
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x34ab6
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x34ab6
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %rbx
movq 0x28(%rsp), %r15
cmpq %r15, %rbx
je 0x34af2
movq %r15, %rax
subq %rbx, %rax
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x366ca
movq %rbx, %rdi
movq %r15, %rsi
callq 0x367b3
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x34b02
movq %rax, 0x8(%rsp)
movq (%r14), %rdi
movq 0x8(%r14), %rsi
movq 0x20(%rsp), %rdx
movq 0x28(%rsp), %rcx
movq %rsp, %r8
callq 0x36c46
jmp 0x352b9
leaq 0x670c(%rip), %rsi      # 0x3b233
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x34d44
movq %rax, %rbp
leaq 0x1(%rax), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r12
cmpq %r12, %rdi
je 0x34b96
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x50(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x60(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x34c21
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x34c21
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0x36544
testq %rbp, %rbp
je 0x34fdb
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x34c7e
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x7c61(%rip), %rsi      # 0x3c8f1
leaq 0x7c5f(%rip), %rdx      # 0x3c8f6
callq 0x6512
leaq 0x70(%rsp), %rdi
leaq 0x90(%rsp), %rdx
leaq 0xd0(%rsp), %r8
movq 0x40(%rsp), %rsi
movq %r14, %rcx
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0x70(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testq %rdi, %rdi
je 0x34d1e
subq %rdi, %rsi
callq 0x42e0
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x34d1e
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x34fe8
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
jmp 0x34fe8
leaq 0x7af3(%rip), %rsi      # 0x3c83e
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x35010
movq %rax, %rbp
leaq 0x7b89(%rip), %rsi      # 0x3c8f7
movq 0x48(%rsp), %rdi
callq 0x40e0
testl %eax, %eax
je 0x35010
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x34d90
movq %rax, 0x8(%rsp)
leaq 0x1(%rbp), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r12
cmpq %r12, %rdi
je 0x34de3
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x7b02(%rip), %rsi      # 0x3c8f7
leaq 0x7aff(%rip), %rdx      # 0x3c8fb
callq 0x6512
leaq 0x70(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
leaq 0xd0(%rsp), %r8
movq 0x40(%rsp), %rsi
movq %r14, %rcx
callq 0x3400e
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movapd 0x70(%rsp), %xmm0
movapd %xmm0, 0x50(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x60(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testq %rdi, %rdi
je 0x34e83
subq %rdi, %rsi
callq 0x42e0
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x34e83
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x34ea0
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
cmpq %rdi, %rsi
je 0x352b9
callq 0x36544
testq %rbp, %rbp
je 0x35742
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x34f06
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
movq %r12, (%rdi)
leaq 0x79e4(%rip), %rsi      # 0x3c8fc
leaq 0x79e4(%rip), %rdx      # 0x3c903
callq 0x6512
leaq 0x70(%rsp), %rdi
leaq 0x90(%rsp), %rdx
leaq 0xd0(%rsp), %r8
movq 0x40(%rsp), %rsi
movq %r14, %rcx
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0x70(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testq %rdi, %rdi
je 0x34fa6
subq %rdi, %rsi
callq 0x42e0
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x34fa6
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x34fc3
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
cmpq %rdi, %rsi
jne 0x35759
jmp 0x352b9
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x1501e
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x36544
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x34307
movq %rax, 0x8(%rsp)
jmp 0x34307
leaq 0x6642(%rip), %rsi      # 0x3b659
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x353fa
movq %rax, %rbp
leaq 0x1(%rax), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r12
cmpq %r12, %rdi
je 0x35086
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x50(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x60(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x35111
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x35111
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0x36544
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x35165
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x351f0
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x351f0
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x36544
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x3, %rax
movq 0x58(%rsp), %rsi
subq 0x50(%rsp), %rsi
sarq $0x3, %rsi
addq %rax, %rsi
movq %rsp, %rdi
callq 0x36582
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq (%rsp), %r8
callq 0x36bb0
movq %rsp, %rdi
subq (%rdi), %rax
sarq $0x3, %rax
movq %rax, %rsi
callq 0x36582
movq (%rsp), %rax
movq 0x8(%rsp), %rsi
cmpq %rsi, %rax
je 0x3529e
leaq 0x8(%rax), %rcx
cmpq %rsi, %rcx
je 0x352aa
movq -0x8(%rcx), %rdx
leaq 0x8(%rcx), %rdi
cmpq (%rcx), %rdx
movq %rdi, %rcx
jne 0x35267
leaq -0x10(%rdi), %rcx
cmpq %rsi, %rdi
je 0x352a3
movq %rdx, %r8
movq (%rdi), %rdx
cmpq %rdx, %r8
je 0x35298
movq %rdx, 0x8(%rcx)
addq $0x8, %rcx
addq $0x8, %rdi
jmp 0x35280
movq %rax, %rsi
jmp 0x352aa
addq $0x8, %rcx
movq %rcx, %rsi
subq %rax, %rsi
sarq $0x3, %rsi
movq %rsp, %rdi
callq 0x36582
movq (%rsp), %rax
movq 0x68(%rsp), %rcx
movq %rax, (%rcx)
movq 0x8(%rsp), %rax
movq %rax, 0x8(%rcx)
movq 0x10(%rsp), %rax
movq %rax, 0x10(%rcx)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rsp)
movq $0x0, 0x10(%rsp)
jmp 0x3591c
movq 0x20(%rsp), %r13
movq 0x28(%rsp), %rax
cmpq %rax, %r13
je 0x35388
movq 0x8(%r14), %rcx
leaq 0x50(%rsp), %r15
movq (%r14), %r12
cmpq %rcx, %r12
je 0x3537f
movq (%r13), %rdi
cmpq (%r12), %rdi
je 0x3536d
callq 0x14946
movq %rax, %rbx
movq (%r12), %rdi
callq 0x14946
movq %rbx, %rdi
movq %rax, %rsi
callq 0xd984
movsd 0x260(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x3536d
movq 0x58(%rsp), %rsi
cmpq 0x60(%rsp), %rsi
je 0x35362
movq (%r12), %rax
movq %rax, (%rsi)
addq $0x8, 0x58(%rsp)
jmp 0x3536d
movq %r15, %rdi
movq %r12, %rdx
callq 0x1511e
addq $0x8, %r12
cmpq 0x8(%r14), %r12
jne 0x35312
movq 0x28(%rsp), %rax
movq %r12, %rcx
addq $0x8, %r13
cmpq %rax, %r13
jne 0x3530a
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0x36544
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
cmpq %rsi, %rdi
je 0x3570d
leaq 0x8(%rdi), %rax
cmpq %rsi, %rax
je 0x3571d
movq -0x8(%rax), %rcx
leaq 0x8(%rax), %rdx
cmpq (%rax), %rcx
movq %rdx, %rax
jne 0x353ae
leaq -0x10(%rdx), %rax
cmpq %rsi, %rdx
je 0x353f1
movq %rcx, %r8
movq (%rdx), %rcx
cmpq %rcx, %r8
je 0x353e3
movq %rcx, 0x8(%rax)
addq $0x8, %rax
addq $0x8, %rdx
cmpq %rsi, %rdx
jne 0x353d0
movq 0x58(%rsp), %rsi
addq $0x8, %rax
jmp 0x35710
leaq 0x7503(%rip), %rsi      # 0x3c904
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x35763
movq %rax, %rbp
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x3542d
movq %rax, 0x8(%rsp)
leaq 0x1(%rbp), %rdx
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0xb0(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r12
cmpq %r12, %rdi
je 0x35480
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x50(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x60(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x3550b
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x3550b
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
cmpq %rdi, %rsi
je 0x352b9
callq 0x36544
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rbp, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x35568
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x355f3
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x355f3
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
cmpq %rdi, %rsi
je 0x352b9
callq 0x36544
jmp 0x34307
movq 0x20(%rsp), %r13
movq 0x28(%rsp), %rax
cmpq %rax, %r13
je 0x3569e
movq 0x8(%r14), %rcx
movq %rsp, %r15
movq (%r14), %r12
cmpq %rcx, %r12
je 0x35695
movq (%r13), %rdi
callq 0x14946
movq %rax, %rbx
movq (%r12), %rdi
callq 0x14946
movq %rbx, %rdi
movq %rax, %rsi
callq 0xd984
movsd 0x260(%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x35683
movq 0x8(%rsp), %rsi
cmpq 0x10(%rsp), %rsi
je 0x35678
movq (%r12), %rax
movq %rax, (%rsi)
addq $0x8, 0x8(%rsp)
jmp 0x35683
movq %r15, %rdi
movq %r12, %rdx
callq 0x1511e
addq $0x8, %r12
cmpq 0x8(%r14), %r12
jne 0x3562e
movq 0x28(%rsp), %rax
movq %r12, %rcx
addq $0x8, %r13
cmpq %rax, %r13
jne 0x35626
movq (%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x36544
movq (%rsp), %rax
movq 0x8(%rsp), %rcx
cmpq %rcx, %rax
je 0x3572f
addq $0x8, %rax
cmpq %rcx, %rax
je 0x3572f
movq -0x8(%rax), %rdx
leaq 0x8(%rax), %rsi
cmpq (%rax), %rdx
movq %rsi, %rax
jne 0x356be
leaq -0x10(%rsi), %rax
cmpq %rcx, %rsi
je 0x356fd
movq %rdx, %rdi
movq (%rsi), %rdx
cmpq %rdx, %rdi
je 0x356ef
movq %rdx, 0x8(%rax)
addq $0x8, %rax
addq $0x8, %rsi
cmpq %rcx, %rsi
jne 0x356dc
movq 0x8(%rsp), %rcx
addq $0x8, %rax
cmpq %rcx, %rax
je 0x3572f
movq %rax, 0x8(%rsp)
jmp 0x3572f
movq %rdi, %rax
cmpq %rsi, %rax
je 0x3571d
movq %rax, 0x58(%rsp)
movq %rax, %rsi
movq 0x20(%rsp), %rdx
movq 0x28(%rsp), %rcx
movq %rsp, %r8
callq 0x36d23
movq (%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x36544
jmp 0x352b9
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x1501e
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x36544
jmp 0x34307
leaq 0x6cb0(%rip), %rsi      # 0x3c41a
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
cmpq $-0x1, %rax
je 0x35a0b
movq %rax, %rbp
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0x4300
leaq 0x288(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %r12
cmpq %r12, %rdi
je 0x357d3
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
incq %rbp
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movq %rbp, %rdx
movq $-0x1, %rcx
callq 0x4300
leaq 0x268(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x35820
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0x288(%rsp), %rdi
callq 0x21bf2
testb %al, %al
movq 0x68(%rsp), %rdi
je 0x35914
leaq 0x268(%rsp), %rdi
callq 0x21bf2
testb %al, %al
movq 0x68(%rsp), %rdi
je 0x35914
leaq 0xd0(%rsp), %rdi
leaq 0x288(%rsp), %rsi
leaq 0x268(%rsp), %rdx
callq 0x21e5e
leaq 0x70(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq (%rsp), %rdi
movq 0x10(%rsp), %rsi
movapd 0x70(%rsp), %xmm0
movapd %xmm0, (%rsp)
movq 0x80(%rsp), %rax
movq %rax, 0x10(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
movq $0x0, 0x80(%rsp)
testq %rdi, %rdi
je 0x358ee
subq %rdi, %rsi
callq 0x42e0
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x358ee
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x352b9
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
jmp 0x352b9
movq %r14, %rsi
callq 0x26f88
movq 0x268(%rsp), %rdi
leaq 0x278(%rsp), %rax
cmpq %rax, %rdi
je 0x35941
movq 0x278(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x288(%rsp), %rdi
leaq 0x298(%rsp), %rax
cmpq %rax, %rdi
je 0x35966
movq 0x298(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x3598b
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x359b0
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x359c6
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x359dd
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x359f4
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x68(%rsp), %rax
addq $0x328, %rsp            # imm = 0x328
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x6ef4(%rip), %rsi      # 0x3c906
movl $0x1, %ecx
movq %r15, %rdi
xorl %edx, %edx
callq 0x4520
testq %rax, %rax
je 0x35cd8
movq 0x40(%rsp), %rbx
leaq 0x30(%rbx), %rbp
movq %rbp, %rdi
movq %r15, %rsi
callq 0x2190a
leaq 0x38(%rbx), %rcx
cmpq %rcx, %rax
je 0x35a60
leaq 0x6eae(%rip), %rsi      # 0x3c8fc
movq 0x48(%rsp), %rdi
callq 0x40e0
testl %eax, %eax
je 0x35dcb
movq 0x40(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2190a
leaq 0x8(%rbx), %rcx
cmpq %rcx, %rax
je 0x35a92
leaq 0x6e77(%rip), %rsi      # 0x3c8f7
movq 0x48(%rsp), %rdi
callq 0x40e0
testl %eax, %eax
je 0x35e78
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x35aa2
movq %rax, 0x8(%rsp)
leaq 0x6e48(%rip), %rsi      # 0x3c8f1
movq 0x48(%rsp), %rbx
movq %rbx, %rdi
callq 0x40e0
testl %eax, %eax
je 0x35e1e
leaq 0x6e37(%rip), %rsi      # 0x3c8fc
movq %rbx, %rdi
callq 0x40e0
testl %eax, %eax
je 0x35f39
leaq 0x6e1b(%rip), %rsi      # 0x3c8f7
movq 0x48(%rsp), %rdi
callq 0x40e0
testl %eax, %eax
jne 0x352b9
movq (%r14), %r12
cmpq 0x8(%r14), %r12
je 0x352b9
leaq 0xd0(%rsp), %rbp
movq (%r12), %rdi
callq 0x148fa
movq %rax, %rbx
leaq 0x2d8(%rsp), %rax
movq %rax, 0x2c8(%rsp)
leaq 0x2c8(%rsp), %r13
movq %r13, %rdi
leaq 0x6b4f(%rip), %rsi      # 0x3c680
leaq 0x6b49(%rip), %rdx      # 0x3c681
callq 0x6512
movq %rbp, %rdi
movq %rbx, %rsi
movq %r13, %rdx
callq 0x21d86
movq %r15, %rdi
movq %rbp, %rsi
callq 0x4050
movl %eax, %r13d
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x35b7e
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x35ba3
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x42e0
testl %r13d, %r13d
je 0x35cba
movq %rbp, %rdi
movq %r15, %rsi
callq 0x21fea
leaq 0x70(%rsp), %r13
movq (%r12), %rdi
callq 0x14900
leaq 0x308(%rsp), %rdi
movq %rax, %rsi
callq 0x21fea
leaq 0x2b8(%rsp), %rax
movq %rax, 0x2a8(%rsp)
leaq 0x2a8(%rsp), %rbx
movq %rbx, %rdi
leaq 0x6a89(%rip), %rsi      # 0x3c680
leaq 0x6a83(%rip), %rdx      # 0x3c681
callq 0x6512
movq %r13, %rdi
leaq 0x308(%rsp), %rsi
movq %rbx, %rdx
callq 0x21d86
movq %rbp, %rdi
movq %r13, %rsi
callq 0x4050
movl %eax, %r13d
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x35c46
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x35c6b
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x308(%rsp), %rdi
leaq 0x318(%rsp), %rax
cmpq %rax, %rdi
je 0x35c90
movq 0x318(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x35cb5
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
testl %r13d, %r13d
jne 0x35cc5
movq %rsp, %rdi
movq %r12, %rsi
callq 0x365b4
addq $0x8, %r12
cmpq 0x8(%r14), %r12
jne 0x35b03
jmp 0x352b9
leaq 0xd0(%rsp), %rdi
movl $0x1, %edx
movq %r15, %rsi
movq $-0x1, %rcx
callq 0x4300
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rbx
movq %rbx, %rsi
callq 0x4370
movq (%rbx), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x35d2c
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0xd0(%rsp), %rdi
leaq 0x90(%rsp), %rdx
movq 0x40(%rsp), %rsi
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq 0x20(%rsp), %rdi
movq 0x30(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, 0x20(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x30(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x35db7
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x35db7
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x36544
jmp 0x34af2
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x35ddb
movq %rax, 0x8(%rsp)
movq %rbp, %rdi
movq %r15, %rsi
callq 0x365d2
cmpq $0x0, 0x8(%rax)
je 0x352b9
movq %rbp, %rdi
movq %r15, %rsi
callq 0x365d2
leaq 0xd0(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq %rax, %rdx
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
jmp 0x35eca
movq (%r14), %r12
cmpq 0x8(%r14), %r12
je 0x352b9
movq %rsp, %r13
movq (%r12), %rdi
callq 0x14926
movq %r15, %rdi
movq %rax, %rsi
callq 0x4050
testl %eax, %eax
je 0x35e5e
movq (%r12), %rdi
callq 0x14966
movq %r15, %rdi
movq %rax, %rsi
callq 0x4050
testl %eax, %eax
jne 0x35e69
movq %r13, %rdi
movq %r12, %rsi
callq 0x365b4
addq $0x8, %r12
cmpq 0x8(%r14), %r12
jne 0x35e2e
jmp 0x352b9
movq (%rsp), %rax
cmpq %rax, 0x8(%rsp)
je 0x35e88
movq %rax, 0x8(%rsp)
movq 0x40(%rsp), %rdi
movq %r15, %rsi
callq 0x365d2
cmpq $0x0, 0x8(%rax)
je 0x352b9
movq 0x40(%rsp), %rdi
movq %r15, %rsi
callq 0x365d2
leaq 0xd0(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq %rax, %rdx
movq %r14, %rcx
movq 0x48(%rsp), %r8
callq 0x3400e
movq (%rsp), %rdi
movq 0x10(%rsp), %rsi
movapd 0xd0(%rsp), %xmm0
movapd %xmm0, (%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x10(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
testq %rdi, %rdi
je 0x352b9
subq %rdi, %rsi
callq 0x42e0
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x352b9
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
jmp 0x3590a
leaq 0xd0(%rsp), %rdi
movq %r15, %rsi
movl $0x18, %edx
callq 0x4490
leaq 0xd0(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x41b0
movq 0x3ba041(%rip), %rsi    # 0x3effa8
leaq 0xd0(%rsp), %rdi
callq 0x4240
leaq 0x150(%rsp), %rdi
callq 0x4110
movq %r15, %rdi
callq 0x21bf2
movb %al, 0x40(%rsp)
movq (%r14), %r12
cmpq 0x8(%r14), %r12
movb 0x40(%rsp), %bpl
je 0x352b9
testb %bpl, %bpl
je 0x35fbe
movl 0x70(%rsp), %ebx
movq (%r12), %rdi
callq 0x14936
cmpl (%rax), %ebx
je 0x3608c
jmp 0x36097
movq (%r12), %rdi
callq 0x14916
movq %r15, %rdi
movq %rax, %rsi
callq 0x4050
testl %eax, %eax
je 0x3608c
movq (%r12), %rdi
callq 0x148ee
movq %rax, %rbx
leaq 0x2f8(%rsp), %rax
movq %rax, 0x2e8(%rsp)
leaq 0x2e8(%rsp), %r13
movq %r13, %rdi
leaq 0x6678(%rip), %rsi      # 0x3c680
leaq 0x6672(%rip), %rdx      # 0x3c681
callq 0x6512
leaq 0xd0(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
movq %r13, %rdx
callq 0x21d86
movq %r15, %rdi
movq %rbp, %rsi
callq 0x4050
movl %eax, %r13d
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x3605d
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x36082
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x42e0
testl %r13d, %r13d
movb 0x40(%rsp), %bpl
jne 0x36097
movq %rsp, %rdi
movq %r12, %rsi
callq 0x365b4
addq $0x8, %r12
cmpq 0x8(%r14), %r12
jne 0x35f9f
jmp 0x352b9
jmp 0x36314
jmp 0x362d0
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x3629e
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
jmp 0x36113
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x36113
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x36317
movq 0x2f8(%rsp), %rsi
jmp 0x362b6
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
jmp 0x3619c
movq %rax, %rbx
jmp 0x36177
jmp 0x36314
movq %rax, %rbx
movq 0x70(%rsp), %rdi
leaq 0x80(%rsp), %rax
cmpq %rax, %rdi
je 0x36177
movq 0x80(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x3619c
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x308(%rsp), %rdi
leaq 0x318(%rsp), %rax
cmpq %rax, %rdi
je 0x36223
movq 0x318(%rsp), %rsi
incq %rsi
callq 0x42e0
jmp 0x36223
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x361f0
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
jmp 0x361f0
movq %rax, %rbx
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x36317
movq 0x2d8(%rsp), %rsi
jmp 0x362b6
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
jne 0x362ae
jmp 0x36317
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x3629e
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x3629e
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
cmpq %r12, %rdi
je 0x36317
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x42e0
jmp 0x36317
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
movq 0x3b9cce(%rip), %rsi    # 0x3effa8
leaq 0xd0(%rsp), %rdi
callq 0x4240
leaq 0x150(%rsp), %rdi
callq 0x4110
jmp 0x36317
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
jmp 0x36314
movq %rax, %rbx
movq 0x268(%rsp), %rdi
leaq 0x278(%rsp), %rax
cmpq %rax, %rdi
je 0x3633c
movq 0x278(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x288(%rsp), %rdi
leaq 0x298(%rsp), %rax
cmpq %rax, %rdi
je 0x36361
movq 0x298(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x36386
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x90(%rsp), %rdi
leaq 0xa0(%rsp), %rax
cmpq %rax, %rdi
je 0x363ab
movq 0xa0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq (%rsp), %rdi
testq %rdi, %rdi
je 0x363c1
movq 0x10(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x363d8
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0x363ef
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x42e0
movq %rbx, %rdi
callq 0x4550
nop