// File: Luthaf[P]zeopp/feature.cc
// Function: FEATURE::calculateSurfaceArea(ATOM_NETWORK*, std::vector<DIJKSTRA_NODE, std::allocator<DIJKSTRA_NODE>>*, std::vector<int, std::allocator<int>>*, int, char*, int)
double FEATURE::calculateSurfaceArea(ATOM_NETWORK *uc,vector<DIJKSTRA_NODE> *ChanNodeList,vector <int> *featnodemap,int curr_f,char *name,int fid){
 
  long int i,j,k,counter=0;  
  int step;
  double r_tr; // threshold for r
  Point pt;

  vector <double> SA_holo;  // stores hologram for each feature
  vector <double> SA_holo_otherf; // as above but excluding surface that is covered by other segments

  srand(randSeed2);
  SPHERE sph,sph2;
  vector <SPHERE> object; // a vector of spheres that define object (segemnt/feature/channel)

  vector <SPHERE> other_object; // vectors of spheres corresponding to other segments



// Create object (current feature) and a list of spheres that overlap with the current feature

vector <int> conn_feat;

 for(j=0;j<(int)ChanNodeList->size();j++)
    {
    if(featnodemap->at(j)==curr_f)
      {
      /* if current feature, build object */
      sph.x=ChanNodeList->at(j).x; sph.y=ChanNodeList->at(j).y; sph.z=ChanNodeList->at(j).z;
      sph.r=SPHERE_SCALE*ChanNodeList->at(j).max_radius;

      object.push_back(sph);

      /* check feature two which it is connected */
      for(i=0;i<(int)(ChanNodeList->at(j).connections.size());i++)      
         {
         if(featnodemap->at(ChanNodeList->at(j).connections.at(i).to)!=curr_f)
            {
            int flag=0;
            for(k=0;k<(int)conn_feat.size();k++)
               {
               if(conn_feat[k]==featnodemap->at(ChanNodeList->at(j).connections.at(i).to)) flag=1;
               };
            if(flag==0) conn_feat.push_back(featnodemap->at(ChanNodeList->at(j).connections.at(i).to));
            };
         };
      };
    }

for(i=0;i<(int)conn_feat.size();i++)
 for(j=0;j<(int)ChanNodeList->size();j++)
    {
    if(featnodemap->at(j)==i)
       {
       sph2.x=ChanNodeList->at(j).x; sph2.y=ChanNodeList->at(j).y; sph2.z=ChanNodeList->at(j).z;
       sph2.r=ChanNodeList->at(j).max_radius*SPHERE_SCALE;

       int flag=0;
       for(k=0;k<(int)object.size();k++)
           {
           Point pp;
           pp[0]=ChanNodeList->at(j).x; pp[1]=ChanNodeList->at(j).y; pp[2]=ChanNodeList->at(j).z;
           Point pt_s=uc->minimizePointDistance(pp,object[k].x, object[k].y, object[k].z); // pt_s shifted
           double d = calcEuclideanDistance(pt_s[0],pt_s[1],pt_s[2],object[k].x, object[k].y, object[k].z);
           if(d<object[k].r+sph2.r) 
              {
              flag=1; break;
              };
           };
       if(flag==0) other_object.push_back(sph2);

       };
    };



cout << "Outside spheres list contain " << other_object.size() << " spheres (of " << ChanNodeList->size() << " nodes)." << "\n";



// Now MC integration of surface


SA_holo.resize(NBINS_SA_HOLO,0);
SA_holo_otherf.resize(NBINS_SA_HOLO,0);

for(step=0;step<NBINS_SA_HOLO;step++) // loop over all bins for surface area holograms
   {
   r_tr=(double)step*SA_HOLO_STEP;

   counter=0;

   for(j=0;j<(int)object.size();j++)
      {
      if(object[j].r>r_tr) { counter++;break;}; // at least one sphere larger than r_tr, sampling makes sense
      };


   if(counter>0)
     { // sampling makes sense


     // Sample around each of the object's spheres
     for(int i = 0; i < (int)object.size(); i++){

        int count = 0;
        int count_otherf=0;

        if(object[i].r-r_tr>0)
        for(int j = 0; j < N_MC_SA_SAMPLE; j++){

        bool overlap=false;
        bool overlap_otherf=false; // overlap with other features

        // Randomly sample point on a sphere of radius 1
        double theta = (rand()*1.0/RAND_MAX)*2*PI;
        double cosphi = 1.0 - (rand()*1.0/RAND_MAX)*2.0;
        double phi = acos(cosphi);

        // Convert spherical coordinates to xyz coordinates
        double xpoint = sin(phi)*cos(theta); //Don't need abs(sin(phi)) becase phi is from 0 to pi
        double ypoint = sin(phi)*sin(theta);
        double zpoint = cosphi;	
      
        // Scale the point to lie on a radius of r_probe + r_atom#i
        xpoint *= (object[i].r-r_tr);
        ypoint *= (object[i].r-r_tr);
        zpoint *= (object[i].r-r_tr);

        // move the point to the segment

        pt[0]=object[i].x+xpoint;
        pt[1]=object[i].y+ypoint;
        pt[2]=object[i].z+zpoint;

//             if(fid==0) cout << "### draw point { "<< pt.x << "  " << pt.y << "  " << pt.z<< " } " << "\n";
 
        Point newpt=uc->xyz_to_abc(pt);
        newpt=uc->shiftABCInUC(newpt);
        pt=uc->abc_to_xyz(newpt);
//        pt = uc->shiftXYZInUC(pt);
//             if(fid==0) cout << "### draw point { "<< pt.x << "  " << pt.y << "  " << pt.z<< " } " << "\n";

        for(k=0;k<(int)object.size();k++)
           {
           if(k!=i)
             {
//             Point pt_s=minimizePointDistance(pt,object[k].x, object[k].y, object[k].z, uc); // pt_s shifted
//             double centerDist = calcEuclideanDistance(pt_s.x,pt_s.y,pt_s.z,object[k].x, object[k].y, object[k].z); 

             double centerDist = uc->calcDistanceXYZ(pt[0],pt[1],pt[2],object[k].x, object[k].y, object[k].z);

             if(centerDist < (object[k].r-r_tr) - 0.00001){
                overlap=true; break;
                };
             };
           };

          if(overlap==false) count++;

         // check otherlap with other segments
  
         if(overlap==false)
         for(int jk=0;jk<(int)other_object.size();jk++)
            {

//           Point pt_s=minimizePointDistance(pt,other_object[jk].x,other_object[jk].y,other_object[jk].z,uc);
//            double dist = calcEuclideanDistance(pt_s.x,pt_s.y,pt_s.z,other_object[jk].x,other_object[jk].y,other_object[jk].z);

            double dist = uc->calcDistanceXYZ(pt[0],pt[1],pt[2],object[jk].x, object[jk].y, object[jk].z);

            if(dist<other_object[jk].r) {
                 overlap_otherf=true; break;
                 };

           };
          

          if(overlap==false&&overlap_otherf==false) 
             {
             count_otherf++;

//             if(fid==0) cout << "### draw point { "<< pt.x << "  " << pt.y << "  " << pt.z<< " } " << "\n"; 

             };


     
       }; // ends for(int j = 0; j < N_MC_SA_SAMPLE; j++){

     cout << " count= " << count << "    cont_otherf= " << count_otherf << "\n";

     SA_holo[step]+= ((double)count/(double)N_MC_SA_SAMPLE)* 4.0 * PI * pow(object[i].r-r_tr,2);
     SA_holo_otherf[step]+= ((double)count_otherf/(double)N_MC_SA_SAMPLE)* 4.0 * PI * pow(object[i].r-r_tr,2);
     }; // ends for(int i = 0; i < (int)object.size() 

     }else   // from if(counter>0)
     {
     // surface area is 0
     SA_holo[step]=0;
     }; // ends  if(counter>0)

   }; // ends for(step=0;step<NBINS_SA_HOLO;step++)


cout << "##SA_holo:  " << name << "  Feature=  " << fid << "   ";
for(i=0;i<NBINS_SA_HOLO;i++)
   {
   cout << SA_holo[i] << "   ";
   };

cout << " Other:  ";
for(i=0;i<NBINS_SA_HOLO;i++)
   {
   cout << SA_holo_otherf[i] << "   ";
   };

cout << "\n";

//volume=volume*((double)(N_MC_SAMPLE-counter))/(double)N_MC_SAMPLE;

return SA_holo[0];


}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x640, %rsp            # imm = 0x640
movl 0x10(%rbp), %eax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movl %r8d, -0x24(%rbp)
movq %r9, -0x30(%rbp)
movq $0x0, -0x50(%rbp)
leaq -0x78(%rbp), %rdi
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0xe9c70
leaq -0x90(%rbp), %rdi
callq 0xf650
leaq -0xa8(%rbp), %rdi
callq 0xf650
movl $0x3b4ca6f5, %edi       # imm = 0x3B4CA6F5
callq 0x5510
leaq -0x100(%rbp), %rdi
callq 0x852e0
leaq -0x118(%rbp), %rdi
callq 0x852e0
leaq -0x130(%rbp), %rdi
callq 0xd0d0
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x2b0(%rbp)
movq -0x18(%rbp), %rdi
callq 0x10100
movq %rax, %rcx
movq -0x2b0(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd9908
movq -0x20(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x101d0
movq %rax, -0x2b8(%rbp)
jmp 0xd958e
movq -0x2b8(%rbp), %rax
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
jne 0xd98f5
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x2c0(%rbp)
jmp 0xd95b6
movq -0x2c0(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xc8(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x2c8(%rbp)
jmp 0xd95e0
movq -0x2c8(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0xc0(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x2d0(%rbp)
jmp 0xd960a
movq -0x2d0(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0xb8(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x2d8(%rbp)
jmp 0xd9634
movq -0x2d8(%rbp), %rax
movsd 0x38(%rax), %xmm0
movsd 0x11dca8(%rip), %xmm1   # 0x1f72f0
mulsd %xmm1, %xmm0
movsd %xmm0, -0xb0(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x85360
jmp 0xd9669
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x2e8(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x2e0(%rbp)
jmp 0xd9692
movq -0x2e0(%rbp), %rdi
addq $0x20, %rdi
callq 0x2a9e0
movq %rax, %rcx
movq -0x2e8(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd98f3
movq -0x20(%rbp), %rax
movq %rax, -0x2f8(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x2f0(%rbp)
jmp 0xd96d9
movq -0x2f0(%rbp), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x64470
movq %rax, -0x300(%rbp)
jmp 0xd96f6
movq -0x2f8(%rbp), %rdi
movq -0x300(%rbp), %rax
movslq 0x4(%rax), %rsi
callq 0x101d0
movq %rax, -0x308(%rbp)
jmp 0xd9716
movq -0x308(%rbp), %rax
movl (%rax), %eax
cmpl -0x24(%rbp), %eax
je 0xd98e0
movl $0x0, -0x140(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x310(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x10090
movq %rax, %rcx
movq -0x310(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd9860
movq -0x48(%rbp), %rsi
leaq -0x130(%rbp), %rdi
callq 0xed60
movl (%rax), %eax
movl %eax, -0x324(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x320(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x318(%rbp)
jmp 0xd97a0
movq -0x318(%rbp), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x64470
movq %rax, -0x330(%rbp)
jmp 0xd97bd
movq -0x320(%rbp), %rdi
movq -0x330(%rbp), %rax
movslq 0x4(%rax), %rsi
callq 0x101d0
movq %rax, -0x338(%rbp)
jmp 0xd97dd
movl -0x324(%rbp), %eax
movq -0x338(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xd984d
movl $0x1, -0x140(%rbp)
jmp 0xd984d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x138(%rbp)
movl %eax, -0x13c(%rbp)
leaq -0x130(%rbp), %rdi
callq 0xec80
leaq -0x118(%rbp), %rdi
callq 0x85400
leaq -0x100(%rbp), %rdi
callq 0x85400
leaq -0xa8(%rbp), %rdi
callq 0xf9d0
leaq -0x90(%rbp), %rdi
callq 0xf9d0
jmp 0xdabbf
jmp 0xd984f
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0xd973a
cmpl $0x0, -0x140(%rbp)
jne 0xd98de
movq -0x20(%rbp), %rax
movq %rax, -0x348(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x340(%rbp)
jmp 0xd988a
movq -0x340(%rbp), %rdi
addq $0x20, %rdi
movq -0x38(%rbp), %rsi
callq 0x64470
movq %rax, -0x350(%rbp)
jmp 0xd98a7
movq -0x348(%rbp), %rdi
movq -0x350(%rbp), %rax
movslq 0x4(%rax), %rsi
callq 0x101d0
movq %rax, -0x358(%rbp)
jmp 0xd98c7
movq -0x358(%rbp), %rsi
leaq -0x130(%rbp), %rdi
callq 0xd1b0
jmp 0xd98dc
jmp 0xd98de
jmp 0xd98e0
jmp 0xd98e2
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0xd9671
jmp 0xd98f5
jmp 0xd98f7
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0xd954e
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x360(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x10090
movq %rax, %rcx
movq -0x360(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd9e1c
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x368(%rbp)
movq -0x18(%rbp), %rdi
callq 0x10100
movq %rax, %rcx
movq -0x368(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd9e09
movq -0x20(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x101d0
movq %rax, -0x370(%rbp)
jmp 0xd9985
movq -0x370(%rbp), %rax
movslq (%rax), %rax
cmpq -0x38(%rbp), %rax
jne 0xd9df6
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x378(%rbp)
jmp 0xd99af
movq -0x378(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0xe8(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x380(%rbp)
jmp 0xd99d9
movq -0x380(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0xe0(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x388(%rbp)
jmp 0xd9a03
movq -0x388(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0xd8(%rbp)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x390(%rbp)
jmp 0xd9a2d
movq -0x390(%rbp), %rax
movsd 0x11d8b4(%rip), %xmm0   # 0x1f72f0
mulsd 0x38(%rax), %xmm0
movsd %xmm0, -0xd0(%rbp)
movl $0x0, -0x144(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x398(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x85300
movq %rax, %rcx
movq -0x398(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd9dd4
leaq -0x160(%rbp), %rdi
xorps %xmm2, %xmm2
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
callq 0xe9c70
jmp 0xd9a9f
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x3a0(%rbp)
jmp 0xd9ab5
movq -0x3a0(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x3b0(%rbp)
leaq -0x160(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0x3a8(%rbp)
jmp 0xd9ae0
movq -0x3a8(%rbp), %rax
movsd -0x3b0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x3b8(%rbp)
jmp 0xd9b09
movq -0x3b8(%rbp), %rax
movsd 0x10(%rax), %xmm0
movsd %xmm0, -0x3c8(%rbp)
leaq -0x160(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0x3c0(%rbp)
jmp 0xd9b37
movq -0x3c0(%rbp), %rax
movsd -0x3c8(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x18(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x10130
movq %rax, -0x3d0(%rbp)
jmp 0xd9b60
movq -0x3d0(%rbp), %rax
movsd 0x18(%rax), %xmm0
movsd %xmm0, -0x3e0(%rbp)
leaq -0x160(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0x3d8(%rbp)
jmp 0xd9b8e
movq -0x3d8(%rbp), %rax
movsd -0x3e0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rax
movq %rax, -0x3f8(%rbp)
movq -0x150(%rbp), %rax
movq %rax, -0x180(%rbp)
movups -0x160(%rbp), %xmm0
movaps %xmm0, -0x190(%rbp)
movq -0x48(%rbp), %rsi
leaq -0x100(%rbp), %rdi
movq %rdi, -0x400(%rbp)
callq 0x88920
movq -0x400(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x3f0(%rbp)
movq -0x48(%rbp), %rsi
callq 0x88920
movq -0x400(%rbp), %rdi
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x3e8(%rbp)
movq -0x48(%rbp), %rsi
callq 0x88920
movq -0x3f8(%rbp), %rsi
movsd -0x3f0(%rbp), %xmm0
movsd -0x3e8(%rbp), %xmm1
movsd 0x10(%rax), %xmm2
movq -0x180(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x190(%rbp), %xmm3
movups %xmm3, (%rax)
leaq -0x178(%rbp), %rdi
callq 0x98010
jmp 0xd9c5a
leaq -0x178(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0x408(%rbp)
jmp 0xd9c71
movq -0x408(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x418(%rbp)
leaq -0x178(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0x410(%rbp)
jmp 0xd9c9e
movq -0x410(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x428(%rbp)
leaq -0x178(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0x420(%rbp)
jmp 0xd9ccb
movq -0x420(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x448(%rbp)
movq -0x48(%rbp), %rsi
leaq -0x100(%rbp), %rdi
movq %rdi, -0x450(%rbp)
callq 0x88920
movq -0x450(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x440(%rbp)
movq -0x48(%rbp), %rsi
callq 0x88920
movq -0x450(%rbp), %rdi
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x438(%rbp)
movq -0x48(%rbp), %rsi
callq 0x88920
movsd -0x418(%rbp), %xmm0
movsd -0x428(%rbp), %xmm1
movsd -0x448(%rbp), %xmm2
movsd -0x440(%rbp), %xmm3
movsd -0x438(%rbp), %xmm4
movsd 0x10(%rax), %xmm5
callq 0xebaf0
movsd %xmm0, -0x430(%rbp)
jmp 0xd9d6a
movsd -0x430(%rbp), %xmm0
movsd %xmm0, -0x198(%rbp)
movsd -0x198(%rbp), %xmm0
movsd %xmm0, -0x458(%rbp)
movq -0x48(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd -0x458(%rbp), %xmm1
movsd 0x18(%rax), %xmm0
addsd -0xd0(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xd9dc1
movl $0x1, -0x144(%rbp)
jmp 0xd9dd4
jmp 0xd9dc3
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0xd9a5b
cmpl $0x0, -0x144(%rbp)
jne 0xd9df4
leaq -0x118(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x85360
jmp 0xd9df2
jmp 0xd9df4
jmp 0xd9df6
jmp 0xd9df8
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0xd9945
jmp 0xd9e0b
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0xd9910
movq 0x19919d(%rip), %rdi    # 0x272fc0
leaq 0x121d65(%rip), %rsi    # 0x1fbb8f
callq 0x5540
movq %rax, -0x460(%rbp)
jmp 0xd9e38
leaq -0x118(%rbp), %rdi
callq 0x85300
movq -0x460(%rbp), %rdi
movq %rax, %rsi
callq 0x5160
movq %rax, -0x468(%rbp)
jmp 0xd9e5c
movq -0x468(%rbp), %rdi
leaq 0x121d43(%rip), %rsi    # 0x1fbbad
callq 0x5540
movq %rax, -0x470(%rbp)
jmp 0xd9e78
movq -0x18(%rbp), %rdi
callq 0x10100
movq -0x470(%rbp), %rdi
movq %rax, %rsi
callq 0x5160
movq %rax, -0x478(%rbp)
jmp 0xd9e99
movq -0x478(%rbp), %rdi
leaq 0x121d14(%rip), %rsi    # 0x1fbbbb
callq 0x5540
movq %rax, -0x480(%rbp)
jmp 0xd9eb5
movq -0x480(%rbp), %rdi
leaq 0x11f762(%rip), %rsi    # 0x1f9625
callq 0x5540
jmp 0xd9eca
movq $0x0, -0x1a0(%rbp)
leaq -0x90(%rbp), %rdi
movl $0x1, %esi
leaq -0x1a0(%rbp), %rdx
callq 0x85210
jmp 0xd9eef
movq $0x0, -0x1a8(%rbp)
leaq -0xa8(%rbp), %rdi
movl $0x1, %esi
leaq -0x1a8(%rbp), %rdx
callq 0x85210
jmp 0xd9f14
movl $0x0, -0x54(%rbp)
cmpl $0x1, -0x54(%rbp)
jge 0xda9f4
cvtsi2sdl -0x54(%rbp), %xmm0
movsd 0x12199e(%rip), %xmm1   # 0x1fb8d0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rbp)
movq $0x0, -0x50(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x488(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x85300
movq %rax, %rcx
movq -0x488(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xd9fae
movq -0x40(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd 0x18(%rax), %xmm0
ucomisd -0x60(%rbp), %xmm0
jbe 0xd9f9e
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0xd9fae
jmp 0xd9fa0
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0xd9f4b
cmpq $0x0, -0x50(%rbp)
jle 0xda9cd
movl $0x0, -0x1ac(%rbp)
movl -0x1ac(%rbp), %eax
movl %eax, -0x48c(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x85300
movq %rax, %rcx
movl -0x48c(%rbp), %eax
cmpl %ecx, %eax
jge 0xda9cb
movl $0x0, -0x1b0(%rbp)
movl $0x0, -0x1b4(%rbp)
movslq -0x1ac(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd 0x18(%rax), %xmm0
subsd -0x60(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xda802
movl $0x0, -0x1b8(%rbp)
cmpl $0x1f4, -0x1b8(%rbp)    # imm = 0x1F4
jge 0xda800
movb $0x0, -0x1b9(%rbp)
movb $0x0, -0x1ba(%rbp)
callq 0x5190
cvtsi2sd %eax, %xmm0
movsd 0x11c5a5(%rip), %xmm1   # 0x1f6608
movsd %xmm1, -0x4c0(%rbp)
divsd %xmm1, %xmm0
addsd %xmm0, %xmm0
movsd 0x11c5b5(%rip), %xmm1   # 0x1f6630
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1c8(%rbp)
callq 0x5190
movsd -0x4c0(%rbp), %xmm0
cvtsi2sd %eax, %xmm1
divsd %xmm0, %xmm1
addsd %xmm1, %xmm1
movsd 0x117fa8(%rip), %xmm0   # 0x1f2050
subsd %xmm1, %xmm0
movsd %xmm0, -0x1d0(%rbp)
movsd -0x1d0(%rbp), %xmm0
callq 0x54f0
movsd %xmm0, -0x1d8(%rbp)
movsd -0x1d8(%rbp), %xmm0
callq 0x5140
movsd %xmm0, -0x4b8(%rbp)
movsd -0x1c8(%rbp), %xmm0
callq 0x5970
movaps %xmm0, %xmm1
movsd -0x4b8(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1e0(%rbp)
movsd -0x1d8(%rbp), %xmm0
callq 0x5140
movsd %xmm0, -0x4b0(%rbp)
movsd -0x1c8(%rbp), %xmm0
callq 0x5140
movaps %xmm0, %xmm1
movsd -0x4b0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1e8(%rbp)
movsd -0x1d0(%rbp), %xmm0
movsd %xmm0, -0x1f0(%rbp)
movslq -0x1ac(%rbp), %rsi
leaq -0x100(%rbp), %rdi
movq %rdi, -0x4a8(%rbp)
callq 0x88920
movq -0x4a8(%rbp), %rdi
movsd 0x18(%rax), %xmm1
movsd -0x60(%rbp), %xmm0
subsd %xmm0, %xmm1
movsd -0x1e0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1e0(%rbp)
movslq -0x1ac(%rbp), %rsi
callq 0x88920
movq -0x4a8(%rbp), %rdi
movsd 0x18(%rax), %xmm1
movsd -0x60(%rbp), %xmm0
subsd %xmm0, %xmm1
movsd -0x1e8(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1e8(%rbp)
movslq -0x1ac(%rbp), %rsi
callq 0x88920
movq -0x4a8(%rbp), %rdi
movsd 0x18(%rax), %xmm1
movsd -0x60(%rbp), %xmm0
subsd %xmm0, %xmm1
movsd -0x1f0(%rbp), %xmm0
mulsd %xmm1, %xmm0
movsd %xmm0, -0x1f0(%rbp)
movslq -0x1ac(%rbp), %rsi
callq 0x88920
movsd (%rax), %xmm0
movsd -0x1e0(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x4a0(%rbp)
leaq -0x78(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0x498(%rbp)
jmp 0xda230
movq -0x498(%rbp), %rax
movsd -0x4a0(%rbp), %xmm0
movsd %xmm0, (%rax)
movslq -0x1ac(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd 0x8(%rax), %xmm0
movsd -0x1e8(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x4d0(%rbp)
leaq -0x78(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0x4c8(%rbp)
jmp 0xda286
movq -0x4c8(%rbp), %rax
movsd -0x4d0(%rbp), %xmm0
movsd %xmm0, (%rax)
movslq -0x1ac(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd 0x10(%rax), %xmm0
movsd -0x1f0(%rbp), %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, -0x4e0(%rbp)
leaq -0x78(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0x4d8(%rbp)
jmp 0xda2dc
movq -0x4d8(%rbp), %rax
movsd -0x4e0(%rbp), %xmm0
movsd %xmm0, (%rax)
movq -0x10(%rbp), %rsi
movq -0x68(%rbp), %rax
movq %rax, -0x220(%rbp)
movups -0x78(%rbp), %xmm0
movaps %xmm0, -0x230(%rbp)
movq -0x220(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x230(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x210(%rbp), %rdi
callq 0x96150
jmp 0xda32f
movq -0x10(%rbp), %rsi
movq -0x200(%rbp), %rax
movq %rax, -0x250(%rbp)
movups -0x210(%rbp), %xmm0
movaps %xmm0, -0x260(%rbp)
movq -0x250(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x260(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x248(%rbp), %rdi
callq 0x97e90
jmp 0xda375
movq -0x238(%rbp), %rax
movq %rax, -0x200(%rbp)
movups -0x248(%rbp), %xmm0
movaps %xmm0, -0x210(%rbp)
movq -0x10(%rbp), %rsi
movq -0x200(%rbp), %rax
movq %rax, -0x280(%rbp)
movaps -0x210(%rbp), %xmm0
movaps %xmm0, -0x290(%rbp)
movq -0x280(%rbp), %rcx
movq %rsp, %rax
movq %rcx, 0x10(%rax)
movaps -0x290(%rbp), %xmm0
movups %xmm0, (%rax)
leaq -0x278(%rbp), %rdi
callq 0x961d0
jmp 0xda3d7
movq -0x278(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x270(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x268(%rbp), %rax
movq %rax, -0x68(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x4e8(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x85300
movq %rax, %rcx
movq -0x4e8(%rbp), %rax
movslq %ecx, %rcx
cmpq %rcx, %rax
jge 0xda5cc
movq -0x48(%rbp), %rax
movslq -0x1ac(%rbp), %rcx
cmpq %rcx, %rax
je 0xda5b9
movq -0x10(%rbp), %rax
movq %rax, -0x4f8(%rbp)
leaq -0x78(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0x4f0(%rbp)
jmp 0xda460
movq -0x4f0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x508(%rbp)
leaq -0x78(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0x500(%rbp)
jmp 0xda48a
movq -0x500(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x518(%rbp)
leaq -0x78(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0x510(%rbp)
jmp 0xda4b4
movq -0x510(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x538(%rbp)
movq -0x48(%rbp), %rsi
leaq -0x100(%rbp), %rdi
movq %rdi, -0x540(%rbp)
callq 0x88920
movq -0x540(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x530(%rbp)
movq -0x48(%rbp), %rsi
callq 0x88920
movq -0x540(%rbp), %rdi
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x528(%rbp)
movq -0x48(%rbp), %rsi
callq 0x88920
movq -0x4f8(%rbp), %rdi
movsd -0x508(%rbp), %xmm0
movsd -0x518(%rbp), %xmm1
movsd -0x538(%rbp), %xmm2
movsd -0x530(%rbp), %xmm3
movsd -0x528(%rbp), %xmm4
movsd 0x10(%rax), %xmm5
callq 0x97a10
movsd %xmm0, -0x520(%rbp)
jmp 0xda55a
movsd -0x520(%rbp), %xmm0
movsd %xmm0, -0x298(%rbp)
movsd -0x298(%rbp), %xmm0
movsd %xmm0, -0x548(%rbp)
movq -0x48(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd -0x548(%rbp), %xmm1
movsd 0x18(%rax), %xmm0
subsd -0x60(%rbp), %xmm0
movsd 0x11c074(%rip), %xmm2   # 0x1f6618
subsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0xda5b7
movb $0x1, -0x1b9(%rbp)
jmp 0xda5cc
jmp 0xda5b9
jmp 0xda5bb
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0xda400
movb -0x1b9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0xda5eb
movl -0x1b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b0(%rbp)
movb -0x1b9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0xda7bb
movl $0x0, -0x29c(%rbp)
movl -0x29c(%rbp), %eax
movl %eax, -0x54c(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x85300
movq %rax, %rcx
movl -0x54c(%rbp), %eax
cmpl %ecx, %eax
jge 0xda7b9
movq -0x10(%rbp), %rax
movq %rax, -0x560(%rbp)
leaq -0x78(%rbp), %rdi
xorl %esi, %esi
callq 0xe9d70
movq %rax, -0x558(%rbp)
jmp 0xda651
movq -0x558(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x570(%rbp)
leaq -0x78(%rbp), %rdi
movl $0x1, %esi
callq 0xe9d70
movq %rax, -0x568(%rbp)
jmp 0xda67b
movq -0x568(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x580(%rbp)
leaq -0x78(%rbp), %rdi
movl $0x2, %esi
callq 0xe9d70
movq %rax, -0x578(%rbp)
jmp 0xda6a5
movq -0x578(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x5a0(%rbp)
movslq -0x29c(%rbp), %rsi
leaq -0x100(%rbp), %rdi
movq %rdi, -0x5a8(%rbp)
callq 0x88920
movq -0x5a8(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x598(%rbp)
movslq -0x29c(%rbp), %rsi
callq 0x88920
movq -0x5a8(%rbp), %rdi
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x590(%rbp)
movslq -0x29c(%rbp), %rsi
callq 0x88920
movq -0x560(%rbp), %rdi
movsd -0x570(%rbp), %xmm0
movsd -0x580(%rbp), %xmm1
movsd -0x5a0(%rbp), %xmm2
movsd -0x598(%rbp), %xmm3
movsd -0x590(%rbp), %xmm4
movsd 0x10(%rax), %xmm5
callq 0x97a10
movsd %xmm0, -0x588(%rbp)
jmp 0xda754
movsd -0x588(%rbp), %xmm0
movsd %xmm0, -0x2a8(%rbp)
movsd -0x2a8(%rbp), %xmm0
movsd %xmm0, -0x5b0(%rbp)
movslq -0x29c(%rbp), %rsi
leaq -0x118(%rbp), %rdi
callq 0x88920
movsd -0x5b0(%rbp), %xmm1
movsd 0x18(%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0xda7a3
movb $0x1, -0x1ba(%rbp)
jmp 0xda7b9
jmp 0xda7a5
movl -0x29c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x29c(%rbp)
jmp 0xda609
jmp 0xda7bb
movb -0x1b9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0xda7ea
movb -0x1ba(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0xda7ea
movl -0x1b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b4(%rbp)
jmp 0xda7ec
movl -0x1b8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b8(%rbp)
jmp 0xda034
jmp 0xda802
movq 0x1987b7(%rip), %rdi    # 0x272fc0
leaq 0x1213d8(%rip), %rsi    # 0x1fbbe8
callq 0x5540
movq %rax, -0x5b8(%rbp)
jmp 0xda81e
movq -0x5b8(%rbp), %rdi
movl -0x1b0(%rbp), %esi
callq 0x58d0
movq %rax, -0x5c0(%rbp)
jmp 0xda839
movq -0x5c0(%rbp), %rdi
leaq 0x1213aa(%rip), %rsi    # 0x1fbbf1
callq 0x5540
movq %rax, -0x5c8(%rbp)
jmp 0xda855
movq -0x5c8(%rbp), %rdi
movl -0x1b4(%rbp), %esi
callq 0x58d0
movq %rax, -0x5d0(%rbp)
jmp 0xda870
movq -0x5d0(%rbp), %rdi
leaq 0x11eda7(%rip), %rsi    # 0x1f9625
callq 0x5540
jmp 0xda885
cvtsi2sdl -0x1b0(%rbp), %xmm0
movsd 0x121043(%rip), %xmm1   # 0x1fb8d8
divsd %xmm1, %xmm0
movsd 0x11bd87(%rip), %xmm1   # 0x1f6628
mulsd %xmm1, %xmm0
movsd 0x11bd83(%rip), %xmm1   # 0x1f6630
mulsd %xmm1, %xmm0
movsd %xmm0, -0x5e0(%rbp)
movslq -0x1ac(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd 0x18(%rax), %xmm0
movsd -0x60(%rbp), %xmm1
subsd %xmm1, %xmm0
movl $0x2, %edi
callq 0x850c0
movsd %xmm0, -0x5d8(%rbp)
jmp 0xda8ee
movslq -0x54(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0xedb0
movsd -0x5e0(%rbp), %xmm0
movsd -0x5d8(%rbp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
cvtsi2sdl -0x1b4(%rbp), %xmm0
movsd 0x120faa(%rip), %xmm1   # 0x1fb8d8
divsd %xmm1, %xmm0
movsd 0x11bcee(%rip), %xmm1   # 0x1f6628
mulsd %xmm1, %xmm0
movsd 0x11bcea(%rip), %xmm1   # 0x1f6630
mulsd %xmm1, %xmm0
movsd %xmm0, -0x5f0(%rbp)
movslq -0x1ac(%rbp), %rsi
leaq -0x100(%rbp), %rdi
callq 0x88920
movsd 0x18(%rax), %xmm0
movsd -0x60(%rbp), %xmm1
subsd %xmm1, %xmm0
movl $0x2, %edi
callq 0x850c0
movsd %xmm0, -0x5e8(%rbp)
jmp 0xda987
movslq -0x54(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0xedb0
movsd -0x5f0(%rbp), %xmm0
movsd -0x5e8(%rbp), %xmm2
movsd (%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl -0x1ac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1ac(%rbp)
jmp 0xd9fc3
jmp 0xda9e4
movslq -0x54(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0xedb0
xorps %xmm0, %xmm0
movsd %xmm0, (%rax)
jmp 0xda9e6
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0xd9f1b
movq 0x1985c5(%rip), %rdi    # 0x272fc0
leaq 0x1211c2(%rip), %rsi    # 0x1fbbc4
callq 0x5540
movq %rax, -0x5f8(%rbp)
jmp 0xdaa10
movq -0x5f8(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x5540
movq %rax, -0x600(%rbp)
jmp 0xdaa29
movq -0x600(%rbp), %rdi
leaq 0x12119a(%rip), %rsi    # 0x1fbbd1
callq 0x5540
movq %rax, -0x608(%rbp)
jmp 0xdaa45
movq -0x608(%rbp), %rdi
movl 0x10(%rbp), %esi
callq 0x58d0
movq %rax, -0x610(%rbp)
jmp 0xdaa5d
movq -0x610(%rbp), %rdi
leaq 0x117a1c(%rip), %rsi    # 0x1f2487
callq 0x5540
jmp 0xdaa72
movq $0x0, -0x38(%rbp)
cmpq $0x1, -0x38(%rbp)
jge 0xdaacf
movq -0x38(%rbp), %rsi
leaq -0x90(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
movq 0x198524(%rip), %rdi    # 0x272fc0
callq 0x5980
movq %rax, -0x618(%rbp)
jmp 0xdaaaa
movq -0x618(%rbp), %rdi
leaq 0x1179cf(%rip), %rsi    # 0x1f2487
callq 0x5540
jmp 0xdaabf
jmp 0xdaac1
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0xdaa7a
movq 0x1984ea(%rip), %rdi    # 0x272fc0
leaq 0x121101(%rip), %rsi    # 0x1fbbde
callq 0x5540
jmp 0xdaae4
movq $0x0, -0x38(%rbp)
cmpq $0x1, -0x38(%rbp)
jge 0xdab41
movq -0x38(%rbp), %rsi
leaq -0xa8(%rbp), %rdi
callq 0xedb0
movsd (%rax), %xmm0
movq 0x1984b2(%rip), %rdi    # 0x272fc0
callq 0x5980
movq %rax, -0x620(%rbp)
jmp 0xdab1c
movq -0x620(%rbp), %rdi
leaq 0x11795d(%rip), %rsi    # 0x1f2487
callq 0x5540
jmp 0xdab31
jmp 0xdab33
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0xdaaec
movq 0x198478(%rip), %rdi    # 0x272fc0
leaq 0x11ead6(%rip), %rsi    # 0x1f9625
callq 0x5540
jmp 0xdab56
leaq -0x90(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xedb0
movsd (%rax), %xmm0
movsd %xmm0, -0x628(%rbp)
leaq -0x130(%rbp), %rdi
callq 0xec80
leaq -0x118(%rbp), %rdi
callq 0x85400
leaq -0x100(%rbp), %rdi
callq 0x85400
leaq -0xa8(%rbp), %rdi
callq 0xf9d0
leaq -0x90(%rbp), %rdi
callq 0xf9d0
movsd -0x628(%rbp), %xmm0
addq $0x640, %rsp            # imm = 0x640
popq %rbp
retq
movq -0x138(%rbp), %rdi
callq 0x58f0
nopl (%rax,%rax)