// File: /workspace/github_cpp_makefile_star2_O2/jamesliu516[P]amrdg2d/point_vec.cpp
// Function: point_vec()
void point_vec()
{
   Node *current;
   
   OctCell *pcell0;
   OctCell *pcell1;
   Vec2D x0,x1;
   
  // OctCell *pcellv[4]={NULL}; 
   map<OctCell *, short> pcellv; //��������cell,�ڶ�������ֵ��ʾcell�ĵڼ������㹲��cell
   set<OctCell *> pcell_set;   //���ܹ�������Щcell
   
   cellPointIndex cpi1;	
   pointInCell pic1;
   
   int cnt=0;//the number of points
   short cnl=0;//��ʾ���������м���cell���˵�,һ��4��������Ӧ��ϸ���洦Ϊ2
   
   int idflg=0;
   
   int id1=0;
   short ii,jj;
   
   OctCell *pp[8]={NULL};
   OctCell *parent;
   
   current = HeadListAllGrid;  
   
   cellPoints.clear();
   points4out.clear();
  while(current != NULL)
  {		
    pcell0 = current->cell;
    if(pcell0->flag % 2 == 0 && current->flg==0) 
//    if(pcell0->exflag  == 2  ) 
         cellPoints.insert(make_pair(pcell0,cpi1)); 
    current = current->next;
  }
  
  cout<<"Total output cells: "<<cellPoints.size()<<endl;

  
  cnt=0;
  	   
    map<OctCell *, cellPointIndex>::iterator itmb;

    for(map<OctCell *, cellPointIndex>::iterator itmap=cellPoints.begin(); itmap!=cellPoints.end();++itmap) {
    
        parent=pcell0=itmap->first;       
    
        pp[0]=EastNeighbor(parent);
	 pp[1]=NorthNeighbor(pp[0]);
        pp[2]=NorthNeighbor(parent);
	 pp[3]=WestNeighbor(pp[2]);
	 pp[4]=WestNeighbor(parent);
	 pp[5]=SouthNeighbor(pp[4]);
	 pp[6]=SouthNeighbor(parent);
	 pp[7]=EastNeighbor(pp[6]);
         
        pcell_set.clear();
        if(pp[0]->reflag==0){
            pcell_set.insert(pp[0]);
         }         
        else {
            pcell_set.insert(pp[0]->children[3]);
            pcell_set.insert(pp[0]->children[0]);
        }
        
        if(pp[1]->reflag==0){
            pcell_set.insert(pp[1]);
         }         
        else {
            pcell_set.insert(pp[1]->children[0]);
         }        
         
        if(pp[2]->reflag==0){
            pcell_set.insert(pp[2]);
         }         
        else {
            pcell_set.insert(pp[2]->children[1]);
            pcell_set.insert(pp[2]->children[0]);
        }
        
        if(pp[3]->reflag==0){
            pcell_set.insert(pp[3]);
         }         
        else {
            pcell_set.insert(pp[3]->children[1]);
        }

        if(pp[4]->reflag==0){
            pcell_set.insert(pp[4]);
         }         
        else {
            pcell_set.insert(pp[4]->children[2]);
            pcell_set.insert(pp[4]->children[1]);
        }
                                
        if(pp[5]->reflag==0){
            pcell_set.insert(pp[5]);
         }         
        else {
            pcell_set.insert(pp[5]->children[2]);
        }
        
        if(pp[6]->reflag==0){
            pcell_set.insert(pp[6]);
         }         
        else {
            pcell_set.insert(pp[6]->children[3]);
            pcell_set.insert(pp[6]->children[2]);
        }
        
        if(pp[7]->reflag==0){
            pcell_set.insert(pp[7]);
         }         
        else {
            pcell_set.insert(pp[7]->children[3]);
        }        
        
         
        pcellv.clear(); 
        if(itmap->second.iPoint[0]==0) 
         {
             x0[0]=pcell0->xc1-0.5*pcell0->dx;
             x0[1]=pcell0->yc1-0.5*pcell0->dy;  
                                   
             idflg=0;  //ȡ���Ѿ����ǵĵ���Ӧ�������еĵ�����  
             cnl=0;//��ʾ���������м���cell���˵�,һ��4��������Ӧ��ϸ���洦Ϊ2
             for(set<OctCell*>::iterator iter=pcell_set.begin(); iter!=pcell_set.end(); ++iter){
                  pcell1=*iter;
                  for(short i1=0;i1<4; ++i1){
 	              switch(i1) {	
	                  case 0: ii=-1;jj=-1;break;
	                  case 1: ii=1;jj=-1;break;
	                  case 2: ii=1;jj=1;break;
	                  case 3: ii=-1;jj=1;break;	
	                }            
	           x1[0]=pcell1->xc1+ii*pcell1->dx/2.0;				
	           x1[1]=pcell1->yc1+jj*pcell1->dy/2.0;	
	                
	           if(fabs(x1-x0)<ERRS){
	              ++cnl;
                     itmb=cellPoints.find(pcell1);                   
                     if(itmb!=cellPoints.end()){
                          pcellv.insert(make_pair(pcell1,i1));
                       }
                    }
                  }
                if(cnl==4) break;
             }
             
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
               if(cellPoints[itm1->first].iPoint[itm1->second]!=0)
                    idflg=cellPoints[itm1->first].iPoint[itm1->second];
             }
            
            if(idflg==0){
               cnt++;
               id1=cnt;
               pic1.pt=x0;  
               points4out.push_back(pic1);        
             }
            else{
               id1=idflg;
             }
             
           itmap->second.iPoint[0]=id1;
           
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
                    cellPoints[itm1->first].iPoint[itm1->second]=id1;
             }           
        } 
 //==          
        pcellv.clear(); 
        if(itmap->second.iPoint[1]==0) 
         {
             x0[0]=pcell0->xc1+0.5*pcell0->dx;
             x0[1]=pcell0->yc1-0.5*pcell0->dy;  
                                   
             idflg=0;  //ȡ���Ѿ����ǵĵ���Ӧ�������еĵ�����  
             cnl=0;//��ʾ���������м���cell���˵�,һ��4��������Ӧ��ϸ���洦Ϊ3
             for(set<OctCell*>::iterator iter=pcell_set.begin(); iter!=pcell_set.end(); ++iter){
                  pcell1=*iter;
                  for(short i1=0;i1<4; ++i1){
 	              switch(i1) {	
	                  case 0: ii=-1;jj=-1;break;
	                  case 1: ii=1;jj=-1;break;
	                  case 2: ii=1;jj=1;break;
	                  case 3: ii=-1;jj=1;break;	
	                }            
	           x1[0]=pcell1->xc1+ii*pcell1->dx/2.0;				
	           x1[1]=pcell1->yc1+jj*pcell1->dy/2.0;	
	                
	           if(fabs(x1-x0)<ERRS){
	              ++cnl;
                     itmb=cellPoints.find(pcell1);                   
                     if(itmb!=cellPoints.end()){
                          pcellv.insert(make_pair(pcell1,i1));
                       }
                    }
                  }
                if(cnl==4) break;
             }
             
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
               if(cellPoints[itm1->first].iPoint[itm1->second]!=0)
                    idflg=cellPoints[itm1->first].iPoint[itm1->second];
             }
            
            if(idflg==0){
               cnt++;
               id1=cnt;
               pic1.pt=x0;                
                points4out.push_back(pic1);                        
             }
            else{
               id1=idflg;
             }
             
           itmap->second.iPoint[1]=id1;
           
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
                    cellPoints[itm1->first].iPoint[itm1->second]=id1;
             }           
        } 
