]> git.quilime.com - stars.git/commitdiff
long
authorGabriel Dunne <gdunne@quilime.com>
Fri, 1 Jan 2010 03:37:07 +0000 (19:37 -0800)
committerGabriel Dunne <gdunne@quilime.com>
Fri, 1 Jan 2010 03:37:07 +0000 (19:37 -0800)
intern/Global.cpp
intern/Global.h
intern/Thingy.cpp
intern/jttoolkit.cpp
media/move.txt

index 0088d85c44f61feeef36bbf911050c3ec9645076..4908bf0f4e73e7bf1a9cc90ff20cada606c5a7ce 100755 (executable)
@@ -27,22 +27,22 @@ Global::Global()
         thingies.back()->z = ((rnd[i+7] - .5) * 100000000);
     }
 
-    
-    
+
+
     movecount = 0;
-    //toggleFullScreen();
-    //hideMouse();    
-        
-      ifstream infile("media/move.txt");
-      while(  infile.good()  ) {
-          int p;
-          infile >> p;
-          move.push_back(p);
-      }    
-      
-      
-      cout << move.size() << endl;
-      
+    toggleFullScreen();
+    hideMouse();
+
+
+    ifstream infile("media/move.txt");
+    while(  infile.good()  ) {
+        int p;
+        infile >> p;
+        move.push_back(p);
+    }
+
+    cout << move.size() << endl;
+
 }
 
 
@@ -56,10 +56,9 @@ void Global::loop()
     vector<Thingy*>::iterator it;
 
     int MPOS = move[movecount];
-    
 
-    if (movecount != move.size() + 1000) {
-        movecount++;  
+    if (movecount < move.size() - 10) {
+        movecount++;
     }
     else {
         rnd.clear();
@@ -75,24 +74,20 @@ void Global::loop()
             (*it)->z = ((rnd[cnt+7] - .5) * 100000000);
             cnt++;
         }
-        movecount = 0;            
+        movecount = 0;
     }
 
-  
+
+
+//    int MPOS = mouseX();
+//    capture.push_back(mouseX());
+
+
     for(int i=0; i<thingies.size(); i++)
     {
         thingies[i]->x = rnd[i] * width();
         thingies[i]->y = rnd[i+3] * height();
-
-        // position
-        
-        float ddd = .01;
-        if (movecount > 3000) {
-            ddd = .005;
-        }
-        
-        thingies[i]->z += (( MPOS - (width() / 2)) * ddd);
-
+        thingies[i]->z += (( MPOS - (800 / 2)) * .01);
         thingies[i]->step();
         thingies[i]->draw();
     }
@@ -110,10 +105,6 @@ void Global::loop()
         (*it)->glVertex();
     }
     glEnd();
-    
-    
-    //cout << mouseX() << ",\n";
-    
 }
 
 
@@ -128,7 +119,16 @@ void Global::keyDown(int k, int special)
 
 void Global::mouseDown()
 {
-/*    
+    int c = 0;
+    cout << "++++++++" << endl;
+    for(int i = 0; i < capture.size(); i++)
+    {
+        cout << capture[i] << endl;
+    }
+//        cout << capture.size() << endl;
+
+
+/*
     rnd.clear();
     for(int i=0;i<1000;i++){
         rnd.push_back(randomFloat());
@@ -142,7 +142,7 @@ void Global::mouseDown()
         (*it)->z = ((rnd[cnt+7] - .5) * 100000000);
         cnt++;
     }
-  */  
+  */
 
 }
 