//==
        pcellv.clear(); 
        if(itmap->second.iPoint[2]==0) 
         {
             x0[0]=pcell0->xc1+0.5*pcell0->dx;
             x0[1]=pcell0->yc1+0.5*pcell0->dy;  
                                   
             idflg=0;  //ȡ���Ѿ����ǵĵ���Ӧ�������еĵ�����  
             cnl=0;//��ʾ���������м���cell���˵�,һ��4��������Ӧ��ϸ���洦Ϊ3
             for(set<OctCell*>::iterator iter=pcell_set.begin(); iter!=pcell_set.end(); ++iter){
                  pcell1=*iter;
                  for(short i1=0;i1<4; ++i1){
 	              switch(i1) {	
	                  case 0: ii=-1;jj=-1;break;
	                  case 1: ii=1;jj=-1;break;
	                  case 2: ii=1;jj=1;break;
	                  case 3: ii=-1;jj=1;break;	
	                }            
	           x1[0]=pcell1->xc1+ii*pcell1->dx/2.0;				
	           x1[1]=pcell1->yc1+jj*pcell1->dy/2.0;	
	                
	           if(fabs(x1-x0)<ERRS){
	              ++cnl;
                     itmb=cellPoints.find(pcell1);                   
                     if(itmb!=cellPoints.end()){
                          pcellv.insert(make_pair(pcell1,i1));
                       }
                    }
                  }
                if(cnl==4) break;
             }
             
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
               if(cellPoints[itm1->first].iPoint[itm1->second]!=0)
                    idflg=cellPoints[itm1->first].iPoint[itm1->second];
             }
            
            if(idflg==0){
               cnt++;
               id1=cnt;
               pic1.pt=x0;
               points4out.push_back(pic1);                
                         
             }
            else{
               id1=idflg;
             }
             
           itmap->second.iPoint[2]=id1;
           
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
                    cellPoints[itm1->first].iPoint[itm1->second]=id1;
             }           
        }         
// 

        pcellv.clear(); 
        if(itmap->second.iPoint[3]==0) 
         {
             x0[0]=pcell0->xc1-0.5*pcell0->dx;
             x0[1]=pcell0->yc1+0.5*pcell0->dy;  
                                   
             idflg=0;  //ȡ���Ѿ����ǵĵ���Ӧ�������еĵ�����  
             cnl=0;//��ʾ���������м���cell���˵�,һ��4��������Ӧ��ϸ���洦Ϊ3
             for(set<OctCell*>::iterator iter=pcell_set.begin(); iter!=pcell_set.end(); ++iter){
                  pcell1=*iter;
                  for(short i1=0;i1<4; ++i1){
 	              switch(i1) {	
	                  case 0: ii=-1;jj=-1;break;
	                  case 1: ii=1;jj=-1;break;
	                  case 2: ii=1;jj=1;break;
	                  case 3: ii=-1;jj=1;break;	
	                }            
	           x1[0]=pcell1->xc1+ii*pcell1->dx/2.0;				
	           x1[1]=pcell1->yc1+jj*pcell1->dy/2.0;	
	                
	           if(fabs(x1-x0)<ERRS){
	              ++cnl;
                     itmb=cellPoints.find(pcell1);                   
                     if(itmb!=cellPoints.end()){
                          pcellv.insert(make_pair(pcell1,i1));
                       }
                    }
                  }
                if(cnl==4) break;
             }
             
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
               if(cellPoints[itm1->first].iPoint[itm1->second]!=0)
                    idflg=cellPoints[itm1->first].iPoint[itm1->second];
             }
            
            if(idflg==0){
               cnt++;
               id1=cnt;
               pic1.pt=x0; 
                points4out.push_back(pic1);                        
             }
            else{
               id1=idflg;
             }
             
           itmap->second.iPoint[3]=id1;
           
            for(map<OctCell*, short>::iterator itm1=pcellv.begin(); itm1!=pcellv.end(); ++itm1){
                    cellPoints[itm1->first].iPoint[itm1->second]=id1;
             }           
        }        
   }     
   
   cout<<"Total Output Points: "<<cnt<<endl; 
   bool is_here=false;
   int tnmc;
   for(map<OctCell *, cellPointIndex>::iterator itmap=cellPoints.begin(); itmap!=cellPoints.end();++itmap) {
        pcell0=itmap->first;
       for(int m=0; m<4;++m) {
         is_here=false;
         tnmc=points4out[itmap->second.iPoint[m]-1].nmc;
         for(int i1=0;i1<tnmc; ++i1) {
             if(points4out[itmap->second.iPoint[m]-1].mcell[i1]==pcell0) {
                  is_here=true;
                  break;
               }
          }
         if(!is_here) {
              points4out[itmap->second.iPoint[m]-1].mcell[tnmc]=pcell0;
              points4out[itmap->second.iPoint[m]-1].nmc+=1;
         }
      }
    }
    
  }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x168, %rsp            # imm = 0x168