index e052019f4573c127f4ff87cbcc318b8eec963495..5d572de2bb366786ee704ab74a2973f4a31713b7 100755 (executable)
@@ -29,6 +29,8 @@ class Global{
   int movecount;
   vector<int> move;
   
+  vector<int> capture;
+  
   void loop();
   void keyDown(int k,int special);
   void mouseDown();
index a5f3e45439da4c4ed029ae65f744041fcaa04082..3c3f7d8acd822cb42dc81b78322817a810f01ea8 100644 (file)
@@ -54,11 +54,11 @@ void Thingy::step(){
   
   // (*this)+=JPoint( randomFloat()-0.5, randomFloat()-0.5, randomFloat()-0.5);
   
-  size += (destSize - size) * 0.005;
+  size += (destSize - size) * 0.0002;
   
-  float xx = (dest.x-x) * .0045;
-  float yy = (dest.y-y) * .0045;
-  float zz = (dest.z-z) * .0045;
+  float xx = (dest.x-x) * .0045 / 3.5;
+  float yy = (dest.y-y) * .0045 / 3.5;
+  float zz = (dest.z-z) * .0045 / 3.5;
   
   x += xx;
   y += yy;
index 42497b532a1890029de4f561742e3b991abd7fab..047c6019388e02cb3bf5fdfb77d2538ad07238c2 100755 (executable)
@@ -1 +1 @@
-#include "jttoolkit.h"\r#include <stdio.h>\r#include <stdlib.h>\r#include <string.h>\r#include <iostream.h> \r#include <fstream.h>\r\r\r#define INIT_WINDOW_X 0\r#define INIT_WINDOW_Y 0\r#define INIT_WINDOW_WIDTH 1024\r#define INIT_WINDOW_HEIGHT 768\r\r\r//#include "gl2ps.h"\r#if defined (__DARWIN__)\r#include <ApplicationServices/ApplicationServices.h>\r#endif\r\r#define use_perspective\r#define VERBOSE 0\r//turn this on and off for speed\r\r\r//---- user-global access functions\r\rint ticks(){return _ticks;}\rint width(){return _width;}\rint height(){return _height;}\r\rint mouseX(){return _mouseX;}\rint mouseY(){return _mouseY;}\r\r\rvoid setMouseX(long xx){_mouseX = xx;}\rvoid setMouseY(long yy){_mouseY = yy;}\r\rvoid ignoreMouse(int state){_ignoreMouse = state;}\r\r//--------------\r\rvoid *threadFunc(void*stuff){\r}\r\r//------------------------------------------------------------------------\rvoid initfmod(){\r  /*  \r  if (FSOUND_GetVersion() < FMOD_VERSION){\r    printf("Error : You are using the wrong DLL version!  You should be using FMOD %.02f\n", FMOD_VERSION);\r    exit(1);\r  }\r  \r  if(!FSOUND_Init(48000, 1024, FSOUND_INIT_GLOBALFOCUS)){\r    printf("%s\n",FMOD_ErrorString(FSOUND_GetError()));\r  }\r  */\r}\r//------------------------------------------------------------------------\r\r\r\rfloat friction(){return _friction;}\rvoid setFriction(float f){_friction = f;}\r\rfloat frequencyRange(){return _frequencyRange;}\rvoid setFrequencyRange(float f){_frequencyRange = f;}\r\rvoid drawUnitSquare(){\r  glBegin(GL_QUADS);\r  glTexCoord2f(0,0);glVertex2f(0,0);        \r  glTexCoord2f(1,0);glVertex2f(1,0);\r  glTexCoord2f(1,1);glVertex2f(1,1);\r  glTexCoord2f(0,1);glVertex2f(0,1);\r  glEnd();\r}\r\r\rvoid  drawUnitSquareSlightlySmaller(){\r  glBegin(GL_QUADS);\r  glTexCoord2f(0.01,0.01);glVertex2f(0,0);   \r  glTexCoord2f(0.99,0.01);glVertex2f(1,0);\r  glTexCoord2f(0.99,0.99);glVertex2f(1,1);\r  glTexCoord2f(0.01,0.99);glVertex2f(0,1);\r  glEnd();\r}\r\r\r\r\rvoid toggleFullScreen(){\r  fullscreenmode=!fullscreenmode;\r  if(fullscreenmode){\r    glutFullScreen();\r  } else {\r    glutReshapeWindow(INIT_WINDOW_WIDTH,INIT_WINDOW_HEIGHT);\r    glutPositionWindow(0,10);\r  }\r}\r\rchar* trimLeft(char*buff){\r  //count how many to offset backward\r  int whiteCount = 0;\r  for(int i=0;i<strlen(buff);i++){\r    if(buff[i]==' '||buff[i]=='\r'||buff[i]=='\n'||buff[i]=='\t'){\r      whiteCount++;\r    }else{\r      break;\r    }\r  }\r  if(whiteCount>0){\r    for(int b=0;b<strlen(buff)-whiteCount;b++){\r      buff[b] = buff[b+whiteCount];\r    }\r  }\r  return buff;\r}\r\rvoid fileFromString(unsigned char *fname, char *data, long datasize){\r    long i=0;\r      FILE *fp = fopen((const char*)fname,"wb");\r     for(i=0;i<datasize;i++){\r               fputc(data[i],fp);\r     }\r      fclose(fp);\r}\r\r\r//--------------------------------------------------------------------\r\r\runsigned char* stringFromFile(char *fname){\r   long fsize;\r    unsigned char *a;\r\r     if(fname==NULL){\r         if(VERBOSE)printf("err: stringFromFile: filename was null\n",NULL);\r    return 0;\r    }\r      fsize = getFileSize(fname);\r\r   if(fsize==0){\r    if(VERBOSE)printf("err: stringFromFile: file size was zero\n",NULL);\r   return 0;\r    }\r      a = new unsigned char[fsize+1];\r        \r       if(a==NULL){\r     if(VERBOSE)printf("err: stringFromFile: memory allocation failed\n",NULL);\r     return 0;\r    }\r      \r       getFile((char*)fname,a,fsize);\r a[fsize]=0;\r    return a;\r}\r\r\r//--------------------------------------------------------------------\r\rlong getFileSize( char *fname){\r  FILE *fp;\r      long fsize;\r    if (fname == NULL){\r            if(VERBOSE)printf("err: getFileSize: filename was null\n",NULL);\r               return 0;\r      }\r      fp = fopen((const char*)fname, "rb");\r  if (fp == NULL){\r               if(VERBOSE)printf("err: getFileSize: file stream failed\n",NULL);\r              return 0;\r      }\r      if(fseek(fp, 0, SEEK_END)!=0){\r                 if(VERBOSE)printf("err: getFileSize: fseek failed\n",NULL);\r    }\r      fsize = ftell(fp);\r     fclose(fp);\r    return fsize;\r}\r\r\r//--------------------------------------------------------------------\r\rvoid getFile( char *filename, unsigned char *buff, int length){\r      unsigned char c=0;\r     long buffcnt=0;\r        long i=0;\r      ifstream f;\r    //#if defined(__DARWIN__)\r      //      f.open(filename);\r      //#else\r        f.open((const char*)filename, ios::binary);\r    //#endif\r       f.read((char*)buff, length);\r   //for(i=0;i<length;i++){\r       //      printf("{%c}",buff[i]);\r        //}\r    f.close();\r}\r\r\r//--------------------------------------------------------------------\r\rvoid hideMouse(){\r\r#if defined(__DARWIN__)\r      //MAC\r  HideCursor();\r#elif defined(linux)\r     //LINUX\r        //ignore\r#else\r         //WINDOWS\r      ShowCursor(FALSE);\r#endif\r\r\r}\r\r//--------------------------------------------------------------------\r\rvoid showMouse(){\r#if defined(__DARWIN__)\r       //MAC\r  ShowCursor();\r#elif defined(linux)\r     //ignore\r#else\r         //WINDOWS\r      ShowCursor(TRUE);\r#endif\r}\r\rvoid display(){}\rvoid display2(){}\r\rvoid _execute_frame(){\r  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);\r  glPushMatrix();\r#if defined(use_perspective)\r  glTranslatef(-width()/2.0f,height()/2.0,-height()/2.0);\r  glScalef(1,-1,1);\r#endif \r  if(penta_firstloop){//first time!\r    penta_firstloop = false;\r    font = new JoshFont("media/usethis.ttf",40,JF_BITMAP,true,true);\r    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r    setup();\r  }else{\r    loop();\r    //glFlush();\r    //glutPostRedisplay();\r    _ticks++;\r  }\r  glPopMatrix();\r  glutSwapBuffers();\r  \r}\r\rvoid idle(){\r  /*\r  if(glutGet(GLUT_ELAPSED_TIME) - lastGlutFrameTime > frameRate){\r    _execute_frame();\r    lastGlutFrameTime = glutGet(GLUT_ELAPSED_TIME);\r  }\r  */\r}\r\r\rvoid timerFunc(int v) {\r  //if(glutGet(GLUT_ELAPSED_TIME) - lastGlutFrameTime > frameRate){\r    _execute_frame();\r    //}\r  glutTimerFunc(frameRate,timerFunc,0);\r}\r\rvoid preKeyDown(unsigned char k, int special){\r  if(special){\r    if(k==11){\r      toggleFullScreen();\r    }\r  } else {\r    //non special\r    if(k==27){\r      //exit(0);\r    }else if (k==KEY_DELETE || k==KEY_BACKSPACE){\r\r\r    } else if (k==6){//ctrl+f on a mac\r      toggleFullScreen();\r    } else {\r\r    }\r  }\r\r}\r\rvoid keyboardDown(unsigned char k,int x,int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }\r  preKeyDown(k,0);\r  jttoolkit_keyDown(k,0);\r}\r\rvoid keyboardUp(unsigned char k,int x,int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }\r  //printf("keyboardUp: %c %i\n",k);\r  jttoolkit_keyUp(k,0);\r}\r\r\rvoid specialFunc(int k,int x,int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }\r  preKeyDown(k,1);\r  jttoolkit_keyDown(k,1);\r}\r\rvoid mouseMotionFunc(int x, int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }else{\r    ignored_mouseMove(x,y);\r  }\r\r}\r\rvoid mousePassiveMotionFunc(int x, int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }else{\r    ignored_mouseMove(x,y);\r  }\r  //  printf("%i %i\n",_mouseX,_mouseY);\r}\r\rvoid mouseFunc(int button, int state, int x, int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r    \r    if(state==GLUT_DOWN){\r      jttoolkit_mouseDown();\r    } else {\r      jttoolkit_mouseUp();\r    }\r    \r  }else{\r    \r    if(state==GLUT_DOWN){\r      ignored_mouseDown(x,y);\r    } else {\r      ignored_mouseUp(x,y);\r    }\r    \r  }\r}\r\rvoid viewPerspective(float angle){\r  glMatrixMode(GL_PROJECTION);\r  glLoadIdentity();\r  gluPerspective(angle,(float)width()/(float)height(),0.0001,10000);\r  //glFrustum(-2, 2, -2, 2, 1.0f, 100.0f);\r  glMatrixMode(GL_MODELVIEW);\r}\r\r\rvoid viewOrtho(){\r  glMatrixMode(GL_PROJECTION);\r  glLoadIdentity();\r  glOrtho(0,width(),-height(),0,-10000,10000);\r  glMatrixMode(GL_MODELVIEW);\r}\r\rvoid reshape(int w,int h){\r  //  if(glutGetWindow()==MainWindowID){\r  if(1){\r    \r    _width = w;\r    _height = h;\r    //      to keep it propertional & let the window stretch\r    // glMatrixMode(GL_PROJECTION);\r    //     glLoadIdentity();\r    glViewport(0,0,w,h);\r    //       if(w<h){\r    //         float r = ((float)h/(float)w);\r    //           glOrtho(-1,1,-r,r,-2,2);\r    // }else{\r    float r = ((float)w/(float)h);\r    //                glOrtho(-r,r,-1,1,-2,2);\r    // }\r    //        this->draw();\r    \r    viewPerspective(90);\r    glLoadIdentity();\r    \r  } else { //then i can assume for now that it was the output console window.\r    \r    glViewport(0,0,w,h);\r    float r = ((float)w/(float)h);\r    \r    glMatrixMode(GL_PROJECTION);\r    glLoadIdentity();\r    \r    //#if defined(use_perspective)\r    //gluPerspective(90,(float)w/(float)h,0.0001,10000);\r    //#else\r    glOrtho(0,w,h,0,-10000,10000);\r    //#endif\r    //glFrustum(-2, 2, -2, 2, 1.0f, 100.0f);\r    \r    glMatrixMode(GL_MODELVIEW);\r    glLoadIdentity();\r  }\r  //  jt_resizeDrawBuffer();\r}\r\rvoid jt_resizeDrawBuffer(){\r  //  delete [] drawbuffer;\r  //  drawbuffer = new unsigned char[width()*height()*4];\r}\r\rint main(int argc,char** argv){\r\r\r  glutInit(&argc,argv);\r  glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGBA);\r  glutInitWindowSize (INIT_WINDOW_WIDTH,INIT_WINDOW_HEIGHT);\r  glutInitWindowPosition (INIT_WINDOW_X,INIT_WINDOW_Y);\r\r  int gameMode = 0;\r  if(argc>1){\r    for(int i=0;i<strlen(argv[1]);i++){\r      switch(argv[1][i]){\r      case 'g':\r     gameMode = true;\r      }\r    }\r  }\r\r  if(gameMode){\r    glutGameModeString("1440x900:16@60");\r    glutEnterGameMode();\r  }else{\r    glutCreateWindow (" ");\r  }\r  \r  jttoolkit_init();\r  glutMainLoop();\r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r    \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r  \r\r  //do we ever even get here?\r  //FSOUND_Close();\r  stop();\r  exit(0);\r  return 0;\r}\r\rint jttoolkit_init(){\r  glutIdleFunc(idle);\r  glutDisplayFunc(display);\r  glutReshapeFunc(reshape);\r  glutMouseFunc(mouseFunc);\r  glutMotionFunc(mouseMotionFunc);\r  glutPassiveMotionFunc(mousePassiveMotionFunc);\r  glutKeyboardFunc (keyboardDown);\r  glutKeyboardUpFunc (keyboardUp);\r  glutSpecialFunc (specialFunc);\r  glutTimerFunc(frameRate,timerFunc,0);\r  \r  // a whole bunch of switches for the openGL engine\r  glEnable(GL_TEXTURE_2D);\r  glEnable(GL_BLEND);\r  glEnable(GL_DEPTH_TEST);\r  //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR);\r  //glEnable(GL_LINE_SMOOTH);\r  //glEnable(GL_POLYGON_SMOOTH);\r  glLineWidth(1);\r  //  glDepthFunc(GL_LESS);//was GL_LEQUAL\r  glDepthFunc(GL_LEQUAL);//was GL_LEQUAL\r  glClearDepth(1.0f);\r  glDisable(GL_DITHER);\r  //glShadeModel(GL_SMOOTH);\r  glMatrixMode(GL_PROJECTION);     //       The Projection Matrix\r  glLoadIdentity();                      // The Projection Matrix\r  // Calculate The Aspect Ratio Of The Window\r  //gluPerspective(45.0f,(float)wW/(float)wH,0.1f,100.0f);\r  //gluLookAt(0,0,1,0,0,0,0,1,0);\r  glMatrixMode(GL_MODELVIEW); // The Modelview Matrix\r  glLoadIdentity();    // The Modelview Matrix\r  //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Perspective Calculations\r  //glEnable(GL_FOG);\r  //glFogf(GL_FOG_START,-100);\r  //glFogf(GL_FOG_END,-200);\r  //glFogf(GL_FOG_DENSITY,0.1);\r  //float r[] = {0.5,0.5,0.5,0.5};\r  //glFogfv(GL_FOG_COLOR,r);\r  //--------------------------------------------------------------------------------\r  glClearColor(0,0,0,0);\r  //also, if that doesn't work,  check if the users screen is 640x48, then fullscreen the game.\r  //#if defined(__DARWIN__)\r  //problem with fullscreen - it disables the glut passive motion func.\r  //#else\r  //if(fullscreenmode)glutFullScreen();\r  //#endif\r\r}\r\rint buildScreenFont(char *fontName, int size){\r  return 0;\r}\r\r\rvoid _draw_single_screenFont(int fontID, char*text){\r  \r  glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);\r  \r}\r\rvoid drawScreenFont(int fontID, char*text,int tracking){\r  int i;\r  int drawScreenFont_buffpt=0;\r  int lineCounter=0;\r  if (text == NULL)return;\r  glPushAttrib(GL_LIST_BIT);\r  glRasterPos3f(0,lineCounter,0);\r  glListBase(fontID);\r  for(i=0;i<strlen(text);i++){\r    if(text[i]=='\n'){\r      drawScreenFont_buff[drawScreenFont_buffpt]=0;\r      _draw_single_screenFont(fontID,drawScreenFont_buff);\r      lineCounter+=tracking;\r      glRasterPos3f(0,lineCounter,0);\r      drawScreenFont_buffpt=0;\r    }else{\r      drawScreenFont_buff[drawScreenFont_buffpt] = text[i];\r      drawScreenFont_buffpt++;\r    }\r  }\r  drawScreenFont_buff[drawScreenFont_buffpt]=0;\r  _draw_single_screenFont(fontID,drawScreenFont_buff);\r  glPopAttrib();\r}\r\r\rvoid killScreenFont(int fontID){\r  glDeleteLists(fontID,256);\r}\r\r\rvoid lights(){\r  glEnable(GL_LIGHT0);\r  glEnable(GL_LIGHTING);\r  glEnable(GL_COLOR_MATERIAL);\r  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r}\r\r\r\rvoid nolights(){\r  glDisable(GL_LIGHT0);\r  glDisable(GL_LIGHTING);\r  glDisable(GL_COLOR_MATERIAL);\r}\r\r\rfloat randomFloat(){\r  return ((float)rand())/((float)RAND_MAX);\r}\r\rvoid line(JPoint p1,JPoint p2){\r  glBegin(GL_LINES);\r  p1.glVertex();\r  p2.glVertex();\r  glEnd();\r}\r\rvoid bezier(JPoint p1,JPoint p2,JPoint p3,JPoint p4,int steps){\r  float *Xs = new float[steps];\r  float *Ys = new float[steps];\r  float *Zs = new float[steps];\r\r\r  interpolateBezier(\r               p1.x,p1.y,p1.z,\r                p2.x,p2.y,p2.z,\r                p3.x,p3.y,p3.z,\r                p4.x,p4.y,p4.z,\r                 steps,Xs,Ys,Zs) ;\r    \r  glBegin(GL_LINE_STRIP);\r  p1.glVertex();\r  for(int i=1;i<steps-1;i++){\r    glVertex3f(Xs[i],Ys[i],Zs[i]);\r  }\r  p4.glVertex();\r  glEnd();\r  \r  delete Xs;\r  delete Ys;\r  delete Zs;\r\r}\r\r\rvoid interpolateBezier(\r                float P0X,float P0Y,float P0Z,\r                 float P1X,float P1Y,float P1Z,\r                 float P2X,float P2Y,float P2Z,\r                 float P3X,float P3Y,float P3Z,\r                 int segs,\r                      float Xs[] , float Ys[] , float Zs[]) {\r  \r  float t=0.0f,dt=1.0f/(float)segs;           // calculating increment\r  float Q0X,Q0Y,Q0Z;\r  float Q1X,Q1Y,Q1Z;\r  float Q2X,Q2Y,Q2Z;\r  float R0X,R0Y,R0Z;\r  float R1X,R1Y,R1Z;\r  float x;float y;float z;\r  float xx=P0X;float yy=P0Y;float zz=P0Z;\r  for (int i=1;i<segs;i++) {\r    Q0X = P0X + t*(P1X-P0X); Q0Y = P0Y + t*(P1Y-P0Y); Q0Z = P0Z + t*(P1Z-P0Z);\r    Q1X = P1X + t*(P2X-P1X); Q1Y = P1Y + t*(P2Y-P1Y); Q1Z = P1Z + t*(P2Z-P1Z);\r    Q2X = P2X + t*(P3X-P2X); Q2Y = P2Y + t*(P3Y-P2Y); Q2Z = P2Z + t*(P3Z-P2Z);\r    R0X = Q0X + t*(Q1X-Q0X); R0Y = Q0Y + t*(Q1Y-Q0Y); R0Z = Q0Z + t*(Q1Z-Q0Z);\r    R1X = Q1X + t*(Q2X-Q1X); R1Y = Q1Y + t*(Q2Y-Q1Y); R1Z = Q1Z + t*(Q2Z-Q1Z);\r    x = R0X + t*(R1X-R0X);\r    y = R0Y + t*(R1Y-R0Y);\r    z = R0Z + t*(R1Z-R0Z);\r    //drawLine(xx,yy,zz,x,y,z);\r    Xs[i-1]=x;\r    Ys[i-1]=y;\r    Zs[i-1]=z;\r    xx=x;\r    yy=y;\r    zz=z;\r    t+=dt;\r  }\r}\r\r\rfloat absf(float a){\r  if(a<0)return -a;\r  return a;\r}\r\r\rfloat getDist(float x1,float y1,float x2,float y2){\r     double x = absf(x1-x2);\r        double y = absf(y1-y2);\r        x=x*x;\r y=y*y;\r return (float)sqrt(x+y);\r}\r\r\rvoid rect2polar(double x,double y,double returnPair[2]){\r  returnPair[0] = getDist(0.0,0.0,x,y);\r  returnPair[1] = atan2(y,x);\r}\r\rvoid polar2rect(double r,double theta,double returnPair[2]){\r    returnPair[0] = r*cos(theta);\r  returnPair[1] = r*sin(theta);\r}\r\r\r\r//tess\r\rvoid JTTessVertex(float x,float y, float z){\r  //first look for available memory before allocating more.\r  //printf("%f %f %f\n",x,y,z);\r  doTessErrorCheck();\r  //printf("1 %i\n",tessPtr);\r  GLdouble *p = tesscache[tessBase+tessPtr];\r  //printf("2\n",0);\r  tessPtr++;\r  \r  p[0] = x;\r  p[1] = y;\r  p[2] = z;\r  p[3] = 0;\r  //printf("3\n",0);\r  //if(tesscache!=0)tesscache->push((long)p);\r}\r\r\rvoid JTTessEnd(){\r  //FLUSH IT!\r  \r  tobj = gluNewTess();\r  _tessBind();\r  \r  if(tesscache!=0){\r    gluTessBeginPolygon(tobj,NULL);\r    gluTessBeginContour(tobj);\r    \r    for(int i=tessBase;i<tessBase+tessPtr;i++){\r      GLdouble*t = tesscache[i];\r      if((long)t==TESSCACHE_NEWCONTOUR){\r        gluTessEndContour(tobj);\r    gluTessBeginContour(tobj);\r      } else {\r      GLdouble *g = (GLdouble*)t;\r    gluTessVertex(tobj,g,g);\r      }\r    }\r    \r    gluTessEndContour(tobj);\r    gluTessEndPolygon(tobj);\r  }\r  gluDeleteTess(tobj);\r  glFlush();\r  //JTTessBegin();//reset to new.\r  \r}\r\r\r/*\rvoid JTTessInit(int memsize){\r  tessfreemem = new Vector();\r  tesscache = new GLdouble*[memsize];\r  tessmax = memsize;\r  for(int i=0;i<memsize;i++){\r    tesscache[i] = new GLdouble[12];\r  }\r}\r*/\r\r\r\rvoid JTTessNewContour(){\r  doTessErrorCheck();\r  tesscache[tessBase+tessPtr] = (GLdouble*)TESSCACHE_NEWCONTOUR;\r  tessPtr++;\r\r}\r\r\rvoid JTTessBegin(){\r  /*\r  if(tesscache!=0){\r    //     for(int i=0;i<tesscache->count ;i++){\r    //       long t = tesscache->get(i);\r    //       switch(t){\r    //       case TESSCACHE_NEWCONTOUR:break;\r    //       default:\r    //printf("%i\n",t);\r    //printf("%i\n",((GLdouble*)(t))[0]);\r    //delete [] (GLdouble*)t;//i'm leaving this all in memory, but it's dangerous!\r    //tessfreemem->push(t);\r    //break;\r    //      }\r    //}\r    //delete tesscache;\r    //tesscache = new Vector();\r    \r  } else { //it WAS zero.\r    //tesscache = new Vector();\r  }\r  tessBase += tessPtr;//advance forward.\r  tessPtr = 0;\r*/\r}\r\r\rvoid doTessErrorCheck(){\r  if(tessPtr+tessBase>tessmax){\r    printf("error:not enough memory allocated to JTTess",0);\r    exit(0);\r  }\r}\r\r\r\rvoid _tessBind(){  \r\r  //#if defined (__DARWIN__)\r  //#define TESSTYPE (GLvoid (*)(...))\r  //#else\r  //typedef GLvoid ( *GluTessCallbackType)(...);\r  //#define TESSTYPE reinterpret_cast<GluTessCallbackType>\r  //#endif\r  /*\r  \r  gluTessCallback(tobj, GLU_TESS_VERTEX,\r                TESSTYPE(glVertex3dv));\r  gluTessCallback(tobj, GLU_TESS_BEGIN,\r                TESSTYPE(JTTess_beginCallback));\r  gluTessCallback(tobj, GLU_TESS_END,\r                 TESSTYPE(&JTTess_endCallback));\r  gluTessCallback(tobj, GLU_TESS_ERROR,\r                TESSTYPE(JTTess_errorCallback));\r  gluTessCallback(tobj, GLU_TESS_COMBINE,\r             TESSTYPE(JTTess_combineCallback));  \r  gluTessProperty(tobj, GLU_TESS_WINDING_RULE,\r            GLU_TESS_WINDING_POSITIVE);\r  */\r}\r\r\r/*  the callback routines registered by gluTessCallback() */\r\r\rvoid JTTESSCALLBACK JTTess_combineCallback(GLdouble coords[3], \r                     GLdouble *vertex_data[4],\r                     GLfloat weight[4], GLdouble **dataOut ){\r  GLdouble *vertex;\r  int i;\r  doTessErrorCheck();\r  vertex = tesscache[tessBase+tessPtr];//(GLdouble *) malloc(6 * sizeof(GLdouble));\r  tessPtr++;\r  vertex[0] = coords[0];\r  vertex[1] = coords[1];\r  vertex[2] = coords[2];\r  for (i = 3; i < 7; i++)\r    vertex[i] = weight[0] * vertex_data[0][i] \r      + weight[1] * vertex_data[1][i]\r      + weight[2] * vertex_data[2][i] \r      + weight[3] * vertex_data[3][i];\r  *dataOut = vertex;\r}\r\r\rvoid JTTESSCALLBACK JTTess_beginCallback(GLenum which){\r  glBegin(which);\r}\r\rvoid JTTESSCALLBACK JTTess_endCallback(void)\r{\r  glEnd();\r}\r\rvoid JTTESSCALLBACK JTTess_errorCallback(GLenum errorCode)\r{\r  const GLubyte *estring;\r\r  estring = gluErrorString(errorCode);\r  fprintf (stderr, "Tessellation Error: %s\n", estring);\r  exit (0);\r}\r\r\r/*  new callback routines registered by these calls */\rvoid JTTESSCALLBACK JTTess_vertexCallback(GLvoid *vertex){\r  const GLdouble *pointer;\r  \r  pointer = (GLdouble *) vertex;\r  glColor3dv(pointer+3);\r  glVertex3dv((const GLdouble*)vertex);\r}\r\r\r\rJoshFont *getFont(){\r  return font;\r}\r\rJPoint mouse(){\r  return JPoint(mouseX(),mouseY(),0);\r}\r\r/**\r   saves the screen to a file. format support provided by image magick.\r   supported formats: http://www.imagemagick.org/script/formats.php\r*/\rvoid saveScreen(char *filename){\r  using namespace Magick; \r  if(rawpixels==NULL){\r    rawpixels = new unsigned char[width()*height()*3];\r  }\r  glReadPixels(0,0,width(),height(), GL_RGB , GL_UNSIGNED_BYTE ,rawpixels);\r  \r  /*\r  //reverse the alpha vals.\r  for(int i=0;i<width()*height();i++){\r    rawpixels[i*4+3] = 255 - rawpixels[i*4+3];\r  }\r  */\r  \r  Image image(width(),height(),"RGB" , CharPixel , rawpixels);\r  //image.modifyImage();\r  image.flip();\r  \r  \r  image.write(filename);//save\r  //delete [] rawpixels;\r}\r\r\r\r/**\r   saves the screen to a file. format support provided by image magick.\r   supported formats: http://www.imagemagick.org/script/formats.php\r*/\rImage* getPixels(){\r  using namespace Magick; \r  if(rawpixels==NULL){\r    rawpixels = new unsigned char[width()*height()*3];\r  }\r  glReadPixels(0,0,width(),height(), GL_RGB , GL_UNSIGNED_BYTE ,rawpixels);\r  \r  /*\r  //reverse the alpha vals.\r  for(int i=0;i<width()*height();i++){\r  rawpixels[i*4+3] = 255 - rawpixels[i*4+3];\r  }\r  */\r  \r  Image*image = new Image(width(),height(),"RGB" , CharPixel , rawpixels);\r  //image.modifyImage();\r  image->flip();\r  return image;\r}\r\r\r\r\r\r\r\r/* allocates new storage for an 8-bit image of the specified dimensions\r */\rpng_bytep* make_pixels(int width, int height) {\r  int pixel_size = 3;\r  //printf("debug debug debug 1\n",0);\r  png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);\r  if (png_ptr == NULL) {\r    \r    return NULL;\r  }\r  //printf("debug debug debug 2\n",0);\r  png_bytep *row_pointers = (unsigned char **)png_malloc(png_ptr, height*sizeof(png_bytep));\r  for (int i = 0; i < height; i++)\r    row_pointers[i] = (unsigned char *)png_malloc(png_ptr, width*pixel_size);\r  //printf("debug debug debug 3\n",0);\r  \r  return row_pointers;\r}\r//--------------------------------------------------------------------------------------------\r\rvoid jt_frameRate(unsigned long f){\r  frameRate = f;\r}\r\r\rvoid roundedRect(int gl_style,float x1,float y1,float x2,float y2,float radius,int steps){\r  float inc = (PI*0.5)/steps;\r  glBegin(gl_style);\r  //draw a quarter circle here.\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i-PI*0.5) + x2 - radius;\r    float y = radius*sin(inc*i-PI*0.5) + y1 + radius;\r    glVertex2f(x,y);\r  }\r\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i) + x2 - radius;\r    float y = radius*sin(inc*i) + y2 - radius;\r    glVertex2f(x,y);\r  }\r\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i+PI*0.5) + x1 + radius;\r    float y = radius*sin(inc*i+PI*0.5) + y2 - radius;\r    glVertex2f(x,y);\r  }\r\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i+PI) + x1 + radius;\r    float y = radius*sin(inc*i+PI) + y1 + radius;\r    glVertex2f(x,y);\r  }\r\r  \r\r  glEnd();\r}\r
\ No newline at end of file
+#include "jttoolkit.h"\r#include <stdio.h>\r#include <stdlib.h>\r#include <string.h>\r#include <iostream.h> \r#include <fstream.h>\r\r\r#define INIT_WINDOW_X 0\r#define INIT_WINDOW_Y 0\r#define INIT_WINDOW_WIDTH 1024\r#define INIT_WINDOW_HEIGHT 768\r\r\r//#include "gl2ps.h"\r#if defined (__DARWIN__)\r#include <ApplicationServices/ApplicationServices.h>\r#endif\r\r#define use_perspective\r#define VERBOSE 0\r//turn this on and off for speed\r\r\r//---- user-global access functions\r\rint ticks(){return _ticks;}\rint width(){return _width;}\rint height(){return _height;}\r\rint mouseX(){return _mouseX;}\rint mouseY(){return _mouseY;}\r\r\rvoid setMouseX(long xx){_mouseX = xx;}\rvoid setMouseY(long yy){_mouseY = yy;}\r\rvoid ignoreMouse(int state){_ignoreMouse = state;}\r\r//--------------\r\rvoid *threadFunc(void*stuff){\r}\r\r//------------------------------------------------------------------------\rvoid initfmod(){\r  /*  \r  if (FSOUND_GetVersion() < FMOD_VERSION){\r    printf("Error : You are using the wrong DLL version!  You should be using FMOD %.02f\n", FMOD_VERSION);\r    exit(1);\r  }\r  \r  if(!FSOUND_Init(48000, 1024, FSOUND_INIT_GLOBALFOCUS)){\r    printf("%s\n",FMOD_ErrorString(FSOUND_GetError()));\r  }\r  */\r}\r//------------------------------------------------------------------------\r\r\r\rfloat friction(){return _friction;}\rvoid setFriction(float f){_friction = f;}\r\rfloat frequencyRange(){return _frequencyRange;}\rvoid setFrequencyRange(float f){_frequencyRange = f;}\r\rvoid drawUnitSquare(){\r  glBegin(GL_QUADS);\r  glTexCoord2f(0,0);glVertex2f(0,0);        \r  glTexCoord2f(1,0);glVertex2f(1,0);\r  glTexCoord2f(1,1);glVertex2f(1,1);\r  glTexCoord2f(0,1);glVertex2f(0,1);\r  glEnd();\r}\r\r\rvoid  drawUnitSquareSlightlySmaller(){\r  glBegin(GL_QUADS);\r  glTexCoord2f(0.01,0.01);glVertex2f(0,0);   \r  glTexCoord2f(0.99,0.01);glVertex2f(1,0);\r  glTexCoord2f(0.99,0.99);glVertex2f(1,1);\r  glTexCoord2f(0.01,0.99);glVertex2f(0,1);\r  glEnd();\r}\r\r\r\r\rvoid toggleFullScreen(){\r  fullscreenmode=!fullscreenmode;\r  if(fullscreenmode){\r    glutFullScreen();\r  } else {\r    glutReshapeWindow(INIT_WINDOW_WIDTH,INIT_WINDOW_HEIGHT);\r    glutPositionWindow(0,10);\r  }\r}\r\rchar* trimLeft(char*buff){\r  //count how many to offset backward\r  int whiteCount = 0;\r  for(int i=0;i<strlen(buff);i++){\r    if(buff[i]==' '||buff[i]=='\r'||buff[i]=='\n'||buff[i]=='\t'){\r      whiteCount++;\r    }else{\r      break;\r    }\r  }\r  if(whiteCount>0){\r    for(int b=0;b<strlen(buff)-whiteCount;b++){\r      buff[b] = buff[b+whiteCount];\r    }\r  }\r  return buff;\r}\r\rvoid fileFromString(unsigned char *fname, char *data, long datasize){\r    long i=0;\r      FILE *fp = fopen((const char*)fname,"wb");\r     for(i=0;i<datasize;i++){\r               fputc(data[i],fp);\r     }\r      fclose(fp);\r}\r\r\r//--------------------------------------------------------------------\r\r\runsigned char* stringFromFile(char *fname){\r   long fsize;\r    unsigned char *a;\r\r     if(fname==NULL){\r         if(VERBOSE)printf("err: stringFromFile: filename was null\n",NULL);\r    return 0;\r    }\r      fsize = getFileSize(fname);\r\r   if(fsize==0){\r    if(VERBOSE)printf("err: stringFromFile: file size was zero\n",NULL);\r   return 0;\r    }\r      a = new unsigned char[fsize+1];\r        \r       if(a==NULL){\r     if(VERBOSE)printf("err: stringFromFile: memory allocation failed\n",NULL);\r     return 0;\r    }\r      \r       getFile((char*)fname,a,fsize);\r a[fsize]=0;\r    return a;\r}\r\r\r//--------------------------------------------------------------------\r\rlong getFileSize( char *fname){\r  FILE *fp;\r      long fsize;\r    if (fname == NULL){\r            if(VERBOSE)printf("err: getFileSize: filename was null\n",NULL);\r               return 0;\r      }\r      fp = fopen((const char*)fname, "rb");\r  if (fp == NULL){\r               if(VERBOSE)printf("err: getFileSize: file stream failed\n",NULL);\r              return 0;\r      }\r      if(fseek(fp, 0, SEEK_END)!=0){\r                 if(VERBOSE)printf("err: getFileSize: fseek failed\n",NULL);\r    }\r      fsize = ftell(fp);\r     fclose(fp);\r    return fsize;\r}\r\r\r//--------------------------------------------------------------------\r\rvoid getFile( char *filename, unsigned char *buff, int length){\r      unsigned char c=0;\r     long buffcnt=0;\r        long i=0;\r      ifstream f;\r    //#if defined(__DARWIN__)\r      //      f.open(filename);\r      //#else\r        f.open((const char*)filename, ios::binary);\r    //#endif\r       f.read((char*)buff, length);\r   //for(i=0;i<length;i++){\r       //      printf("{%c}",buff[i]);\r        //}\r    f.close();\r}\r\r\r//--------------------------------------------------------------------\r\rvoid hideMouse(){\r\r#if defined(__DARWIN__)\r      //MAC\r  HideCursor();\r#elif defined(linux)\r     //LINUX\r        //ignore\r#else\r         //WINDOWS\r      ShowCursor(FALSE);\r#endif\r\r\r}\r\r//--------------------------------------------------------------------\r\rvoid showMouse(){\r#if defined(__DARWIN__)\r       //MAC\r  ShowCursor();\r#elif defined(linux)\r     //ignore\r#else\r         //WINDOWS\r      ShowCursor(TRUE);\r#endif\r}\r\rvoid display(){}\rvoid display2(){}\r\rvoid _execute_frame(){\r  glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);\r  glPushMatrix();\r#if defined(use_perspective)\r  glTranslatef(-width()/2.0f,height()/2.0,-height()/2.0);\r  glScalef(1,-1,1);\r#endif \r  if(penta_firstloop){//first time!\r    penta_firstloop = false;\r    font = new JoshFont("media/usethis.ttf",40,JF_BITMAP,true,true);\r    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r    setup();\r  }else{\r    loop();\r    //glFlush();\r    //glutPostRedisplay();\r    _ticks++;\r  }\r  glPopMatrix();\r  glutSwapBuffers();\r  \r}\r\rvoid idle(){\r  /*\r  if(glutGet(GLUT_ELAPSED_TIME) - lastGlutFrameTime > frameRate){\r    _execute_frame();\r    lastGlutFrameTime = glutGet(GLUT_ELAPSED_TIME);\r  }\r  */\r}\r\r\rvoid timerFunc(int v) {\r  //if(glutGet(GLUT_ELAPSED_TIME) - lastGlutFrameTime > frameRate){\r    _execute_frame();\r    //}\r  glutTimerFunc(frameRate,timerFunc,0);\r}\r\rvoid preKeyDown(unsigned char k, int special){\r  if(special){\r    if(k==11){\r      toggleFullScreen();\r    }\r  } else {\r    //non special\r    if(k==27){\r      //exit(0);\r    }else if (k==KEY_DELETE || k==KEY_BACKSPACE){\r\r\r    } else if (k==6){//ctrl+f on a mac\r      toggleFullScreen();\r    } else {\r\r    }\r  }\r\r}\r\rvoid keyboardDown(unsigned char k,int x,int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }\r  preKeyDown(k,0);\r  jttoolkit_keyDown(k,0);\r}\r\rvoid keyboardUp(unsigned char k,int x,int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }\r  //printf("keyboardUp: %c %i\n",k);\r  jttoolkit_keyUp(k,0);\r}\r\r\rvoid specialFunc(int k,int x,int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }\r  preKeyDown(k,1);\r  jttoolkit_keyDown(k,1);\r}\r\rvoid mouseMotionFunc(int x, int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }else{\r    ignored_mouseMove(x,y);\r  }\r\r}\r\rvoid mousePassiveMotionFunc(int x, int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r  }else{\r    ignored_mouseMove(x,y);\r  }\r  //  printf("%i %i\n",_mouseX,_mouseY);\r}\r\rvoid mouseFunc(int button, int state, int x, int y){\r  if(!_ignoreMouse){\r    _mouseX=x;\r    _mouseY=y;\r    \r    if(state==GLUT_DOWN){\r      jttoolkit_mouseDown();\r    } else {\r      jttoolkit_mouseUp();\r    }\r    \r  }else{\r    \r    if(state==GLUT_DOWN){\r      ignored_mouseDown(x,y);\r    } else {\r      ignored_mouseUp(x,y);\r    }\r    \r  }\r}\r\rvoid viewPerspective(float angle){\r  glMatrixMode(GL_PROJECTION);\r  glLoadIdentity();\r  gluPerspective(angle,(float)width()/(float)height(),0.0001,10000);\r  //glFrustum(-2, 2, -2, 2, 1.0f, 100.0f);\r  glMatrixMode(GL_MODELVIEW);\r}\r\r\rvoid viewOrtho(){\r  glMatrixMode(GL_PROJECTION);\r  glLoadIdentity();\r  glOrtho(0,width(),-height(),0,-10000,10000);\r  glMatrixMode(GL_MODELVIEW);\r}\r\rvoid reshape(int w,int h){\r  //  if(glutGetWindow()==MainWindowID){\r  if(1){\r    \r    _width = w;\r    _height = h;\r    //      to keep it propertional & let the window stretch\r    // glMatrixMode(GL_PROJECTION);\r    //     glLoadIdentity();\r    glViewport(0,0,w,h);\r    //       if(w<h){\r    //         float r = ((float)h/(float)w);\r    //           glOrtho(-1,1,-r,r,-2,2);\r    // }else{\r    float r = ((float)w/(float)h);\r    //                glOrtho(-r,r,-1,1,-2,2);\r    // }\r    //        this->draw();\r    \r    viewPerspective(90);\r    glLoadIdentity();\r    \r  } else { //then i can assume for now that it was the output console window.\r    \r    glViewport(0,0,w,h);\r    float r = ((float)w/(float)h);\r    \r    glMatrixMode(GL_PROJECTION);\r    glLoadIdentity();\r    \r    //#if defined(use_perspective)\r    //gluPerspective(90,(float)w/(float)h,0.0001,10000);\r    //#else\r    glOrtho(0,w,h,0,-10000,10000);\r    //#endif\r    //glFrustum(-2, 2, -2, 2, 1.0f, 100.0f);\r    \r    glMatrixMode(GL_MODELVIEW);\r    glLoadIdentity();\r  }\r  //  jt_resizeDrawBuffer();\r}\r\rvoid jt_resizeDrawBuffer(){\r  //  delete [] drawbuffer;\r  //  drawbuffer = new unsigned char[width()*height()*4];\r}\r\rint main(int argc,char** argv){\r\r\r  glutInit(&argc,argv);\r  glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGBA);\r  glutInitWindowSize (INIT_WINDOW_WIDTH,INIT_WINDOW_HEIGHT);\r  glutInitWindowPosition (INIT_WINDOW_X,INIT_WINDOW_Y);\r\r  int gameMode = 0;\r  if(argc>1){\r    for(int i=0;i<strlen(argv[1]);i++){\r      switch(argv[1][i]){\r      case 'g':\r     gameMode = true;\r      }\r    }\r  }\r\r  if(gameMode){\r    glutGameModeString("1440x900:16@60");\r    glutEnterGameMode();\r  }else{\r    glutCreateWindow (" ");\r  }\r  \r  jttoolkit_init();\r  glutMainLoop();\r\r  //do we ever even get here?\r  //FSOUND_Close();\r  stop();\r  exit(0);\r  return 0;\r}\r\rint jttoolkit_init(){\r  glutIdleFunc(idle);\r  glutDisplayFunc(display);\r  glutReshapeFunc(reshape);\r  glutMouseFunc(mouseFunc);\r  glutMotionFunc(mouseMotionFunc);\r  glutPassiveMotionFunc(mousePassiveMotionFunc);\r  glutKeyboardFunc (keyboardDown);\r  glutKeyboardUpFunc (keyboardUp);\r  glutSpecialFunc (specialFunc);\r  glutTimerFunc(frameRate,timerFunc,0);\r  \r  // a whole bunch of switches for the openGL engine\r  glEnable(GL_TEXTURE_2D);\r  glEnable(GL_BLEND);\r  glEnable(GL_DEPTH_TEST);\r  //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_COLOR);\r  //glEnable(GL_LINE_SMOOTH);\r  //glEnable(GL_POLYGON_SMOOTH);\r  glLineWidth(1);\r  //  glDepthFunc(GL_LESS);//was GL_LEQUAL\r  glDepthFunc(GL_LEQUAL);//was GL_LEQUAL\r  glClearDepth(1.0f);\r  glDisable(GL_DITHER);\r  //glShadeModel(GL_SMOOTH);\r  glMatrixMode(GL_PROJECTION);    //       The Projection Matrix\r  glLoadIdentity();                      // The Projection Matrix\r  // Calculate The Aspect Ratio Of The Window\r  //gluPerspective(45.0f,(float)wW/(float)wH,0.1f,100.0f);\r  //gluLookAt(0,0,1,0,0,0,0,1,0);\r  glMatrixMode(GL_MODELVIEW); // The Modelview Matrix\r  glLoadIdentity();    // The Modelview Matrix\r  //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Perspective Calculations\r  //glEnable(GL_FOG);\r  //glFogf(GL_FOG_START,-100);\r  //glFogf(GL_FOG_END,-200);\r  //glFogf(GL_FOG_DENSITY,0.1);\r  //float r[] = {0.5,0.5,0.5,0.5};\r  //glFogfv(GL_FOG_COLOR,r);\r  //--------------------------------------------------------------------------------\r  glClearColor(0,0,0,0);\r  //also, if that doesn't work,  check if the users screen is 640x48, then fullscreen the game.\r  //#if defined(__DARWIN__)\r  //problem with fullscreen - it disables the glut passive motion func.\r  //#else\r  //if(fullscreenmode)glutFullScreen();\r  //#endif\r\r}\r\rint buildScreenFont(char *fontName, int size){\r  return 0;\r}\r\r\rvoid _draw_single_screenFont(int fontID, char*text){\r  \r  glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);\r  \r}\r\rvoid drawScreenFont(int fontID, char*text,int tracking){\r  int i;\r  int drawScreenFont_buffpt=0;\r  int lineCounter=0;\r  if (text == NULL)return;\r  glPushAttrib(GL_LIST_BIT);\r  glRasterPos3f(0,lineCounter,0);\r  glListBase(fontID);\r  for(i=0;i<strlen(text);i++){\r    if(text[i]=='\n'){\r      drawScreenFont_buff[drawScreenFont_buffpt]=0;\r      _draw_single_screenFont(fontID,drawScreenFont_buff);\r      lineCounter+=tracking;\r      glRasterPos3f(0,lineCounter,0);\r      drawScreenFont_buffpt=0;\r    }else{\r      drawScreenFont_buff[drawScreenFont_buffpt] = text[i];\r      drawScreenFont_buffpt++;\r    }\r  }\r  drawScreenFont_buff[drawScreenFont_buffpt]=0;\r  _draw_single_screenFont(fontID,drawScreenFont_buff);\r  glPopAttrib();\r}\r\r\rvoid killScreenFont(int fontID){\r  glDeleteLists(fontID,256);\r}\r\r\rvoid lights(){\r  glEnable(GL_LIGHT0);\r  glEnable(GL_LIGHTING);\r  glEnable(GL_COLOR_MATERIAL);\r  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);\r}\r\r\r\rvoid nolights(){\r  glDisable(GL_LIGHT0);\r  glDisable(GL_LIGHTING);\r  glDisable(GL_COLOR_MATERIAL);\r}\r\r\rfloat randomFloat(){\r  return ((float)rand())/((float)RAND_MAX);\r}\r\rvoid line(JPoint p1,JPoint p2){\r  glBegin(GL_LINES);\r  p1.glVertex();\r  p2.glVertex();\r  glEnd();\r}\r\rvoid bezier(JPoint p1,JPoint p2,JPoint p3,JPoint p4,int steps){\r  float *Xs = new float[steps];\r  float *Ys = new float[steps];\r  float *Zs = new float[steps];\r\r\r  interpolateBezier(\r               p1.x,p1.y,p1.z,\r                p2.x,p2.y,p2.z,\r                p3.x,p3.y,p3.z,\r                p4.x,p4.y,p4.z,\r                 steps,Xs,Ys,Zs) ;\r    \r  glBegin(GL_LINE_STRIP);\r  p1.glVertex();\r  for(int i=1;i<steps-1;i++){\r    glVertex3f(Xs[i],Ys[i],Zs[i]);\r  }\r  p4.glVertex();\r  glEnd();\r  \r  delete Xs;\r  delete Ys;\r  delete Zs;\r\r}\r\r\rvoid interpolateBezier(\r                float P0X,float P0Y,float P0Z,\r                 float P1X,float P1Y,float P1Z,\r                 float P2X,float P2Y,float P2Z,\r                 float P3X,float P3Y,float P3Z,\r                 int segs,\r                      float Xs[] , float Ys[] , float Zs[]) {\r  \r  float t=0.0f,dt=1.0f/(float)segs;           // calculating increment\r  float Q0X,Q0Y,Q0Z;\r  float Q1X,Q1Y,Q1Z;\r  float Q2X,Q2Y,Q2Z;\r  float R0X,R0Y,R0Z;\r  float R1X,R1Y,R1Z;\r  float x;float y;float z;\r  float xx=P0X;float yy=P0Y;float zz=P0Z;\r  for (int i=1;i<segs;i++) {\r    Q0X = P0X + t*(P1X-P0X); Q0Y = P0Y + t*(P1Y-P0Y); Q0Z = P0Z + t*(P1Z-P0Z);\r    Q1X = P1X + t*(P2X-P1X); Q1Y = P1Y + t*(P2Y-P1Y); Q1Z = P1Z + t*(P2Z-P1Z);\r    Q2X = P2X + t*(P3X-P2X); Q2Y = P2Y + t*(P3Y-P2Y); Q2Z = P2Z + t*(P3Z-P2Z);\r    R0X = Q0X + t*(Q1X-Q0X); R0Y = Q0Y + t*(Q1Y-Q0Y); R0Z = Q0Z + t*(Q1Z-Q0Z);\r    R1X = Q1X + t*(Q2X-Q1X); R1Y = Q1Y + t*(Q2Y-Q1Y); R1Z = Q1Z + t*(Q2Z-Q1Z);\r    x = R0X + t*(R1X-R0X);\r    y = R0Y + t*(R1Y-R0Y);\r    z = R0Z + t*(R1Z-R0Z);\r    //drawLine(xx,yy,zz,x,y,z);\r    Xs[i-1]=x;\r    Ys[i-1]=y;\r    Zs[i-1]=z;\r    xx=x;\r    yy=y;\r    zz=z;\r    t+=dt;\r  }\r}\r\r\rfloat absf(float a){\r  if(a<0)return -a;\r  return a;\r}\r\r\rfloat getDist(float x1,float y1,float x2,float y2){\r     double x = absf(x1-x2);\r        double y = absf(y1-y2);\r        x=x*x;\r y=y*y;\r return (float)sqrt(x+y);\r}\r\r\rvoid rect2polar(double x,double y,double returnPair[2]){\r  returnPair[0] = getDist(0.0,0.0,x,y);\r  returnPair[1] = atan2(y,x);\r}\r\rvoid polar2rect(double r,double theta,double returnPair[2]){\r    returnPair[0] = r*cos(theta);\r  returnPair[1] = r*sin(theta);\r}\r\r\r\r//tess\r\rvoid JTTessVertex(float x,float y, float z){\r  //first look for available memory before allocating more.\r  //printf("%f %f %f\n",x,y,z);\r  doTessErrorCheck();\r  //printf("1 %i\n",tessPtr);\r  GLdouble *p = tesscache[tessBase+tessPtr];\r  //printf("2\n",0);\r  tessPtr++;\r  \r  p[0] = x;\r  p[1] = y;\r  p[2] = z;\r  p[3] = 0;\r  //printf("3\n",0);\r  //if(tesscache!=0)tesscache->push((long)p);\r}\r\r\rvoid JTTessEnd(){\r  //FLUSH IT!\r  \r  tobj = gluNewTess();\r  _tessBind();\r  \r  if(tesscache!=0){\r    gluTessBeginPolygon(tobj,NULL);\r    gluTessBeginContour(tobj);\r    \r    for(int i=tessBase;i<tessBase+tessPtr;i++){\r      GLdouble*t = tesscache[i];\r      if((long)t==TESSCACHE_NEWCONTOUR){\r        gluTessEndContour(tobj);\r    gluTessBeginContour(tobj);\r      } else {\r      GLdouble *g = (GLdouble*)t;\r    gluTessVertex(tobj,g,g);\r      }\r    }\r    \r    gluTessEndContour(tobj);\r    gluTessEndPolygon(tobj);\r  }\r  gluDeleteTess(tobj);\r  glFlush();\r  //JTTessBegin();//reset to new.\r  \r}\r\r\r/*\rvoid JTTessInit(int memsize){\r  tessfreemem = new Vector();\r  tesscache = new GLdouble*[memsize];\r  tessmax = memsize;\r  for(int i=0;i<memsize;i++){\r    tesscache[i] = new GLdouble[12];\r  }\r}\r*/\r\r\r\rvoid JTTessNewContour(){\r  doTessErrorCheck();\r  tesscache[tessBase+tessPtr] = (GLdouble*)TESSCACHE_NEWCONTOUR;\r  tessPtr++;\r\r}\r\r\rvoid JTTessBegin(){\r  /*\r  if(tesscache!=0){\r    //     for(int i=0;i<tesscache->count ;i++){\r    //       long t = tesscache->get(i);\r    //       switch(t){\r    //       case TESSCACHE_NEWCONTOUR:break;\r    //       default:\r    //printf("%i\n",t);\r    //printf("%i\n",((GLdouble*)(t))[0]);\r    //delete [] (GLdouble*)t;//i'm leaving this all in memory, but it's dangerous!\r    //tessfreemem->push(t);\r    //break;\r    //      }\r    //}\r    //delete tesscache;\r    //tesscache = new Vector();\r    \r  } else { //it WAS zero.\r    //tesscache = new Vector();\r  }\r  tessBase += tessPtr;//advance forward.\r  tessPtr = 0;\r*/\r}\r\r\rvoid doTessErrorCheck(){\r  if(tessPtr+tessBase>tessmax){\r    printf("error:not enough memory allocated to JTTess",0);\r    exit(0);\r  }\r}\r\r\r\rvoid _tessBind(){  \r\r  //#if defined (__DARWIN__)\r  //#define TESSTYPE (GLvoid (*)(...))\r  //#else\r  //typedef GLvoid ( *GluTessCallbackType)(...);\r  //#define TESSTYPE reinterpret_cast<GluTessCallbackType>\r  //#endif\r  /*\r  \r  gluTessCallback(tobj, GLU_TESS_VERTEX,\r                TESSTYPE(glVertex3dv));\r  gluTessCallback(tobj, GLU_TESS_BEGIN,\r                TESSTYPE(JTTess_beginCallback));\r  gluTessCallback(tobj, GLU_TESS_END,\r                 TESSTYPE(&JTTess_endCallback));\r  gluTessCallback(tobj, GLU_TESS_ERROR,\r                TESSTYPE(JTTess_errorCallback));\r  gluTessCallback(tobj, GLU_TESS_COMBINE,\r             TESSTYPE(JTTess_combineCallback));  \r  gluTessProperty(tobj, GLU_TESS_WINDING_RULE,\r            GLU_TESS_WINDING_POSITIVE);\r  */\r}\r\r\r/*  the callback routines registered by gluTessCallback() */\r\r\rvoid JTTESSCALLBACK JTTess_combineCallback(GLdouble coords[3], \r                     GLdouble *vertex_data[4],\r                     GLfloat weight[4], GLdouble **dataOut ){\r  GLdouble *vertex;\r  int i;\r  doTessErrorCheck();\r  vertex = tesscache[tessBase+tessPtr];//(GLdouble *) malloc(6 * sizeof(GLdouble));\r  tessPtr++;\r  vertex[0] = coords[0];\r  vertex[1] = coords[1];\r  vertex[2] = coords[2];\r  for (i = 3; i < 7; i++)\r    vertex[i] = weight[0] * vertex_data[0][i] \r      + weight[1] * vertex_data[1][i]\r      + weight[2] * vertex_data[2][i] \r      + weight[3] * vertex_data[3][i];\r  *dataOut = vertex;\r}\r\r\rvoid JTTESSCALLBACK JTTess_beginCallback(GLenum which){\r  glBegin(which);\r}\r\rvoid JTTESSCALLBACK JTTess_endCallback(void)\r{\r  glEnd();\r}\r\rvoid JTTESSCALLBACK JTTess_errorCallback(GLenum errorCode)\r{\r  const GLubyte *estring;\r\r  estring = gluErrorString(errorCode);\r  fprintf (stderr, "Tessellation Error: %s\n", estring);\r  exit (0);\r}\r\r\r/*  new callback routines registered by these calls */\rvoid JTTESSCALLBACK JTTess_vertexCallback(GLvoid *vertex){\r  const GLdouble *pointer;\r  \r  pointer = (GLdouble *) vertex;\r  glColor3dv(pointer+3);\r  glVertex3dv((const GLdouble*)vertex);\r}\r\r\r\rJoshFont *getFont(){\r  return font;\r}\r\rJPoint mouse(){\r  return JPoint(mouseX(),mouseY(),0);\r}\r\r/**\r   saves the screen to a file. format support provided by image magick.\r   supported formats: http://www.imagemagick.org/script/formats.php\r*/\rvoid saveScreen(char *filename){\r  using namespace Magick; \r  if(rawpixels==NULL){\r    rawpixels = new unsigned char[width()*height()*3];\r  }\r  glReadPixels(0,0,width(),height(), GL_RGB , GL_UNSIGNED_BYTE ,rawpixels);\r  \r  /*\r  //reverse the alpha vals.\r  for(int i=0;i<width()*height();i++){\r    rawpixels[i*4+3] = 255 - rawpixels[i*4+3];\r  }\r  */\r  \r  Image image(width(),height(),"RGB" , CharPixel , rawpixels);\r  //image.modifyImage();\r  image.flip();\r  \r  \r  image.write(filename);//save\r  //delete [] rawpixels;\r}\r\r\r\r/**\r   saves the screen to a file. format support provided by image magick.\r   supported formats: http://www.imagemagick.org/script/formats.php\r*/\rImage* getPixels(){\r  using namespace Magick; \r  if(rawpixels==NULL){\r    rawpixels = new unsigned char[width()*height()*3];\r  }\r  glReadPixels(0,0,width(),height(), GL_RGB , GL_UNSIGNED_BYTE ,rawpixels);\r  \r  /*\r  //reverse the alpha vals.\r  for(int i=0;i<width()*height();i++){\r  rawpixels[i*4+3] = 255 - rawpixels[i*4+3];\r  }\r  */\r  \r  Image*image = new Image(width(),height(),"RGB" , CharPixel , rawpixels);\r  //image.modifyImage();\r  image->flip();\r  return image;\r}\r\r\r\r\r\r\r\r/* allocates new storage for an 8-bit image of the specified dimensions\r */\rpng_bytep* make_pixels(int width, int height) {\r  int pixel_size = 3;\r  //printf("debug debug debug 1\n",0);\r  png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);\r  if (png_ptr == NULL) {\r    \r    return NULL;\r  }\r  //printf("debug debug debug 2\n",0);\r  png_bytep *row_pointers = (unsigned char **)png_malloc(png_ptr, height*sizeof(png_bytep));\r  for (int i = 0; i < height; i++)\r    row_pointers[i] = (unsigned char *)png_malloc(png_ptr, width*pixel_size);\r  //printf("debug debug debug 3\n",0);\r  \r  return row_pointers;\r}\r//--------------------------------------------------------------------------------------------\r\rvoid jt_frameRate(unsigned long f){\r  frameRate = f;\r}\r\r\rvoid roundedRect(int gl_style,float x1,float y1,float x2,float y2,float radius,int steps){\r  float inc = (PI*0.5)/steps;\r  glBegin(gl_style);\r  //draw a quarter circle here.\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i-PI*0.5) + x2 - radius;\r    float y = radius*sin(inc*i-PI*0.5) + y1 + radius;\r    glVertex2f(x,y);\r  }\r\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i) + x2 - radius;\r    float y = radius*sin(inc*i) + y2 - radius;\r    glVertex2f(x,y);\r  }\r\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i+PI*0.5) + x1 + radius;\r    float y = radius*sin(inc*i+PI*0.5) + y2 - radius;\r    glVertex2f(x,y);\r  }\r\r  \r  for(int i=0;i<steps;i++){\r    float x = radius*cos(inc*i+PI) + x1 + radius;\r    float y = radius*sin(inc*i+PI) + y1 + radius;\r    glVertex2f(x,y);\r  }\r\r  \r\r  glEnd();\r}\r
\ No newline at end of file
index 6124e862a42adc7c0d61a187751f27d6c0725ce4..b212df89d41a660ff463607cafd519cd60a2b29b 100644 (file)
-981
-981
-981
-983
-1013
-1018
-1019
-1019
-1019
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1020
-1019
-1019
-1018
-1017
-1016
-1009
-974
-941
-913
-877
-834
-803
-770
-750
-738
-734
-714
-707
-697
-678
-671
-655
-642
-610
-596
-569
-559
-552
-549
-546
-545
-543
-541
-541
-539
-538
-535
-534
-532
-531
-531
-530
-529
-527
-526
-522
-520
-519
-518
-517
-515
-513
-512
-503
-501
-499
-497
-494
-492
-491
-489
-482
-475
-470
-465
-455
-453
-451
-450
-446
-446
-445
-445
-444
-444
-443
-443
-441
-428
-411
-396
-384
-378
-377
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-375
-387
-401
-431
-469
-506
-561
-613
-663
-731
-777
-791
-829
-861
-869
-876
-885
-905
-919
-925
-932
-936
-937
-940
-942
-943
-945
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-946
-947
-956
-961
-962
-966
-968
-969
-970
-970
-971
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-972
-971
-956
-953
-952
-950
-948
-947
-945
-944
-942
-939
-936
-935
-933
-931
-929
-926
-922
-917
-907
-899
-895
-893
-891
-889
-888
-887
-886
-884
-884
-882
-881
-880
-878
-876
-875
-874
-871
-869
-867
-863
-862
-862
-862
-862
-861
-860
-859
-857
-856
-856
-854
-853
-852
-851
-850
-850
-849
-848
-847
-847
-845
-845
-843
-838
-838
-837
-837
-836
-835
-834
-833
-832
-832
-831
-831
-830
-829
-828
-827
-826
-825
-823
-823
-822
-822
-821
-821
-820
-820
-820
-819
-819
-818
-817
-816
-815
-814
-813
-812
-811
-810
-809
-808
-807
-806
-805
-803
-802
-802
-801
-799
-797
-797
-795
-795
-794
-793
-792
-791
-791
-790
-788
-788
-787
-786
-785
-784
-783
-782
-781
-780
-779
-778
-777
-776
-775
-773
-773
-772
-771
-769
-769
-768
-768
-768
-768
-768
-768
-768
-768
-768
-770
-778
-778
-778
-776
-776
-776
-775
-774
-772
-772
-771
-771
-771
-771
-770
-769
-769
-769
-768
-768
-767
-766
-765
-763
-762
-762
-761
-760
-759
-759
-758
-758
-758
-757
-757
-757
-756
-756
-755
-754
-754
-753
-752
-752
-751
-750
-750
-749
-749
-749
-749
-749
-748
-748
-748
-748
-748
-747
-747
-747
-746
-746
-746
-745
-745
-745
-745
-744
-744
-744
-744
-743
-743
-743
-742
-742
-742
-741
-741
-741
-740
-740
-740
-740
-740
-739
-739
-739
-738
-738
-738
-738
-737
-737
-737
-736
-735
-735
-734
-734
-734
-734
-734
-733
-733
-733
-733
-733
-732
-732
-731
-731
-731
-730
-729
-729
-728
-727
-727
-726
-725
-725
-724
-724
-723
-723
-722
-722
-722
-721
-720
-720
-720
-720
-719
-719
-718
-718
-717
-717
-717
-717
-716
-716
-715
-715
-714
-714
-713
-713
-712
-712
-712
-711
-711
-710
-710
-710
-709
-709
-709
-708
-708
-707
-707
-707
-707
-706
-706
-705
-705
-705
-705
-705
-704
-703
-703
-703
-703
-703
-703
-703
-702
-702
-701
-700
-700
-699
-699
-699
-698
-698
-697
-697
-696
-696
 695
 695
-694
-694
-694
-694
-693
-693
-692
-692
-691
-691
-690
-690
-690
-690
-689
-689
-689
-689
-689
-689
-688
-688
-688
-688
-687
-687
-687
-687
-686
-686
-686
-686
-685
-684
-683
-682
-682
-682
-682
-682
-681
-681
-680
-680
-679
-679
-679
-679
-678
-678
-677
-677
-677
-676
-676
-675
-675
-675
-675
-674
-674
-674
-673
-673
-673
-672
-672
-672
-672
-671
-671
-671
-670
-670
-670
-669
-669
-668
-668
-668
-667
-667
-667
-666
-666
-666
-665
-665
-664
-664
-663
-662
-662
-661
-661
-660
-660
-659
-658
-658
-657
-657
-657
-657
-656
-656
-655
-654
-654
-653
-652
-652
-650
-649
-649
-648
-648
-647
-646
-646
-645
-645
-644
-643
-643
-643
-643
-643
-641
-640
-640
-639
-639
-638
-638
-637
-636
-636
-634
-634
-634
-633
-633
-632
-632
-631
-631
-631
-630
-630
-629
-629
-628
-627
-626
-626
-625
-625
-625
-625
-623
-623
-623
-622
-622
-622
-622
-620
-619
-618
-618
-618
-617
-617
-616
-616
-616
-615
-614
-613
-613
-613
-612
-611
-611
-610
-610
-609
-609
-609
-608
-608
-607
-607
-607
-606
-605
-605
-604
-604
-603
-603
-602
-601
-601
-600
-600
-599
-599
-599
-598
-597
-597
-597
-596
-595
-595
-594
-594
-593
-593
-592
-592
-592
-590
-590
-590
-589
-588
-588
-587
-586
-586
-585
-585
-584
-583
-582
-582
-581
-580
-579
-578
-578
-577
-576
-576
-574
-573
-572
-572
-571
-570
-570
-569
-568
-568
-567
-566
-565
-564
-562
-562
-561
-560
-559
-559
-558
-557
-556
-555
-554
-553
-552
-551
-551
-550
-549
-548
-547
-546
-545
-545
-543
-543
-542
-541
-540
-539
-537
-537
-537
-536
-535
-535
-534
-532
-531
-530
-529
-528
-527
-526
-526
-525
-524
-523
-522
-521
-520
-518
-517
-516
-515
-514
-513
-511
-510
-509
-508
-507
-506
-505
-504
-502
-501
-500
-499
-498
-496
-495
-494
-493
-492
-490
-490
-489
-488
-487
-486
-485
-484
-483
-482
-481
-479
-478
-476
-474
-472
-470
-469
-468
-467
-465
-464
-462
-460
-459
-459
-457
-457
-455
-454
-453
-452
-450
-449
-448
-446
-445
-443
-442
-441
-438
-436
-435
-435
-434
-433
-432
-431
-430
-429
-429
-428
-427
-427
-426
-425
-423
-423
-422
-422
-421
-420
-419
-417
-417
-416
-415
-414
-413
-411
-410
-409
-407
-404
-400
-398
-394
-393
-392
-390
-387
-386
-385
-384
-383
-382
-380
-378
-377
-377
-376
-375
-374
-374
-373
-372
-371
-370
-370
-369
-369
-368
-367
-366
-365
-364
-363
-363
-362
-362
-361
-360
-360
-359
-357
-355
-353
-351
-348
-345
-346
-348
-354
-354
-354
-354
-354
-354
-354
-356
-370
-369
-366
-365
-365
-364
-350
-339
-333
-318
-315
-308
-305
-303
-302
-299
-286
-286
-284
-282
-282
-280
-280
-279
-276
-276
-276
-273
-272
-272
-272
-272
-272
-271
-271
-271
-270
-268
-264
-263
-263
-262
-256
-253
-252
-251
-250
-248
-244
-241
-239
-237
-236
-235
-232
-230
-226
-225
-221
-220
-218
-218
-218
-218
-218
-218
-218
-220
-221
-221
-222
-223
-224
-225
-226
-226
-227
-227
-227
-228
-228
-229
-229
-229
-229
-229
-229
-229
-229
-229
-229
-229
-229
-230
-230
-230
-230
-230
-230
-230
-228
-227
-226
-224
-223
-223
-222
-222
-221
-220
-220
-220
-220
-219
-218
-218
-218
-217
-217
-216
-215
-215
-215
-215
-215
-215
-215
-215
-216
-218
-219
-220
-220
-220
-220
-221
-222
-222
-222
-223
-223
-227
-227
-228
-230
-231
-232
-234
-240
-241
-251
-258
-261
-268
-274
-279
-280
-286
-290
-291
-303
-309
-319
-340
-346
-357
-371
-376
-388
-392
-393
-398
-400
-405
-418
-421
-445
-449
-457
-476
-481
-496
-500
-503
-519
-524
-526
-531
-542
-543
-544
-545
-547
-548
-549
-550
-552
-553
-554
-555
-558
-560
-564
-565
-568
-569
-570
-572
-573
-574
-575
-575
-576
-577
-578
-578
-579
-579
-579
-580
-581
-581
-582
-582
-583
-583
-584
-585
-585
-585
-585
-585
-585
-585
-585
-585
-586
-586
-586
-586
-586
-586
-586
-586
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-586
-584
-579
-578
-577
-576
-576
-575
-574
-573
-572
-571
-570
-570
-569
-569
-569
-569
-568
-567
-567
-566
-565
-564
-563
-561
-561
-561
-560
-560
-559
-558
-557
-557
-557
-557
-557
-559
-559
-560
-561
-561
-563
-563
-564
-565
-567
-568
-569
-570
-571
-572
-573
-575
-575
-576
-577
-578
-578
-579
-579
-579
-580
-580
-581
-581
-581
-582
-582
-582
-583
-583
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-584
-583
-582
-582
-582
-580
-580
-580
-579
-579
-579
-578
-577
-576
-575
-575
-574
-574
-573
-573
-572
-572
-572
-572
-572
-572
-572
-572
-572
-572
-572
-573
-574
-574
-575
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-576
-577
-577
-577
-577
-578
-578
-578
-578
-579
-579
-579
-580
-580
-580
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-581
-582
-582
-582
-582
-582
-582
-582
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-583
-584
-584
-584
-584
-584
-584
-584
-585
-585
-586
-586
-586
-586
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-587
-588
-588
-588
-588
-588
-588
-588
-588
-588
-588
-588
-588
-588
-588
-588
-589
-589
-589
-589
-589
-589
-589
-589
-589
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-590
-591
-591
-591
-592
-592
-592
-592
-592
-592
-592
-592
-592
-593
-593
-594
-594
-594
-595
-595
-595
-596
-596
-597
-597
-597
-597
-597
-597
-597
-597
-597
-597
-598
-598
-598
-598
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-599
-600
-600
-600
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-601
-602
-603
-604
-604
-605
-605
-605
-606
-607
-607
-607
-608
-608
-608
-608
-609
-609
-610
-610
-610
-610
-610
-611
-611
-611
-611
-612
-612
-613
-613
-613
-613
-614
-614
-614
-615
-615
-615
-615
-616
-616
-616
-617
-617
-617
-618
-618
-618
-618
-619
-619
-619
-620
-620
-620
-620
-621
-621
-621
-623
-623
-623
-623
-623
-623
-624
-624
-624
-624
-624
-624
-625
-625
-625
-625
-625
-625
-625
-625
-625
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-626
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-627
-628
-628
-628
-628
-628
-628
-628
-629
-629
-629
-629
-630
-630
-630
-630
-630
-630
-630
-631
-631
-631
-631
-632
-632
-632
-633
-634
-634
-634
-635
-635
-635
-635
-636
-636
-637
-637
-638
-638
-638
-639
-639
-639
-639
-640
-640
-640
-641
-641
-641
-641
-641
-641
-642
-642
-642
-642
-642
-642
-643
-643
-643
-644
-644
-645
-645
-646
-647
-647
-647
-647
-647
-648
-648
-649
-649
-649
-649
-649
-649
-650
-650
-650
-650
-650
-650
-651
-651
-651
-652
-652
-652
-652
-652
-652
-652
-653
-653
-653
-653
-653
-654
-654
-654
-654
-654
-654
-654
-654
-654
-654
-655
-655
-655
-655
-656
-656
-656
-656
-656
-656
-657
-657
-657
-657
-657
-658
-658
-658
-658
-659
-659
-659
-659
-659
-660
-660
-660
-661
-661
-661
-661
-661
-661
-662
-662
-662
-663
-663
-663
-663
-663
-663
-664
-664
-664
-664
-665
-665
-665
-665
-666
-666
-666
-666
-666
-666
-666
-667
-667
-667
-667
-667
-667
-667
-668
-668
-668
-668
-668
-668
-668
-668
-668
-668
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-669
-672
-672
-672
-672
-672
-672
-672
-673
-673
-673
-673
-674
-674
-675
-675
-675
-676
-676
-676
-676
-676
-676
-676
-676
-676
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-677
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-678
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-679
-680
-680
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-681
-682
-682
-682
-682
-682
-682
-682
-683
-683
-684
-684
-684
-684
-684
-684
-684
-684
-685
-685
-685
-685
-685
-685
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-686
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-687
-688
-688
-688
-688
-688
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-689
-690
-691
-691
-691
-692
-692
-692
-692
-692
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-693
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-694
-695
-695
-695
-695
-695
-695
-695
-695
-695
-695
-695
-696
-696
-696
-696
-696
-696
-696
-696
-696
-696
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-697
-698
-698
-698
-698
-698
-698
-698
-698
-698
-698
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-699
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-700
-701
-701
-701
-701
-701
-701
-701
-702
-702
-702
-702
-702
-702
-702
-702
-702
-702
-702
-702
-703
-703
-703
-703
-703
-703
-703
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-704
-705
-705
-705
-705
-705
-705
-705
-705
-705
-705
-705
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-706
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-707
-708
-708
-708
-708
-708
-708
-708
-708
-708
-708
-708
-709
-709
-709
-710
-710
-710
-710
-710
-710
-710
-710
-710
-711
-711
-711
-711
-711
-711
-711
-711
-711
-711
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-712
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-713
-714
-714
-714
-714
-714
-714
-714
-714
-714
-714
-714
-714
-714
-714
-715
-715
-715
-715
-715
-715
-715
-715
-715
-715
-715
-715
-715
-715
-716
-716
-716
-716
-716
-716
-716
-716
-716
-716
-716
-716
-717
-717
-717
-717
-717
-717
-717
-717
-717
-717
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-718
-719
-719
-719
-719
-719
-719
-719
-719
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-720
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-721
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-722
-723
-723
-723
-723
-723
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
-724
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+695
+79
+130
+201
+551
+771
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+798
+795
+787
+782
+775
+771
+763
+760
+759
+757
+756
+755
+754
+751
+750
+747
+745
+741
+740
+737
+732
+730
+725
+721
+716
+710
+702
+698
+695
+695
+695
+695
+695
+695
+695
+694
+691
+676
+649
+603
+567
+535
+525
+517
+512
+510
+509
+509
+509
+509
+509
+509
+509
+508
+507
+504
+503
+501
+501
+501
+501
+501
+503
+504
+506
+506
+507
+507
+507
+508
+509
+510
+510
+511
+511
+512
+513
+514
+514
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+515
+516
+517
+518
+519
+521
+524
+525
+527
+529
+531
+533
+534
+537
+543
+551
+555
+560
+570
+574
+577
+580
+587
+591
+595
+595
+596
+596
+596
+596
+596
+596
+596
+596
+596
+596
+596
+598
+608
+617
+630
+646
+675
+693
+719
+732
+737
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+739
+743
+759
+782
+789
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+797
+794
+790
+782
+777
+772
+767
+764
+763
+761
+761
+761
+761
+761
+761
+761
+761
+761
+761
+761
+762
+765
+767
+773
+781
+787
+792
+797
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+798
+798
+796
+795
+793
+790
+788
+784
+781
+777
+774
+772
+770
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+793
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+799
+797
+796
+794
+793
+792
+790
+789
+789
+789
+788
+788
+786
+785
+782
+780
+775
+774
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+773
+774
+776
+777
+778
+779
+779
+779
+779
+779
+779
+779
+779
+779
+778
+777
+775
+775
+774
+774
+773
+773
+773
+773
+772
+772
+771
+770
+770
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+769
+767
+766
+765
+765
+765
+765
+764
+764
+764
+763
+762
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+759
+758
+756
+755
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+754
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+755
+752
+751
+751
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+750
+749
+748
+748
+748
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+747
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+746
+745
+743
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+734
+731
+731
+727
+727
+726
+726
 724
 724
 724
 724
 724
 724
-725
-725
-725
-725
-725
-725
-725
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-726
-727
-727
-727
-727
-727
-727
-727
-727
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
-728
+719
+713
+707
+705
+704
+704
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+703
+702
+702
+700
+698
+697
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+696
+695
+694
+690
+686
+683
+681
+680
+680
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+679
+678
+678
+677
+675
+674
+672
+669
+668
+667
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+666
+665
+664
+662
+661
+659
+655
+654
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+653
+651
+650
+645
+642
+639
+638
+635
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+633
+632
+629
+627
+626
+626
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+623
+622
+622
+620
+619
+619
+619
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+618
+617
+617
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+616
+615
+614
+613
+612
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+611
+610
+608
+605
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+598
+596
+595
+594
+593
+589
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+577
+575
+571
+565
+561
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+560
+558
+554
+553
+548
+546
+545
+545
+545
+545
+545
+545
+545
+545
+545
+545
+545
+545
+545
+545
+545
+544
+542
+540
+534
+533
+532
+531
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+530
+529
+528
+521
+515
+512
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+510
+509
+508
+506
+502
+499
+498
+497
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+496
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+495
+494
+491
+470
+460
+453
+451
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+450
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+448
+447
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+446
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+445
+444
+431
+419
+413
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+412
+413
+415
+415
+417
+419
+420
+421
+422
+422
+423
+424
+425
+426
+427
+430
+431
+432
+432
+432
+432
+432
+432
+432
+432
+432
+432
+432
+432
+432
+432
+432
+431
+431
+430
+429
+429
+428
+427
+427
+425
+425
+424
+423
+423
+422
+422
+421
+421
+421
+420
+420
+420
+420
+419
+419
+418
+417
+417
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+416
+415
+414
+413
+412
+411
+410
+410
+410
+410
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+409
+408
+407
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+406
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+404
+403
+401
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+397
+394
+394
+394
+394
+394
+394
+394
+393
+393
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+392
+391
+390
+390
+388
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+379
+380
+380
+382
+402
+409
+412
+415
+416
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+416
+415
+415
+415
+415
+415
+415
+412
+411
+411
+410
+409
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+403
+407
+410
+411
+412
+413
+414
+415
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+417
+418
+419
+420
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+421
+415
+408
+406
+406
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+405
+406
+407
+408
+408
+409
+409
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+410
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+411
+412
+413
+413
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+414
+424
+427
+428
+431
+432
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+433
+432
+428
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+427
+426
+426
+425
+425
+425
+424
+423
+422
+421
+418
+417
+416
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+415
+417
+418
+421
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+422
+423
+423
+424
+425
+427
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+428
+429
+429
+431
+432
+433
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+434
+435
+435
+435
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+436
+437
+437
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+438
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+435
+436
+437
+438
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439
+439