leaq 0x38(%rsp), %rdi
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
callq 0xc11c
leaq 0x148(%rsp), %rdi
xorpd %xmm0, %xmm0
xorpd %xmm1, %xmm1
callq 0xc11c
leaq 0x78(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0xe8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x158(%rsp), %rdi
callq 0x4606
leaq 0x110(%rsp), %rdi
callq 0x4618
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movapd %xmm0, 0xc0(%rsp)
movapd %xmm0, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
leaq 0x22f7c(%rip), %rax     # 0x28610
movq (%rax), %rbx
leaq 0x2302a(%rip), %rdi     # 0x286c8
callq 0x686c
leaq 0x2304e(%rip), %rax     # 0x286f8
movq (%rax), %rcx
cmpq %rcx, 0x8(%rax)
je 0x56b7
movq %rcx, 0x8(%rax)
leaq 0x60(%rsp), %r15
leaq 0x58(%rsp), %r14
testq %rbx, %rbx
je 0x5701
movq 0x8(%rbx), %rax
testb $0x1, 0x1b0(%rax)
jne 0x56fb
cmpw $0x0, (%rbx)
jne 0x56fb
movq %rax, 0x58(%rsp)
movupd 0x158(%rsp), %xmm0
movupd %xmm0, (%r15)
leaq 0x22fd5(%rip), %rdi     # 0x286c8
movq %r14, %rsi
callq 0x689a
movq 0x10(%rbx), %rbx
jmp 0x56c1
movq 0x1d8b8(%rip), %rdi     # 0x22fc0
leaq 0x15ac9(%rip), %rsi     # 0x1b1d8
callq 0x31d0
leaq 0x22fad(%rip), %rcx     # 0x286c8
movq 0x28(%rcx), %rsi
movq %rax, %rdi
callq 0x3140
movq %rax, %rdi
callq 0x30d0
leaq 0x22f92(%rip), %rax     # 0x286c8
movq 0x18(%rax), %rbx
movl $0x0, 0x24(%rsp)
addq $0x8, %rax
movq %rax, 0x50(%rsp)
pushq $0x1
popq %r12
leaq 0x148(%rsp), %r15
cmpq 0x50(%rsp), %rbx
je 0x6667
movq 0x20(%rbx), %rdi
movq %rdi, 0x30(%rsp)
callq 0x858f
movq %rax, 0xa0(%rsp)
movq %rax, %rdi
callq 0x8488
movq %rax, 0xa8(%rsp)
movq 0x30(%rsp), %rdi
callq 0x8488
movq %rax, 0xb0(%rsp)
movq %rax, %rdi
callq 0x850c
movq %rax, 0xb8(%rsp)
movq 0x30(%rsp), %rdi
callq 0x850c
movq %rax, 0xc0(%rsp)
movq %rax, %rdi
callq 0x8610
movq %rax, 0xc8(%rsp)
movq 0x30(%rsp), %rdi
callq 0x8610
movq %rax, 0xd0(%rsp)
movq %rax, %rdi
callq 0x858f
movq %rax, 0xd8(%rsp)
leaq 0xe0(%rsp), %r13
movq %r13, %rdi
callq 0x6a28
movq 0xa0(%rsp), %rax
cmpw $0x0, 0x1fc(%rax)
leaq 0xa0(%rsp), %rsi
je 0x5841
addq $0x270, %rax            # imm = 0x270
movq %r13, %rdi
movq %rax, %rsi
callq 0x6a56
movq 0xa0(%rsp), %rsi
movl $0x258, %eax            # imm = 0x258
addq %rax, %rsi
leaq 0xe0(%rsp), %r13
movq %r13, %rdi
callq 0x6a56
movq 0xa8(%rsp), %rax
leaq 0x258(%rax), %rsi
cmpw $0x0, 0x1fc(%rax)
leaq 0xa8(%rsp), %rax
cmoveq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
movq 0xb0(%rsp), %rax
cmpw $0x0, 0x1fc(%rax)
leaq 0xb0(%rsp), %rsi
je 0x58b9
addq $0x260, %rax            # imm = 0x260
leaq 0xe0(%rsp), %rdi
movq %rax, %rsi
callq 0x6a56
movq 0xb0(%rsp), %rsi
movl $0x258, %eax            # imm = 0x258
addq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
movq 0xb8(%rsp), %rax
leaq 0x260(%rax), %rsi
cmpw $0x0, 0x1fc(%rax)
leaq 0xb8(%rsp), %rax
cmoveq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
movq 0xc0(%rsp), %rax
cmpw $0x0, 0x1fc(%rax)
leaq 0xc0(%rsp), %rsi
je 0x5936
addq $0x268, %rax            # imm = 0x268
leaq 0xe0(%rsp), %rdi
movq %rax, %rsi
callq 0x6a56
movq 0xc0(%rsp), %rsi
movl $0x260, %eax            # imm = 0x260
addq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
movq 0xc8(%rsp), %rax
leaq 0x268(%rax), %rsi
cmpw $0x0, 0x1fc(%rax)
leaq 0xc8(%rsp), %rax
cmoveq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
movq 0xd0(%rsp), %rax
cmpw $0x0, 0x1fc(%rax)
leaq 0xd0(%rsp), %rsi
je 0x59b3
addq $0x270, %rax            # imm = 0x270
leaq 0xe0(%rsp), %rdi
movq %rax, %rsi
callq 0x6a56
movq 0xd0(%rsp), %rsi
movl $0x268, %eax            # imm = 0x268
addq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
movq 0xd8(%rsp), %rax
leaq 0x270(%rax), %rsi
cmpw $0x0, 0x1fc(%rax)
leaq 0xd8(%rsp), %rax
cmoveq %rax, %rsi
leaq 0xe0(%rsp), %rdi
callq 0x6a56
leaq 0x70(%rsp), %rdi
callq 0x6bb0
cmpl $0x0, 0x28(%rbx)
movq %rbx, 0x28(%rsp)
jne 0x5d0c
movq 0x30(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
xorl %esi, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x1572c(%rip), %xmm0    # 0x1b170
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x30(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
movl %r12d, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x156e6(%rip), %xmm0    # 0x1b170
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
xorl %ebx, %ebx
movq 0xf8(%rsp), %rcx
leaq 0xe8(%rsp), %rax
cmpq %rax, %rcx
je 0x5c24
movq %rcx, 0x48(%rsp)
movq 0x20(%rcx), %rax
movq %rax, 0x18(%rsp)
xorl %r13d, %r13d
cmpw $0x4, %r13w
ja 0x5b05
movzwl %r13w, %eax
leaq 0x156b6(%rip), %rcx     # 0x1b188
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movw $0xffff, %r14w          # imm = 0xFFFF
movw $0xffff, %bp            # imm = 0xFFFF
jmp 0x5b05
movw $0x1, %r14w
movw $0x1, %bp
jmp 0x5b05
movw $0xffff, %bp            # imm = 0xFFFF
movw $0x1, %r14w
jmp 0x5b05
movw $0x1, %bp
movw $0xffff, %r14w          # imm = 0xFFFF
movq 0x18(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0xc3aa
movswl %bp, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x1562f(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq 0x18(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
movl %r12d, %esi
callq 0xc3aa
movswl %r14w, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x155db(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq %r15, %rdi
leaq 0x38(%rsp), %rsi
callq 0xc344
callq 0xc13d
movsd 0x155bb(%rip), %xmm1    # 0x1b180
ucomisd %xmm0, %xmm1
jbe 0x5c04
leaq 0x22af6(%rip), %rdi     # 0x286c8
leaq 0x18(%rsp), %rsi
callq 0x6bde
incl %ebx
cmpq 0x50(%rsp), %rax
je 0x5c04
movq 0x18(%rsp), %rax
movq %rax, 0x58(%rsp)
movw %r13w, 0x60(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x6c34
incl %r13d
jmp 0x5ac0
cmpw $0x4, %bx
je 0x5c24
movq 0x48(%rsp), %rdi
callq 0x3220
movq %rax, %rcx
jmp 0x5a9e
xorl %r13d, %r13d
movq 0x88(%rsp), %r12
leaq 0x78(%rsp), %rax
cmpq %rax, %r12
je 0x5c7f
leaq 0x20(%r12), %rbx
leaq 0x22a83(%rip), %rdi     # 0x286c8
movq %rbx, %rsi
callq 0x678e
movswq 0x28(%r12), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x5c72
leaq 0x22a68(%rip), %rdi     # 0x286c8
movq %rbx, %rsi
callq 0x678e
movswq 0x28(%r12), %rcx
movl (%rax,%rcx,4), %r13d
movq %r12, %rdi
callq 0x3150
movq %rax, %r12
jmp 0x5c2f
testl %r13d, %r13d
je 0x5c92
movl %r13d, %eax
movq 0x28(%rsp), %rbx
pushq $0x1
popq %r12
jmp 0x5ccb
leaq 0x110(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xc1a2
movq 0x28(%rsp), %rbx
pushq $0x1
popq %r12
leaq 0x22a44(%rip), %rdi     # 0x286f8
leaq 0x110(%rsp), %rsi
callq 0x67de
movl 0x24(%rsp), %eax
incl %eax
movl %eax, 0x24(%rsp)
movl %eax, 0x28(%rbx)
movq 0x88(%rsp), %r13
movl %eax, %ebx
leaq 0x78(%rsp), %rax
cmpq %rax, %r13
je 0x5d07
leaq 0x20(%r13), %rsi
leaq 0x229db(%rip), %rdi     # 0x286c8
callq 0x678e
movswq 0x28(%r13), %rcx
movl %ebx, (%rax,%rcx,4)
movq %r13, %rdi
callq 0x3150
movq %rax, %r13
jmp 0x5cd8
movq 0x28(%rsp), %rbx
leaq 0x70(%rsp), %rdi
callq 0x6bb0
cmpl $0x0, 0x2c(%rbx)
jne 0x6025
movq 0x30(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
xorl %esi, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x1541d(%rip), %xmm0    # 0x1b178
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x30(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
movl %r12d, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x153cf(%rip), %xmm0    # 0x1b170
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
xorl %ebx, %ebx
movq 0xf8(%rsp), %rcx
leaq 0xe8(%rsp), %rax
cmpq %rax, %rcx
je 0x5f3b
movq %rcx, 0x48(%rsp)
movq 0x20(%rcx), %rax
movq %rax, 0x18(%rsp)
xorl %r13d, %r13d
cmpw $0x4, %r13w
ja 0x5e1c
movzwl %r13w, %eax
leaq 0x153b3(%rip), %rcx     # 0x1b19c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movw $0xffff, %r14w          # imm = 0xFFFF
movw $0xffff, %bp            # imm = 0xFFFF
jmp 0x5e1c
movw $0x1, %r14w
movw $0x1, %bp
jmp 0x5e1c
movw $0xffff, %bp            # imm = 0xFFFF
movw $0x1, %r14w
jmp 0x5e1c
movw $0x1, %bp
movw $0xffff, %r14w          # imm = 0xFFFF
movq 0x18(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0xc3aa
movswl %bp, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x15318(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq 0x18(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
movl %r12d, %esi
callq 0xc3aa
movswl %r14w, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x152c4(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq %r15, %rdi
leaq 0x38(%rsp), %rsi
callq 0xc344
callq 0xc13d
movsd 0x152a4(%rip), %xmm1    # 0x1b180
ucomisd %xmm0, %xmm1
jbe 0x5f1b
leaq 0x227df(%rip), %rdi     # 0x286c8
leaq 0x18(%rsp), %rsi
callq 0x6bde
incl %ebx
cmpq 0x50(%rsp), %rax
je 0x5f1b
movq 0x18(%rsp), %rax
movq %rax, 0x58(%rsp)
movw %r13w, 0x60(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x6c34
incl %r13d
jmp 0x5dd7
cmpw $0x4, %bx
je 0x5f3b
movq 0x48(%rsp), %rdi
callq 0x3220
movq %rax, %rcx
jmp 0x5db5
xorl %r13d, %r13d
movq 0x88(%rsp), %rbx
leaq 0x78(%rsp), %rax
cmpq %rax, %rbx
je 0x5fa0
movl %r13d, 0x8(%rsp)
leaq 0x20(%rbx), %r13
leaq 0x22768(%rip), %rdi     # 0x286c8
movq %r13, %rsi
callq 0x678e
movswq 0x28(%rbx), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x5f8e
leaq 0x2274e(%rip), %rdi     # 0x286c8
movq %r13, %rsi
callq 0x678e
movswq 0x28(%rbx), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x8(%rsp)
movq %rbx, %rdi
callq 0x3150
movq %rax, %rbx
movl 0x8(%rsp), %r13d
jmp 0x5f46
testl %r13d, %r13d
je 0x5faf
movl %r13d, %eax
movq 0x28(%rsp), %rbx
jmp 0x5fe4
leaq 0x110(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xc1a2
movq 0x28(%rsp), %rbx
leaq 0x2272b(%rip), %rdi     # 0x286f8
leaq 0x110(%rsp), %rsi
callq 0x67de
movl 0x24(%rsp), %eax
incl %eax
movl %eax, 0x24(%rsp)
movl %eax, 0x2c(%rbx)
movq 0x88(%rsp), %r13
movl %eax, %ebx
leaq 0x78(%rsp), %rax
cmpq %rax, %r13
je 0x6020
leaq 0x20(%r13), %rsi
leaq 0x226c2(%rip), %rdi     # 0x286c8
callq 0x678e
movswq 0x28(%r13), %rcx
movl %ebx, (%rax,%rcx,4)
movq %r13, %rdi
callq 0x3150
movq %rax, %r13
jmp 0x5ff1
movq 0x28(%rsp), %rbx
leaq 0x70(%rsp), %rdi
callq 0x6bb0
cmpl $0x0, 0x30(%rbx)
jne 0x633e
movq 0x30(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
xorl %esi, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x15104(%rip), %xmm0    # 0x1b178
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x30(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
movl %r12d, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x150be(%rip), %xmm0    # 0x1b178
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
xorl %ebx, %ebx
movq 0xf8(%rsp), %rcx
leaq 0xe8(%rsp), %rax
cmpq %rax, %rcx
je 0x6254
movq %rcx, 0x48(%rsp)
movq 0x20(%rcx), %rax
movq %rax, 0x18(%rsp)
xorl %r13d, %r13d
cmpw $0x4, %r13w
ja 0x6135
movzwl %r13w, %eax
leaq 0x150ae(%rip), %rcx     # 0x1b1b0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movw $0xffff, %r14w          # imm = 0xFFFF
movw $0xffff, %bp            # imm = 0xFFFF
jmp 0x6135
movw $0x1, %r14w
movw $0x1, %bp
jmp 0x6135
movw $0xffff, %bp            # imm = 0xFFFF
movw $0x1, %r14w
jmp 0x6135
movw $0x1, %bp
movw $0xffff, %r14w          # imm = 0xFFFF
movq 0x18(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0xc3aa
movswl %bp, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x14fff(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq 0x18(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
movl %r12d, %esi
callq 0xc3aa
movswl %r14w, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x14fab(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq %r15, %rdi
leaq 0x38(%rsp), %rsi
callq 0xc344
callq 0xc13d
movsd 0x14f8b(%rip), %xmm1    # 0x1b180
ucomisd %xmm0, %xmm1
jbe 0x6234
leaq 0x224c6(%rip), %rdi     # 0x286c8
leaq 0x18(%rsp), %rsi
callq 0x6bde
incl %ebx
cmpq 0x50(%rsp), %rax
je 0x6234
movq 0x18(%rsp), %rax
movq %rax, 0x58(%rsp)
movw %r13w, 0x60(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x6c34
incl %r13d
jmp 0x60f0
cmpw $0x4, %bx
je 0x6254
movq 0x48(%rsp), %rdi
callq 0x3220
movq %rax, %rcx
jmp 0x60ce
xorl %r13d, %r13d
movq 0x88(%rsp), %rbx
leaq 0x78(%rsp), %rax
cmpq %rax, %rbx
je 0x62b9
movl %r13d, 0x8(%rsp)
leaq 0x20(%rbx), %r13
leaq 0x2244f(%rip), %rdi     # 0x286c8
movq %r13, %rsi
callq 0x678e
movswq 0x28(%rbx), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x62a7
leaq 0x22435(%rip), %rdi     # 0x286c8
movq %r13, %rsi
callq 0x678e
movswq 0x28(%rbx), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x8(%rsp)
movq %rbx, %rdi
callq 0x3150
movq %rax, %rbx
movl 0x8(%rsp), %r13d
jmp 0x625f
testl %r13d, %r13d
je 0x62c8
movl %r13d, %eax
movq 0x28(%rsp), %rbx
jmp 0x62fd
leaq 0x110(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xc1a2
movq 0x28(%rsp), %rbx
leaq 0x22412(%rip), %rdi     # 0x286f8
leaq 0x110(%rsp), %rsi
callq 0x67de
movl 0x24(%rsp), %eax
incl %eax
movl %eax, 0x24(%rsp)
movl %eax, 0x30(%rbx)
movq 0x88(%rsp), %r13
movl %eax, %ebx
leaq 0x78(%rsp), %rax
cmpq %rax, %r13
je 0x6339
leaq 0x20(%r13), %rsi
leaq 0x223a9(%rip), %rdi     # 0x286c8
callq 0x678e
movswq 0x28(%r13), %rcx
movl %ebx, (%rax,%rcx,4)
movq %r13, %rdi
callq 0x3150
movq %rax, %r13
jmp 0x630a
movq 0x28(%rsp), %rbx
leaq 0x70(%rsp), %rdi
callq 0x6bb0
cmpl $0x0, 0x34(%rbx)
jne 0x6657
movq 0x30(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
xorl %esi, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x14de3(%rip), %xmm0    # 0x1b170
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x30(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
leaq 0x38(%rsp), %rdi
movl %r12d, %esi
callq 0xc3aa
movsd 0x10(%rsp), %xmm0
mulsd 0x14da5(%rip), %xmm0    # 0x1b178
addsd 0x8(%rsp), %xmm0
movsd %xmm0, (%rax)
xorl %ebx, %ebx
movq 0xf8(%rsp), %rcx
leaq 0xe8(%rsp), %rax
cmpq %rax, %rcx
je 0x656d
movq %rcx, 0x48(%rsp)
movq 0x20(%rcx), %rax
movq %rax, 0x18(%rsp)
xorl %r13d, %r13d
cmpw $0x4, %r13w
ja 0x644e
movzwl %r13w, %eax
leaq 0x14da9(%rip), %rcx     # 0x1b1c4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movw $0xffff, %r14w          # imm = 0xFFFF
movw $0xffff, %bp            # imm = 0xFFFF
jmp 0x644e
movw $0x1, %r14w
movw $0x1, %bp
jmp 0x644e
movw $0xffff, %bp            # imm = 0xFFFF
movw $0x1, %r14w
jmp 0x644e
movw $0x1, %bp
movw $0xffff, %r14w          # imm = 0xFFFF
movq 0x18(%rsp), %rax
movsd 0x278(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x288(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
xorl %esi, %esi
callq 0xc3aa
movswl %bp, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x14ce6(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq 0x18(%rsp), %rax
movsd 0x280(%rax), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x290(%rax), %xmm0
movsd %xmm0, 0x10(%rsp)
movq %r15, %rdi
movl %r12d, %esi
callq 0xc3aa
movswl %r14w, %ecx
cvtsi2sd %ecx, %xmm0
movsd 0x10(%rsp), %xmm1
mulsd %xmm0, %xmm1
mulsd 0x14c92(%rip), %xmm1    # 0x1b178
movsd 0x8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq %r15, %rdi
leaq 0x38(%rsp), %rsi
callq 0xc344
callq 0xc13d
movsd 0x14c72(%rip), %xmm1    # 0x1b180
ucomisd %xmm0, %xmm1
jbe 0x654d
leaq 0x221ad(%rip), %rdi     # 0x286c8
leaq 0x18(%rsp), %rsi
callq 0x6bde
incl %ebx
cmpq 0x50(%rsp), %rax
je 0x654d
movq 0x18(%rsp), %rax
movq %rax, 0x58(%rsp)
movw %r13w, 0x60(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x58(%rsp), %rsi
callq 0x6c34
incl %r13d
jmp 0x6409
cmpw $0x4, %bx
je 0x656d
movq 0x48(%rsp), %rdi
callq 0x3220
movq %rax, %rcx
jmp 0x63e7
xorl %r13d, %r13d
movq 0x88(%rsp), %rbx
leaq 0x78(%rsp), %rax
cmpq %rax, %rbx
je 0x65d2
movl %r13d, 0x8(%rsp)
leaq 0x20(%rbx), %r13
leaq 0x22136(%rip), %rdi     # 0x286c8
movq %r13, %rsi
callq 0x678e
movswq 0x28(%rbx), %rcx
cmpl $0x0, (%rax,%rcx,4)
je 0x65c0
leaq 0x2211c(%rip), %rdi     # 0x286c8
movq %r13, %rsi
callq 0x678e
movswq 0x28(%rbx), %rcx
movl (%rax,%rcx,4), %eax
movl %eax, 0x8(%rsp)
movq %rbx, %rdi
callq 0x3150
movq %rax, %rbx
movl 0x8(%rsp), %r13d
jmp 0x6578
testl %r13d, %r13d
je 0x65e1
movl %r13d, %eax
movq 0x28(%rsp), %rbx
jmp 0x6616
leaq 0x110(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0xc1a2
movq 0x28(%rsp), %rbx
leaq 0x220f9(%rip), %rdi     # 0x286f8
leaq 0x110(%rsp), %rsi
callq 0x67de
movl 0x24(%rsp), %eax
incl %eax
movl %eax, 0x24(%rsp)
movl %eax, 0x34(%rbx)
movq 0x88(%rsp), %r13
movl %eax, %ebx
leaq 0x78(%rsp), %rax
cmpq %rax, %r13
je 0x6652
leaq 0x20(%r13), %rsi
leaq 0x22090(%rip), %rdi     # 0x286c8
callq 0x678e
movswq 0x28(%r13), %rcx
movl %ebx, (%rax,%rcx,4)
movq %r13, %rdi
callq 0x3150
movq %rax, %r13
jmp 0x6623
movq 0x28(%rsp), %rbx
movq %rbx, %rdi
callq 0x3150
movq %rax, %rbx
jmp 0x5757
movq 0x1c952(%rip), %rdi     # 0x22fc0
leaq 0x14b78(%rip), %rsi     # 0x1b1ed
callq 0x31d0
movq %rax, %rdi
movl 0x24(%rsp), %esi
callq 0x3330
movq %rax, %rdi
callq 0x30d0
leaq 0x22033(%rip), %rax     # 0x286c8
movq 0x18(%rax), %rax
leaq 0x22058(%rip), %rbx     # 0x286f8
cmpq 0x50(%rsp), %rax
je 0x6710
movq 0x20(%rax), %rcx
xorl %edx, %edx
cmpq $0x4, %rdx
je 0x6706
movslq 0x28(%rax,%rdx,4), %rsi
decq %rsi
movq (%rbx), %rdi
imulq $0x38, %rsi, %rsi
movswq 0x30(%rdi,%rsi), %r8
addq %rsi, %rdi
testw %r8w, %r8w
movl $0x0, %r9d
cmovgl %r8d, %r9d
movslq %r9d, %r9
xorl %r10d, %r10d
cmpq %r10, %r9
je 0x66f4
leaq 0x1(%r10), %r11
cmpq %rcx, 0x10(%rdi,%r10,8)
movq %r11, %r10
jne 0x66df
jmp 0x6701
movq %rcx, 0x10(%rdi,%r8,8)
movq (%rbx), %rdi
incw 0x30(%rdi,%rsi)
incq %rdx
jmp 0x66ad
movq %rax, %rdi
callq 0x3150
jmp 0x66a0
leaq 0xe0(%rsp), %rdi
callq 0x4c62
leaq 0x70(%rsp), %rdi
callq 0x6814
addq $0x168, %rsp            # imm = 0x168
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
jmp 0x676b
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x4c62
leaq 0x70(%rsp), %rdi
callq 0x6814
movq %rbx, %rdi
callq 0x3350
nop